【问题标题】:Exception in thread "main" java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]线程“主”java.sql.SQLException 中的异常:[Microsoft][ODBC Microsoft Access Driver]
【发布时间】:2015-04-28 21:30:06
【问题描述】:

在尝试通过 java 代码在 ms 访问表中插入基因名时,我收到错误

线程“主”java.sql.SQLException 中的异常:[Microsoft][ODBC Microsoft Access 驱动程序] 查询中的语法错误(缺少运算符) 表达“酿酒酵母(菌株 ATCC 204508 / S288c)”。 在 sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964) 在 sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121) 在 sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3117) 在 sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:337) 在 sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:287) 在 sequence.SequenceAnalyser.(SequenceAnalyser.java:50)

我的代码是

try{
    executeUpdate = odbc.state.executeUpdate("INSERT INTO genename (GENE )VALUES ("+result+")");
    odbc.state.close();
}

我该怎么办?

【问题讨论】:

  • 把你的查询结果放到一个局部变量中,并在那里设置一个断点,看看你是否得到了有效的 SQL。但无论如何,您都应该进行参数化查询。

标签: java ms-access jdbc jdbc-odbc


【解决方案1】:

看起来您的result 字符串包含

Saccharomyces cerevisiae (strain ATCC 204508 / S288c)

因此,当您将原始字符串 注入 到您的 SQL 语句中时,您最终会得到无效的语法。

相反,您应该使用像这样的参数化查询

String sql = "INSERT INTO genename (GENE) VALUES (?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, result);
ps.executeUpdate();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多