【问题标题】:Throwing MySQLSyntaxErrorException regarding syntax of SQL in Struts抛出有关 Struts 中 SQL 语法的 MySQLSyntaxErrorException
【发布时间】:2014-07-27 05:06:32
【问题描述】:

我正在 Struts 框架上做一个项目。

我在使用 SQL 向表中插入数据时收到来自服务器的异常,我无法找到解决方案。

错误如下:

javax.servlet.ServletException: 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 ',,,,,,,'yes','yes',,,,'admin')' at line 1

产生错误的代码如下:

    sql="Insert into field_visit_details (visit_date,block,village,flw_category,
   flw_name,flw_contact_no,aware_zinc,
aware_ors,past_zinc,past_ors,qty_avail_zinc_ten,qty_avail_zinc_twe,qty_avail_zinc_syr,
qty_avail_ors,qty_disp_zinc_ten,qty_disp_zinc_twe,qty_disp_zinc_syr,qty_disp_ors,
stockout_zinc,stockout_ors,diar_cases_seen,diar_cases_reff,diar_deaths_less_than_five,
added_by)
 values 
('"+field_visit_date+"','"+block_row_one+"','"+village_row_one+"','"+flw_category_row_one
+"','"+flw_name_row_one+"','"+flw_contact_no_row_one+"','"+aware_zinc_row_one+"','"+
aware_ors_row_one+"','"+past_zinc_row_one+"','"+past_ors_row_one+"','"+
qty_avail_zinc_ten_row_one+"','"+qty_avail_zinc_twe_row_one+"','"+
qty_avail_zinc_syr_row_one+"','"+qty_avail_ors_row_one+"','"+qty_disp_zinc_ten_row_one
+"','"+qty_disp_zinc_twe_row_one+"','"+qty_disp_zinc_syr_row_one+"','"+
qty_disp_ors_row_one+"','"+stockout_zinc_row_one+"','"+stockout_ors_row_one+
"','"+diar_cases_seen_row_one+"','"+diar_cases_reff_row_one+"','"+diar_deaths_row_one
+"','"+loginid+"')";
            System.out.println(sql);
            int x=stmt.executeUpdate(sql);
            if(x>0)
                SUCCESS="admin";

表结构如下:

 CREATE TABLE IF NOT EXISTS `field_visit_details` ( 
`field_visit_id` int(11) NOT NULL auto_increment,   
`visit_date` date NOT NULL,   
`block` varchar(100) NOT NULL,   
`village` varchar(100) NOT NULL,   
`flw_category` varchar(45) NOT NULL,   
`flw_name` varchar(100) NOT NULL,   
`flw_contact_no` varchar(13) NOT NULL,   
`aware_zinc` varchar(10) NOT NULL,   
`aware_ors` varchar(10) NOT NULL,   
`past_zinc` varchar(10) NOT NULL,   
`past_ors` varchar(10) NOT NULL,   
`qty_avail_zinc_ten` int(11) NOT NULL,   
`qty_avail_zinc_twe` int(11) NOT NULL,   
`qty_avail_zinc_syr` int(11) NOT NULL,   
`qty_avail_ors` int(11) NOT NULL,  
`qty_disp_zinc_ten` int(11) NOT NULL,   
`qty_disp_zinc_twe` int(11) NOT NULL,   
`qty_disp_zinc_syr` int(11) NOT NULL,   
`qty_disp_ors` int(11) NOT NULL,   
`stockout_zinc` varchar(11) NOT NULL,   
`stockout_ors` varchar(11) NOT NULL,   
`diar_cases_seen` int(11) NOT NULL,   
`diar_cases_reff` int(11) NOT NULL,   
`diar_deaths_less_than_five` int(11) NOT NULL,   
`added_by` varchar(100) NOT NULL,   
PRIMARY KEY  (`field_visit_id`)   ) 
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

我在控制台打印时的查询是:

     Insert into field_visit_details (visit_date,block,village,flw_category,flw_name,
flw_contact_no,aware_zinc,aware_ors,past_zinc,past_ors,qty_avail_zinc_ten,
qty_avail_zinc_twe,qty_avail_zinc_syr,qty_avail_ors,
    qty_disp_zinc_ten,qty_disp_zinc_twe,qty_disp_zinc_syr,qty_disp_ors,stockout_zinc,
    stockout_ors,diar_cases_seen,diar_cases_reff,diar_deaths_less_than_five,added_by)
     values
     ('2014-07-02','ASDASD','','asha','asd+','99','yes','yes','yes','yes',
    '12','12','12','12','12','12','12','12','yes','yes','12','12','12','admin')

但问题是查询在表中成功插入数据,但服务器仍然显示上述错误。

我什至直接在 phpmyadmin 中使用了上面打印的查询,并且运行良好,没有任何问题。

【问题讨论】:

  • 我猜这些变量中的某个地方有一个' 字符。你是否正确地转义了你的输入?
  • 您有很多空变量导致,,,, 和您的变量loginid 为空,但added_by 列不能为空。
  • @MikeW 查看我打印的查询,我想' 的值中没有变量。
  • @Tom 是的,即使我这么认为,但是当我打印查询时,它会显示不同的图片。没有变量是空的..
  • 首先你应该在这里给出stackoverflow.com/questions/24978541/…中给出的格式化代码。

标签: mysql sql jdbc struts


【解决方案1】:

您的 SQL 语句中有语法异常。您发布的错误消息指向它。

因此,您需要更改 SQL 语句并修复语法错误。为此,您应该重写它以使用PraparedStatement,就像示例JDBC PreparedStatement example – Insert a record 中一样。

在为prepared statement设置参数时,使用适合数据库列类型的set方法。

【讨论】:

  • 感谢您的尝试......但我发现了错误......实际上我在上面的代码之后有更多的插入查询,这造成了问题......跨度>
  • 您修复了错误吗?点击链接并学习如何编写查询。
猜你喜欢
  • 2017-02-10
  • 2015-09-08
  • 2012-08-12
  • 2023-03-07
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多