【问题标题】: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 '98)' at line 1您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '98)' 附近使用正确的语法
【发布时间】:2016-01-23 07:30:12
【问题描述】:

我的 JDBC 代码是:

String name=req.getParameter("name");
String regno=req.getParameter("regno");
String m1=req.getParameter("m1");
String m2=req.getParameter("m2");
String m3=req.getParameter("m3");

Statement stmt=con.createStatement();
stmt.execute("create table students(sname varchar(20),regno varchar(10),mark1 int,mark2 int,mark3 int)");
stmt.execute("insert into students values('"+name+"','"+regno+"',"+m1+","+m2+","+","+m3+")");

执行上述代码后出现以下错误。

java.sql.SQLException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '98)' 附近使用正确的语法

这是怎么引起的,我该如何解决?

【问题讨论】:

    标签: java mysql jdbc


    【解决方案1】:

    您动态构建 INSERT 语句,并且在该语句中您拥有

    m2+","+","+m3
    

    所以如果m2==1m3==2 这会生成

    1,,2
    

    这使得 SQL 语法无效。您需要使用带有准备好的语句的参数化查询,如

    PreparedStatement ps = con.prepareStatement("insert into students values(?,?,?,?,?)");
    ps.setString(1,name);
    ps.setString(2,regno);
    ps.setInt(3,m1);
    ps.setInt(4,m1);
    ps.setInt(5,m3);
    int nupdate = ps.executeUpdate();
    

    目前m1m2m3的值在代码中是Strings,但在数据库中是int。您应该将它们的值转换为 int 以与 PreparedStatement 一起使用。

    【讨论】:

      【解决方案2】:

      你有一个额外的逗号","+","

      此错误与insert 语句一致。

       stmt.execute("insert into students values('"+name+"','"+regno+"',"+m1+","+m2+","+","+m3+")");
      

      假设您的值如下

       name = x
       regno = 2
       m1 = 33
       m2 = 45
       m3 = 48
      

      那么,你的程序创建的 SQL 插入语句(字符串连接)将是

       insert into students values('x','2',33,45,,48);
      

      以上说法有误,48前多了一个逗号

      删除插入语句行中多余的+"," 块,您就可以做到这一点。

      【讨论】:

        猜你喜欢
        • 2016-03-04
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多