String sql = "insert into sysuser (username, password, employee, sysmark) 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, sysmark) values (?, ?, ?, ?),也就是说,setString方法根本没有起作用。实在找不出问题的原因,请大家帮我分析一下。多谢!
7 个解决方案
#1
PreparedStatement表示预编译的 SQL 语句的对象。 SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。 而不是将值存在sql语句当中..
你使用System.out.println(sql);输出的结果当然是你上面定义的,和setSring无关
你SQL语句有误,最好手动拼接下
这样输出下,在数据库中测试,看下你的SQL语句问题
你使用System.out.println(sql);输出的结果当然是你上面定义的,和setSring无关
你SQL语句有误,最好手动拼接下
String sql = "insert into sysuser (username, password, employee, sysmark) values ('"+SysUser.getUserName()+"', '"+SysUser.getPassword()+"', '"+SysUser.getEmployee()+"', '"+SysUser.getSysMark()+"')";
这样输出下,在数据库中测试,看下你的SQL语句问题
#2
你如何确认setString方法没起作用呢?
打印出来的sql不会把参数加入进去。
你确认一下你连接的数据库是否有这个表。
然后把这段sql单独执行,调试好以后再copy过来。
把pstm.executeUpdate();方法换成:
pstm.execute();
打印出来的sql不会把参数加入进去。
你确认一下你连接的数据库是否有这个表。
然后把这段sql单独执行,调试好以后再copy过来。
把pstm.executeUpdate();方法换成:
pstm.execute();
#3
String sql = "insert into sysuser (username, password, employee, sysmark) 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
这个是你发帖的时候的笔误吧!!还是。。。。。。
#5
pstm.executeUpdate();这是好像是修改用的
#6
如果pstm没有问题的话。我认为你应该对照一下数据中的表,尤其是大小写部分,仔细对照一下字段,我曾经写存储过程的时候就对错了!这是小弟的一点愚见!
#7
先回答这个问题,才好继续……
#1
PreparedStatement表示预编译的 SQL 语句的对象。 SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。 而不是将值存在sql语句当中..
你使用System.out.println(sql);输出的结果当然是你上面定义的,和setSring无关
你SQL语句有误,最好手动拼接下
这样输出下,在数据库中测试,看下你的SQL语句问题
你使用System.out.println(sql);输出的结果当然是你上面定义的,和setSring无关
你SQL语句有误,最好手动拼接下
String sql = "insert into sysuser (username, password, employee, sysmark) values ('"+SysUser.getUserName()+"', '"+SysUser.getPassword()+"', '"+SysUser.getEmployee()+"', '"+SysUser.getSysMark()+"')";
这样输出下,在数据库中测试,看下你的SQL语句问题
#2
你如何确认setString方法没起作用呢?
打印出来的sql不会把参数加入进去。
你确认一下你连接的数据库是否有这个表。
然后把这段sql单独执行,调试好以后再copy过来。
把pstm.executeUpdate();方法换成:
pstm.execute();
打印出来的sql不会把参数加入进去。
你确认一下你连接的数据库是否有这个表。
然后把这段sql单独执行,调试好以后再copy过来。
把pstm.executeUpdate();方法换成:
pstm.execute();
#3
String sql = "insert into sysuser (username, password, employee, sysmark) 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
这个是你发帖的时候的笔误吧!!还是。。。。。。
#5
pstm.executeUpdate();这是好像是修改用的
#6
如果pstm没有问题的话。我认为你应该对照一下数据中的表,尤其是大小写部分,仔细对照一下字段,我曾经写存储过程的时候就对错了!这是小弟的一点愚见!
#7
先回答这个问题,才好继续……