无法检测以下 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 代码中的错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 chardet 检测带有 JDBC 的 MySQL 数据库中的错误编码