-3

1.程序继续运行其他行,但此错误仅针对某些特定行。如果要插入 134789 行,则只插入大约 133666 行。所有行的格式与日志文件中的格式相同。

 *com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'In'.
            at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
            at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
            at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:792)
            at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:689)
            at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
            at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
            at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
            at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
            at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(SQLServerStatement.java:642)
            at Access.insertIntoDatabase(Access.java:186)
            at appWindowLog$1thread1.run(appWindowLog.java:233)
            at java.lang.Thread.run(Unknown Source)*
4

2 回答 2

2

你知道,这是一个初学者级别的提示:

查找出错的 SQL 语句。

严重地。

在异常处理程序中,打印出 SQL 并查看问题所在。它将为您提供准确的 SQL。鉴于错误消息,您基本上有类似 SQL 注入的问题 - 字段中的某些内容需要转义,这是一个问题,因为您构建的语句不使用参数 (BAD BAD BAD)。

关键字“In”附近的语法不正确。

IN (not INTO) 不是出现在您的 INSERT INTO ... VALUES... 语法中的关键字,因此会出现一些问题。例如,包含 ' - 的字符串不应该发生,但是....好吧;) 显然它确实发生了。

当你找到它时,在谷歌中输入“SQL Injection”并了解它 - 运行相同的方法。你永远不会再像这样将 SQL 放在一起(或者当有人发现时应该被解雇)。

于 2012-05-30T10:08:43.373 回答
2

考虑使用PreparedStatement。您的日志行可能包含'会破坏您的插入语句的意外符号。如果您使用 PreparedStatement 它将以正确的方式转义参数。

于 2012-05-30T10:05:15.443 回答