【问题标题】:SQL syntax error in Java ServletJava Servlet 中的 SQL 语法错误
【发布时间】:2014-09-18 19:26:22
【问题描述】:

我尝试过这样做:

query1="INSERT INTO `users`(`email`, `password`, `login`, `familiya`, `name`, `otchestvo`, `age`, `country`, `city`, `mob`, `skype`) VALUES ("+user.getEmail()+","+user.getPassword()+","+user.getLogin()+","+user.getFamiliya()+","+user.getName()+","+user.getOtchestvo()+",11,"+user.getCountry()+","+user.getCity()+","+user.getMob()+","+user.getSkype()+")";

我做错了什么?所有“get”都不为空,只有语法错误。

我想发布数据库的图像,但我需要 10 个声望... 所有字段均为varchar(15),年龄为int(2)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@mail.ru,12345,dima,Dmitriev,dima,Dmitrievich,11,Dmitrountry,Dmitriegrad,2020327' at line 1

【问题讨论】:

  • 你的SQL有很多问题,一是Varchar类型应该用单引号括起来。
  • 都是varchar吗?
  • 不要那样构造你的sql。使用PreparedStatement
  • 您使用的是哪个数据库?看起来像 MySQL,但是...?
  • 您还在为字段使用保留字,例如 password。我建议用[ ] 包围他们

标签: java sql database syntax


【解决方案1】:

在字符串值(varchar、文本等)周围加上单引号“'”

所以

String query1="INSERT INTO users(email, password, login, familiya, name, otchestvo, age, country, city, mob, skype) VALUES  ('"+user.getEmail()+"','"+user.getPassword()+"','"+user.getLogin()+"','"+user.getFamiliya()+"','"+user.getName()+"','"+user.getOtchestvo()+"',11,'"+user.getCountry()+"','"+user.getCity()+"','"+user.getMob()+"','"+user.getSkype()+"')";

不是字符串相关的类型不要得到单引号......

不过,更好的方法是使用 PreparedStatement,

String sql = "INSERT INTO users(email, password, login, familiya, name, otchestvo, age, country, city, mob, skype) VALUES  (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

 try (PreparedStatement preparedStatement = con.prepareStatement(sql)) {
     preparedStatement.setString(1, user.getEmail);
     preparedStatement.setString(2, user.getPassword);
     preparedStatement.setString(3, user.getLogin());
     preparedStatement.setString(4, user.getFamiliya());
     preparedStatement.setString(5, user.getName());
     preparedStatement.setString(6, user.getOtchestvo());
     preparedStatement.setInt(7, 11);
     preparedStatement.setString(8, user.getCountry());
     preparedStatement.setString(9, user.getCity());
     preparedStatement.setString(10, user.getMob());
     preparedStatement.setString(11, user.getSkype());
     preparedStatement.executeUpdate();
}

【讨论】:

  • 我需要从 Java.Sql 或 jdbc 导入 PreparedStatement 吗?
  • java.sql.PreparedStatement
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2014-12-04
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多