Mysql 从 Java 插入时出现日期列错误

Mysql Date Column Error during insertion from Java

我想使用 JDBC 插入数据,每当我执行程序时它都会显示一些 Mysql 错误:

插入语句:

String sql = "INSERT into books(name, isbn, author, category, desc, published) VALUES('"+name+"','"+isbn+"','"+author+"','"+category+"', '"+desc+"','"+book_published+"')";

我正在尝试使用以下方法将字符串转换为日期:

String yr = year.getSelectedItem().toString();
String mn = month.getSelectedItem().toString();
String dy = day.getSelectedItem().toString();
String book_date = yr+"-"+mn+"-"+dy;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd",
                                            Locale.ENGLISH);
try{
Date book_published = df.parse(book_date);
}catch(...){...}

它向我显示如下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'desc, published) VALUES('skd flakj','klsdjf askj','kl jasdklfj kl','kls djfklj f' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

请帮我看看这是什么问题。

desc 不是一个特别好的列名,因为它是 MySQL 中的保留字。我不确定这是否是这里唯一的问题,但您可能想尝试用刻度线包围 desc,如下所示:

String sql = "INSERT into books(`name`, `isbn`, `author`, `category`, `desc`, `published`) VALUES('"+name+"','"+isbn+"','"+author+"','"+category+"', '"+desc+"','"+book_published+"')";

无论如何这是一个很好的练习。

编辑:正如其他人所提到的,准备好的语句在将不受信任的输入保存到数据库时更安全。

由于使用了正常的查询语句,您的代码容易受到 SQL 注入攻击。要保护您的查询,请使用 preparedstatement。

根据您的查询问题,DESC 是保留字。因此,您不能将其用作列 name.View this 以获取完整的保留字列表。

desc是MySQL的保留字,意思是你可以直接使用。

要使用它而不从 MySQL 收到错误,您应该使用 ` 包围保留字。

Ps: 如果使用用户输入的参数,你的 SQL 语句可能会遭受 SQL 注入,攻击者可以使用它来控制你的 system.Maybe 你应该试着看看这个。

https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet