小弟不才,遇到一个奇怪的问题,代码如下:
String sql = "insert into sysuser (username, password, employee, sys) values (?, ?, ?, ?)";
Connection con = JavaDB.getConnection(); //我自己写了一个辅助类,使用连接池中的链接
PreparedStatement pstm = pstm = con.prepareStatement(sql);
pstm.setString(1, SysUser.getUserName());
pstm.setString(2, SysUser.getPassword());
pstm.setString(3, SysUser.getEmployee());
pstm.setString(4, SysUser.getSysMark());
System.out.println(sql);
pstm.executeUpdate();
执行上述代码的时候抛出异常,大体的意思是执行的SQL语句语法有误,我调用System.out.println(sql);这条语句后发现,执行的SQL语句为insert into sysuser (username, password, employee, sys) values (?, ?, ?, ?),也就是说,setString方法根本没有起作用。实在找不出问题的原因,请大家帮我分析一下。多谢!

解决方案 »

  1.   

    PreparedStatement表示预编译的 SQL 语句的对象。 SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。 而不是将值存在sql语句当中.. 
    你使用System.out.println(sql);输出的结果当然是你上面定义的,和setSring无关你SQL语句有误,最好手动拼接下
    String sql = "insert into sysuser (username, password, employee, sys) values ('"+SysUser.getUserName()+"', '"+SysUser.getPassword()+"', '"+SysUser.getEmployee()+"', '"+SysUser.getSysMark()+"')";这样输出下,在数据库中测试,看下你的SQL语句问题
      

  2.   

    你如何确认setString方法没起作用呢?
    打印出来的sql不会把参数加入进去。
    你确认一下你连接的数据库是否有这个表。
    然后把这段sql单独执行,调试好以后再copy过来。
    把pstm.executeUpdate();方法换成:
    pstm.execute();
      

  3.   


    String sql = "insert into sysuser (username, password, employee, sys) values (?, ?, ?, ?)";
    Connection con = JavaDB.getConnection(); 
    PreparedStatement pstm = con.prepareStatement(sql);
    pstm.setString(1, SysUser.getUserName());
    pstm.setString(2, SysUser.getPassword());
    pstm.setString(3, SysUser.getEmployee());
    pstm.setString(4, SysUser.getSysMark());
    pstm.executeUpdate();在我机子上运行没问题的,如果还是不行你就用一楼拼接的方式,我以前也遇到过这种情况,我也用拼接的方式解决的。
    还有就是String sql 定义一个Sting变量后,常量的值是不会因为setSting的方式而改变的。
      

  4.   

    pstm.executeUpdate();这是好像是修改用的 
      

  5.   

    如果pstm没有问题的话。我认为你应该对照一下数据中的表,尤其是大小写部分,仔细对照一下字段,我曾经写存储过程的时候就对错了!这是小弟的一点愚见!