java - 再一次 => "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server... "

标签 java mysql sql

代码截图

enter image description here

首先,这是我在这里的第一篇文章,我对编程还很陌生,所以很抱歉,如果我问一些愚蠢的问题,我的文章会缺少一些信息。请告诉我。

我在尝试更改 SQL 数据库中的字段时收到上述失败消息。我检查了其他几个有类似问题的帖子,但它们都有不同的原因,在我看来我的问题还有另一个。 随附的屏幕截图显示了一种有效的方法和一种导致问题的方法。对于我的生活,我无法弄清楚问题是什么。

完整的失败信息是:

    Fehlermeldung: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'taskID =79' at line 1
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'taskID =79' at line 1
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1912)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1251)
    at databaseConnection.TaskDAOimplDB.updateTask(TaskDAOimplDB.java:110)
    at procedure.Procedure.main(Procedure.java:36)

]

enter image description here

最佳答案

这不是怎么来的PreparedStatement应该使用。关键是替换 SQL 中的 ? 字符 - 这也处理字符串内部的间隔,否则可能导致 SQL itslef 无效。我还建议使用 PreparedStatement::executeUpdate .哪个更适合这种查询。

Executes the SQL statement in this PreparedStatement object, which must be an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.

String sql = "UPDATE Tasks SET dueDate=? WHERE taskID=?";

try (Connection conn = DriverManager.getConnection(...);
    PreparedStatement stm = conn.createStatement(sql);) 
{
    // Don't forget the `parameterIndex` starts with `1` unlike arrays or lists
    stm.setString(1, dueDate);
    stm.setInt(2, taskID);
    stm.executeUpdate();

    System.out.println("Updated");

} catch (SQLException e) {
    ...
}

关于java - 再一次 => "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server... ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59459189/

相关文章:

javascript - 检查 onPageFinished 是否完成

php - 发布与 PHP 填充的下拉菜单相关的 MySQL 数据

SQL/Hive 计数不同的列

java - Spring Security 出现 403 错误

java - JUnit + Spring 配置文件 : could not load JDBC driver class

php - 保护 SQL Server 供私有(private)使用

python - MongoDB 相对于 MySQL 和 PostgreSQL 的优势是什么?

sql - 在 Oracle 中,使用 1=1 启动 SQL 查询的 WHERE 子句有用吗?

java - Android JSON 接收问题

mysql - 根据 MYSQL 中的条件查找不同的值,并在下一列 PHP 中计算结果