2015-05-13 87 views
1

我使用ActiveJDBC和Oracle 11g DB。當我使用saveIt時,我得到java.sql.Exception。當我得到它的實例或列表時,一切都好。 我做錯了什麼?使用ActiveJDBC時出現sqlException

Exception in thread "main" org.javalite.activejdbc.DBException: java.sql.SQLException: Invalid argument 
зове, query: INSERT INTO dept (DEPTNO, DNAME, LOC) VALUES (?, ?, ?), params: 45, sdfa, fdg 
     at oracle.jdbc.driver.AutoKeyInfo.getNewSql(AutoKeyInfo.java:187) 
     at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:5704) 
     at org.javalite.activejdbc.DB.execInsert(DB.java:598) 
     at org.javalite.activejdbc.Model.insert(Model.java:2698) 
     at org.javalite.activejdbc.Model.save(Model.java:2597) 
     at org.javalite.activejdbc.Model.saveIt(Model.java:2524) 
     at JavaHomeTask.Dept.addPersistence(Dept.java:72) 
     at JavaHomeTask.App.addRow(App.java:103) 
     at JavaHomeTask.App.main(App.java:50) 
Caused by: java.sql.SQLException: Invalid argument 
     ... 9 more 

這裏是我的代碼:

public void addPersistence() throws IOException { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
     Dept d = new Dept(); 
     String value; 
     for (String s : getAttributesNames()) { 
      System.out.println("Enter " + s + " and press Enter button:"); 
      value = reader.readLine(); 
      d.set(s, value); 
     } 
     d.saveIt(); 

    } 

public List<String> getAttributesNames() { 
     return Arrays.asList("DEPTNO", "DNAME", "LOC"); 
    } 
+0

你可以發佈整個堆棧跟蹤嗎?另外,我認爲你的一個參數有問題,所以甲骨文抱怨道。 – ipolevoy

+0

@ipolevoy看起來好像是整個堆棧跟蹤。表部門,其中我嘗試插入行的模式是 DEPTNO編號(3) DNAME VARCHAR2(14) LOC VARCHAR2(13) 我也嘗試這樣的方式: 系d =新系(); d。set(「deptno」,Integer.valueOf(11)); d.set(「dname」,「name」); d.set(「loc」,「location」); d.saveIt(); 但結果是一樣的。 PS抱歉我的英文不好。 – alex

+0

我發現這些話題 https://github.com/javalite/activejdbc/issues/385 好像我有同樣的問題,我的表中沒有id列。我對嗎? – alex

回答

2

的probleb的原因是ActiveJDBC使用id列作爲Primari密鑰表識別哪些操作 - 應使用INSERT或UPDATE。如果表沒有這樣的列,程序員應該使用@IdName(「nameOfColumn」)註釋手動指定PK。更多的信息你可以找到here