使用ps.setString()无效的问题,向插入一条记录

WJL_MGQS 2012-09-23 09:57:17
public boolean createTestPaper(TestPaper testPaper) {
//SQLUtil sqlUtil = new SQLUtil();
boolean showMessage = false;
String tId = testPaper.getTeacher().getUserId();
String id = testPaper.getId();
String sql = "insert into t_papers(teacher_id,id,name) values('"+tId+"','"+id+"',?)";
//sqlUtil.dealSQLPrint(sql);
Connection conn = null;
PreparedStatement ps = null;
conn = DBUtils.getConnection();
try {
boolean isCommited = conn.getAutoCommit();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
ps.setString(1, "name");

//执行到下面这句的时候报错(上面的数据都没有问题):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 '?)' at line 1

int rs = ps.executeUpdate(sql);
if (rs == 1) {
showMessage = true;
conn.commit();
} else {
conn.rollback();
}
conn.setAutoCommit(isCommited);
} catch (SQLException e) {
System.out.println("errorSql:"+ps.toString());
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
System.out.println("回滚事务失败!");
}
e.printStackTrace();
} finally {
DBUtils.closeConnection(conn, ps, null);
}
return showMessage;
}


我尝试着输出ps.toString();这样得到了设置参数之后的sql语句 ,把这条语句直接复制到mysql中能够插入,但是在程序中就报错
...全文
520 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
WJL_MGQS 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
我知道了你这个写的有问题啊int rs = ps.executeUpdate(sql);
你直接用int rs = ps.executeUpdate()你穿进去的sql当然里面有个问号了,所以会报错,
[/Quote]
我的个神啊,自己老是复制改,把开始的statement改的时候忘了删掉sql这个参数,谢谢你了哈!
吉他猪 2012-09-23
  • 打赏
  • 举报
回复
我知道了你这个写的有问题啊int rs = ps.executeUpdate(sql);
你直接用int rs = ps.executeUpdate()你穿进去的sql当然里面有个问号了,所以会报错,
WJL_MGQS 2012-09-23
  • 打赏
  • 举报
回复
下面是我修剪了下的方法,还是一样错。
public boolean createTestPaper(TestPaper testPaper) {
boolean showMessage = false;
String sql = "insert into t_papers(teacher_id,id,category) values(?,?,?);";
Connection conn = null;
PreparedStatement ps = null;
try {
conn = DBUtils.getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1,testPaper.getTeacher().getUserId());
ps.setString(2,testPaper.getId());
ps.setString(3,"1");
int rs = ps.executeUpdate(sql);
if (rs == 1) {
showMessage = true;
}
} catch (SQLException e) {
System.out.println("errorSql:"+ps.toString());
e.printStackTrace();
} finally {
DBUtils.closeConnection(conn, ps, null);
}
return showMessage;
}
WJL_MGQS 2012-09-23
  • 打赏
  • 举报
回复
我全部用占位符执行后还是这个错,但是ps.toString()能把我想要的sql语句输出来,并且这个语句在mysql中可以执行
吉他猪 2012-09-23
  • 打赏
  • 举报
回复
你测试的话你全部用占位符然后再赋值看看,看sql语法没有问题啊,
吉他猪 2012-09-23
  • 打赏
  • 举报
回复
好久没用jdbc去做CRUD操作了,可能是PreparedStatement 在给字段赋值的时候不允许拼字符串和占位符混用吧,我只是猜的,再说了你这个完全没必要混用啊,那么就拼字符串要么全部占位符,
WJL_MGQS 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
楼主你的代码有点怪啊,你既然后面用到占位符?为什么前面2个id要去拼字符串了,你全部用占位符看看
[/Quote]
我用的代码里是全部是?的,这里是为了测试才弄成这样的,因为没有?的时候是可以直接插入的
吉他猪 2012-09-23
  • 打赏
  • 举报
回复
楼主你的代码有点怪啊,你既然后面用到占位符?为什么前面2个id要去拼字符串了,你全部用占位符看看
WJL_MGQS 2012-09-23
  • 打赏
  • 举报
回复
还有:如果我去掉name字段后,也就是不用ps.setString了之后有能插入。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧