我的错误在哪里?
Wheres my Mistake?
我想获取实际创建的主键。
我立即需要它用于另一种方法,但它 returns 是一个错误。
但它 returns 一个 SQLE。我不知道我的错误在哪里。
我希望我给了你足够的信息。
(System.out.println(id) 只是让我检查它是否 returns 正确的主键)
创建表:
CREATE TABLE "MitarbeiterInfo" ("Vorname" TEXT, "Nachname" TEXT, "Geburtsdatum" CHAR, "Wohnadresse" TEXT, "Postleitzahl" TEXT, "Eintrittsdatum" CHAR, "Handynummer" TEXT, "Email" TEXT, "ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL )
桂类:
public void actionPerformed(ActionEvent e) {
new Datenbank().mitarbeiterHinzufügen(
textField.getText(),textField_1.getText(),textField_2.getText(),textField_3.getText(),
textField_4.getText(),textField_5.getText(),textField_6.getText(),textField_7.getText());
refreshTable();
}
数据库类:
public void mitarbeiterHinzufügen(String v, String n, String g, String w, String p, String e, String h, String email){
conn=Datenbank.dbConnector();
try {
String query="insert into MitarbeiterInfo (Vorname,Nachname,Geburtsdatum,Wohnadresse,Postleitzahl,Eintrittsdatum,Handynummer,Email,ID) values (?,?,?,?,?,?,?,?,?)";
PreparedStatement pst=conn.prepareStatement(query);
pst.setString(1, v);
pst.setString(2, n);
pst.setString(3, g);
pst.setString(4, w);
pst.setString(5, p);
pst.setString(6, e);
pst.setString(7, h);
pst.setString(8, email);
pst.execute();
String identitiy = "SELECT IDENTITY_VAL_LOCAL() FROM MitarbeiterInfo";
ResultSet rs = pst.executeQuery(identitiy);
rs.next();
int id = rs.getInt("1");
System.out.println(id);
JOptionPane.showMessageDialog(null, "Mitarbeiter hinzugefügt");
pst.close();
} catch (Exception b) {
b.printStackTrace();
}
}
发生错误:
java.sql.SQLException: not implemented by SQLite JDBC driver
at org.sqlite.Unused.unused(Unused.java:31)
at org.sqlite.PrepStmt.executeQuery(PrepStmt.java:596)
***at Datenbank.mitarbeiterHinzufügen(Datenbank.java:69)***
at GUI.actionPerformed(GUI.java:138)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
在 java.sql.ResultSet 中,为 getInt 定义了以下方法:
getInt(int columnIndex)
getInt(String columnLabel)
我发现您的代码中的以下行有问题:
int id = rs.getInt("1");
您应该通过以下选项之一获得价值:
int id = rs.getInt(1);
或者
int id = rs.getInt("Column_name");
尝试
SELECT last_insert_rowid() FROM MitarbeiterInfo
代替。
您遇到的异常似乎暗示 IDENTITY_VAL_LOCAL()
不受 SQLite 支持。
我想获取实际创建的主键。 我立即需要它用于另一种方法,但它 returns 是一个错误。 但它 returns 一个 SQLE。我不知道我的错误在哪里。 我希望我给了你足够的信息。 (System.out.println(id) 只是让我检查它是否 returns 正确的主键)
创建表:
CREATE TABLE "MitarbeiterInfo" ("Vorname" TEXT, "Nachname" TEXT, "Geburtsdatum" CHAR, "Wohnadresse" TEXT, "Postleitzahl" TEXT, "Eintrittsdatum" CHAR, "Handynummer" TEXT, "Email" TEXT, "ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL )
桂类:
public void actionPerformed(ActionEvent e) {
new Datenbank().mitarbeiterHinzufügen(
textField.getText(),textField_1.getText(),textField_2.getText(),textField_3.getText(),
textField_4.getText(),textField_5.getText(),textField_6.getText(),textField_7.getText());
refreshTable();
}
数据库类:
public void mitarbeiterHinzufügen(String v, String n, String g, String w, String p, String e, String h, String email){
conn=Datenbank.dbConnector();
try {
String query="insert into MitarbeiterInfo (Vorname,Nachname,Geburtsdatum,Wohnadresse,Postleitzahl,Eintrittsdatum,Handynummer,Email,ID) values (?,?,?,?,?,?,?,?,?)";
PreparedStatement pst=conn.prepareStatement(query);
pst.setString(1, v);
pst.setString(2, n);
pst.setString(3, g);
pst.setString(4, w);
pst.setString(5, p);
pst.setString(6, e);
pst.setString(7, h);
pst.setString(8, email);
pst.execute();
String identitiy = "SELECT IDENTITY_VAL_LOCAL() FROM MitarbeiterInfo";
ResultSet rs = pst.executeQuery(identitiy);
rs.next();
int id = rs.getInt("1");
System.out.println(id);
JOptionPane.showMessageDialog(null, "Mitarbeiter hinzugefügt");
pst.close();
} catch (Exception b) {
b.printStackTrace();
}
}
发生错误:
java.sql.SQLException: not implemented by SQLite JDBC driver
at org.sqlite.Unused.unused(Unused.java:31)
at org.sqlite.PrepStmt.executeQuery(PrepStmt.java:596)
***at Datenbank.mitarbeiterHinzufügen(Datenbank.java:69)***
at GUI.actionPerformed(GUI.java:138)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
在 java.sql.ResultSet 中,为 getInt 定义了以下方法:
getInt(int columnIndex)
getInt(String columnLabel)
我发现您的代码中的以下行有问题:
int id = rs.getInt("1");
您应该通过以下选项之一获得价值:
int id = rs.getInt(1);
或者
int id = rs.getInt("Column_name");
尝试
SELECT last_insert_rowid() FROM MitarbeiterInfo
代替。
您遇到的异常似乎暗示 IDENTITY_VAL_LOCAL()
不受 SQLite 支持。