簡體   English   中英

從Java插入期間的MySQL日期列錯誤

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

請幫助我找出這里的問題。

由於使用普通的查詢語句,您的代碼容易受到SQL注入攻擊。 為了保護您的查詢,請使用preparestatement。

根據您的查詢問題,DESC是保留字。 因此,您不能將其用作列名。查看保留字的完整列表。

desc是MySQL的保留字,這意味着您可以簡單地使用它。

要使用它而不會從MySQL收到錯誤,則應在保留字周圍使用`。

附:如果使用用戶輸入的參數,則SQL語句可能會遭受SQL注入的攻擊,攻擊者可以使用它來控制您的系統。也許您應該嘗試對此進行一下研究。

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

desc不是一個特別好的列名,因為它是MySQL中的保留字。 我不確定這是否是這里的唯一問題,但您可能想嘗試用滴答聲包圍desc ,如下所示:

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

無論如何,這是個好習慣。

編輯:就像其他人提到的那樣,將不可信的輸入保存到數據庫時,准備好的語句更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM