无法检测以下 jdbc 代码中的错误

Posted

技术标签:

【中文标题】无法检测以下 jdbc 代码中的错误【英文标题】:Cannot detect error in the following jdbc code 【发布时间】:2011-04-22 20:28:37 【问题描述】:

替换为

package p1;



import java.sql.*;

public class jdbcDemo



    public static void main(String args[])
     int id = 0;
    try
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       Connection con = DriverManager.getConnection("jdbc:odbc:loginDSN");
       Connection con1 = DriverManager.getConnection("jdbc:odbc:loginDSN");
      Statement stat = con.createStatement();
      System.out.println("got connection");
      ResultSet rs = stat.executeQuery("Select max(UID) from mytable");
      while(rs.next())
       id=rs.getInt(1);
      
      id++;
      System.out.println(id);
      PreparedStatement ps = con1.prepareStatement("Insert into mytable(UID,Username,Password) values(?,?,?)");
      ps.setInt(1,id);
      ps.setString(2,"abhi");
      ps.setString(3,"bindra");


     ps.executeUpdate();

        
    catch(Exception e)
    

       e.printStackTrace();
    





输出是

得到连接 6

但没有反映变化:(

【问题讨论】:

System.out.println("exception") 替换为e.printStackTrace(),然后告诉我们它的含义。 你可能也想看看download.oracle.com/javase/tutorial/essential/exceptions 您仍然需要告诉我们它的内容。向我们展示它打印到控制台的堆栈跟踪。 没有堆栈跟踪。它运行完美。即使我将其设置为 int rows=ps.executeUpdate();它显示行的值为 1,但是当我查看表格时,没有记录的迹象。 【参考方案1】:

您正在尝试使用当前的 MAX(UID) 插入一个新的 UID。我想 UID 是主键,因此需要唯一性。在插入期间向 id 添加一个(也使用 WhiteFang34 的建议),使用序列或其他一些机制来自动更新列(例如 mysql 中的自动编号)。

【讨论】:

我确实增加了 id ,程序执行但更改在表中不可见 :( @Arora 这是否意味着在增加 id 之后,在插入之前(这不会是线程安全的,但可能会在小型示例项目中工作),它执行 without 打印“异常”或者它根本不会崩溃? 增加 id 后,打印执行,但更改未反映在表中 如果它声称正在执行(并因此声称实际插入 1 条记录;rows == 1),那么我只能假设您对表有事务视图。重新加载表格。【参考方案2】:

由于您将UID 视为int,因此您可能还需要将其设置为一个。由于您当前使用的是已经存在的max(UID),因此您可能还需要将其增加一。

ps.setInt(1, id + 1);

或者也许您根本不需要指定它,因为它是一个自动递增的列?

【讨论】:

但我确实将其转换为字符串。? 您应该指定更多细节,如 skaffman 建议的异常堆栈跟踪。否则我们只能猜测你的问题是什么。 当然,好吧,我会这样做的:)

以上是关于无法检测以下 jdbc 代码中的错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 JDBC 的 Oracle 临时表计数错误

使用 chardet 检测带有 JDBC 的 MySQL 数据库中的错误编码

eclipse中的MySql(MAMP)jdbc连接错误

DBI 包中的 dbWriteTable 函数抛出错误

无法在 Netezza 上执行 executeBatch() - JDBC

带有 JSP 的 JDBC 无法插入