2015-06-07 13 views
-2

我想獲得實際創建的主鍵。 我需要立即爲另一個方法,但它會返回一個錯誤。 但它返回一個SQLE。我不知道我的錯誤。 我希望我給你enaugh信息。 (本的System.out.println(ID)是隻爲我檢查它是否返回正確的PrimaryKey)我的錯誤?

CREATETABLE:

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) 

GuiClass:

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(); 
     } 

DatabaseClass:

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$3.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.access$500(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.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) 
+0

你應該在你的源代碼中標記「Datenbank.mitarbeiterHinzufügen(Datenbank.java:69)」這一行。並添加一個Java標籤的帖子 – Marged

+4

不__不'SQL_實施_給你一個線索?我希望你至少在這裏發佈消息之前閱讀消息。 –

+0

你的'PreparedStatement'中有'9?',但你只設置了8個值! –

回答

0

嘗試

SELECT last_insert_rowid() FROM MitarbeiterInfo代替。

你得到的異常似乎暗示IDENTITY_VAL_LOCAL()不被SQLite支持。

+0

我嘗試過,但它dosnt工作相同的錯誤ocurs。 – rubine

+0

你可以嘗試爲你的查詢創建一個新的準備好的語句,而不是重複使用'pst'嗎? –

+0

我試過像這樣 String identitiy =「SELECT last_insert_rowid()FROM MitarbeiterInfo」; \t \t \t PreparedStatement pstm = conn.prepareStatement(query); \t \t \t ResultSet rs = pstm.executeQuery(identitiy); \t \t \t rs.next(); \t \t \t int id = rs.getInt(1); \t \t \t System.out.println(id); dosnt work too – rubine

1

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"); 
+1

@shekhar,不,@Rajesh是正確的;它應該是'rs.getInt(1)'而不是'rs.getInt(「1」)'。結果集中沒有標記爲「1」的列。 –

+0

我現在改變了,但同樣的錯誤發生。 – rubine

+0

@ rubine - 您是否聯合嘗試了我們兩個人的建議?我建議你按照我的回答和Rajesh的回答中提到的做出2個改變,然後嘗試相同的方法。 –