2017-07-31 68 views
0

我想數字/文本插入表中意外的標記,但是當程序試圖插入文本,我得到的錯誤
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.2 unexpected token: EX1 required:)UCanAccess:從空間

這裏是我的相關代碼:

try (Connection conn = DriverManager.getConnection(
    "jdbc:ucanaccess://" + dbPath 
    + ";newdatabaseversion=V2010" 
    )) { 
    DatabaseMetaData dmd = conn.getMetaData(); 
    try (ResultSet rs = dmd.getTables(null, null, tableName, new String[] { "TABLE" })) { 
      try (Statement s = conn.createStatement()) { 
       ResultSet resultSet; 
       String tableName = "Database"; 
       s.executeUpdate("CREATE TABLE " + tableName +" ([SUBJID] 
       INTEGER, [PARAMCD] TEXT, [PARAM] TEXT, [AVAL] DOUBLE)"); 
       String s1="Text Ex1"; 
       String s2="Text Ex2"; 
       int a=3; 
       double b=2; 
       resultSet = s.executeQuery("SELECT * FROM " + tableName); 
       s.executeUpdate("INSERT INTO " + tableName 
        + " (SUBJID, PARAMCD, PARAM, AVAL)" 
        + " VALUES ("+ a+", " + s1 + ", " + s2 +" , " + b +")"); 

它看起來是空白出現時引起的錯誤。我嘗試將s1更改爲「TextEx1」,將s2更改爲「TextEx2」,這給了我net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.2 user lacks privilege or object not found: TEXTEX1的錯誤。

在此先感謝任何人可以提供的幫助。

+0

呼叫表'Database'是不是最好的主意。加上'Text Ex1',你需要適當的引用或參數綁定(它會更安全)。 – lad2025

+0

正確的引用是什麼意思? – Evan

+0

只需打印「INSERT INTO」+ tableName +「(SUBJID,PARAMCD,PARAM,AVAL)」 +「VALUES(」+ a +「,」+ s1 +「,」+ s2 +「,」+ b +「 )「' – lad2025

回答

0

你想要做這樣的事情:

String sql = "INSERT INTO [" + tableName + "] (SUBJID, PARAMCD, PARAM, AVAL) VALUES (?,?,?,?)"; 
PreparedStatement ps = conn.prepareStatement(sql); 
ps.setInt(1, a); 
ps.setString(2, s1); 
ps.setString(3, s2); 
ps.setDouble(4, b); 
ps.executeUpdate(); 
+0

謝謝Gord,這個工作很完美。如果我想更新而不是插入,我該怎麼辦?我嘗試用「UPDATE」替換「INSERT INTO」,但是這給了我一個錯誤「net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 4.0.2意外標記:(需要:SET」。 – Evan

+0

UPDATE語法是有點不同,例如'UPDATE [Database] SET PARAMCD = ?, PARAM =?WHERE SUBJID =?' –

+0

我用String sql ='「UPDATE [」+ tableName +「] SET SUBJID = ?, PARAMCD = ?, PARAMCD =?WHERE AVAL =?「;',其中大部分工作 - 但是,當我在多行中找到」AVAL「值時遇到了問題,因爲當我只想更新最新的。我嘗試將其更改爲'String sql =「UPDATE [」+ tableName +「] SET SUBJID = ?, PARAMCD = ?, PARAM =?,AVAL =?WHERE PARAMCD =?AND SUBJID =?」;錯誤的'net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 4.0.2參數沒有設置。有沒有什麼辦法可以添加多個參數或什麼? – Evan