java.sql.SQLSyntaxErrorException:ORA-00936:缺少表达式

时间:2013-11-21 19:54:03

标签: java sql oracle jdbc prepared-statement

我在Oracle中编写了一个简单的SQL查询,它插入了一些值。

但我得到SQLSyntaxErrorException声明“缺少表达式”错误。

我的查询:

String addManager = "INSERT INTO property_manager(EIN,NAME,HOME_PHONENUMBER,MOBILE_PHONENUMBER,EMAIL,PROPERTY_CIN)" +
       "VALUES (" + mein.getText() + ","  + mname.getText() +","+    mHome_phonenumber.getText() +","+ MMobile_phonenumber.getText()+"," + memail.getText() + ","+mproperty_cin.getText()+")";

2 个答案:

答案 0 :(得分:2)

最佳解决方案是使用java.sql.PreparedStatement

  • 它可以防止SQL注入
  • 转义字符串中的无效字符(例如')以及会破坏查询的字符
  • 处理null和空字符串
  • 使用Oracle的查询解析缓存(以获得更好的性能)
  • 更容易处理Date和Blob等类型

只需谷歌java PreparedStatemnt,您就会看到很多样本。

答案 1 :(得分:1)

您应该将您的值放在引号内。

String addManager = "INSERT INTO property_manager(EIN,NAME,HOME_PHONENUMBER,MOBILE_PHONENUMBER,EMAIL,PROPERTY_CIN)" +
   "VALUES ('" + mein.getText() + "','"  + mname.getText() +"','"+    mHome_phonenumber.getText() +"','"+ MMobile_phonenumber.getText()+"','" + memail.getText() + "','"+mproperty_cin.getText()+"')";

或者更好的是,使用参数。否则你冒着sql注入攻击的风险。