[英]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.