gpt4 book ai didi

java - 使用 ODBC 和 MS Access 时出现主键冲突错误代码

转载 作者:行者123 更新时间:2023-12-01 23:43:33 25 4
gpt4 key购买 nike

我通过 ODBC 驱动程序将 Java 与 Microsoft Access 结合使用。当我插入主键的重复条目时,它给出一个错误:java.sql.SQLException:一般错误。我想向用户显示一条消息,表明该记录已存在,但我认为 ODBC 在某些其他情况下也可能引发此异常。所以我发现每条消息都有错误代码( ref ),但我没有发现主键违规的错误代码。谁能告诉我使用 MS Access 的 ODBC 主键违规的错误代码是什么?

这是基本代码

String qry = "INSERT INTO customers VALUES ('" + txtReg.getText()
+ "' ,'" + txtName.getText() + "', '" + txtCity.getText() + "' ,'" + txtCell.getText() + "')";

try {

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:MyDB");

Statement st = con.createStatement();
st.executeQuery(qry);
st.close();
con.close();

} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(this, "Error: " + ex, "Error!", JOptionPane.ERROR_MESSAGE);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "Error: " + ex, "Error!", JOptionPane.ERROR_MESSAGE);
}

这些txtName等是JTextFields。这是完整的堆栈跟踪

connected
st created

Error code: 0
SQLState: S1000
Messsage: General error

java.sql.SQLException: General error
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6986)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288)
at gui.InsertFileCode.btnInsertActionPerformed(insertFileCode.java:399)

最佳答案

问题出在这一行st.executeQuery(qry);

executeQuery(query)方法主要用于SELECT语句,它返回ResultSet对象的in形式。

既然该语句是 INSERT 语句,则必须使用 executeUpdate(query) ,此方法一般用于 INSERT、UPDATE 和 DELETE 语句。当表更新成功时返回 1。例如

int result = st.executeUpdate(qry);
System.out.println(result);
<小时/>

更新:

根据评论,我推测您还有另一个问题,而不是 SQL 语句。您必须注意,当使用 java 到 Ms Access 时,您实际上是在连接到中间件服务器,因此,在运行 SQL 时您必须预料到意外的异常。 em> 语句,例如:

CRATE TABLE FOO (ID varchar (50) NOT NULL , NAME varchar (255) DEFAULT NULL)

此查询在 SQLite 和 MySQL 上运行(也可能是 SQL Server,因为我没有测试它),在 Access 上给出 Syntex 错误,如 DEFAULT NULL应该删除 才能运行该语句。也许您还必须准备好使用 Access“数据库”文件来面对许多其他问题。

所以,我告诉你离开它,MS Access 适合它的用户,而不适合我们作为程序员,我们必须找到最好的通用方法,因为我们必须考虑到某些用户使用这个应用程序,但不这样做对编程语言和数据库一无所知。

那我该怎么办?

我不是数据库专家,但请采纳我的建议:

  • 如果您的应用需要共享其数据库:用于此目的的 MySQL、Oracle 和 SQL Server
  • 如果您的应用程序仅用于某些目的,并且不需要与其他用户共享其记录,请使用实际上无服务器的数据库引擎,例如 SQLite。这似乎是您的最佳选择,因为它是像 Access 这样的文件,只需要 Java 的外部驱动程序,请参阅 this .

我认为有一个用于设计 SQLite 数据库的 FireFox 扩展,如果你在 google 上搜索也许你会找到它。

关于java - 使用 ODBC 和 MS Access 时出现主键冲突错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com