UCanAccess:从空间

问题描述:

我想数字/文本插入表中意外的标记,但是当程序试图插入文本,我得到的错误
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

你想要做这样的事情:

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