繁体   English   中英

使用变量的SQL插入查询的语法错误

[英]Error in the syntax of the SQL insert query using variables

尝试在sql表中插入记录时,我在表中的10列中使用了10个变量,但是当我运行查询时,它会引发错误。 我尝试查看代码中是否有错字,但找不到:

线程“主”中的异常java.sql.SQLSyntaxErrorException:您的SQL语法有错误。 检查与您的MySQL服务器版本相对应的手册,以在'','2019','12','3','10660','2018-12-11','UTC',''附近使用正确的语法{“ sleepIQScore”:{“ min”:0,“ max”'在第1行

我的代码是:

public void insertDataTable1() throws SQLException {
    connection = new MyConnection().getConnection();
    Random random = new Random();
    String timeZone = "UTC";
    String dummyJson = "'{\"sleepIQScore\": {\"min\": 0, \"max\": 0, \"sum\": 0, \"count\": 0}}')";
    int longestSessionDuration = 1000 + random.nextInt(9999), bamUserID = 1000000 + random.nextInt(9999999);
    int year = 2019, month = 12, sleepSessionCount =3;
    java.sql.Date longestSessionStart = new java.sql.Date(Calendar.getInstance().getTime().getTime());

    String sql = "INSERT INTO aggregates_all_time(bam_user,year,month,sleep_session_count," +
            "longest_session_total_duration,longest_session_start,timezone, current_stats, second_longest_session_stats, prior_stats)"
            + "VALUES ("+bamUserID+"','"+year+"','"+month+"','"+sleepSessionCount+"','"+longestSessionDuration+"','" +
            ""+longestSessionStart+"','"+timeZone+"','"+dummyJson+" ','"+dummyJson+"','"+dummyJson+")";

    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    int i = preparedStatement.executeUpdate();
    System.out.println(i + " Row/s inserted");

}

您永远不要将值连接到这样的查询字符串中。 这是不安全的,因为它使您的应用程序可以进行SQL注入,这是安全问题的主要原因之一。 此外,由于缺少引号等原因,还会导致出现类似您的问题的错误。

但是,解决方案是不添加那些缺少的引号,因为这仍然使您容易受到SQL注入风险的影响。 相反,您需要在执行之前使用参数并设置这些参数的值。

根据您问题中的查询的简化示例:

try (PreparedStatement preparedStatement = connection.prepareStatement(
        "INSERT INTO aggregates_all_time(bam_user, year, month, ..) values (?, ?, ?, ..)")) {
    preparedStatement.setInt(bamUserID);
    preparedStatement.setInt(year);
    preparedStatement.setInt(month);
    // other values

    preparedStatement.executeUpdate();
}

另请参见JDBC教程中的使用准备的语句

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM