永发信息网

java调用mysql存储过程执行后返回了参数正确但没有插入数据也没有报错?

答案:2  悬赏:0  手机版
解决时间 2021-02-15 05:02
  • 提问者网友:温旧梦泪无声
  • 2021-02-14 09:28
返回的参数是正确的,因该是执行了,但是数据没有存到数据库里,一直都是这样用的啊,没有发生过这样的问题啊!纠结中。。。。。
DROp PROCEDURE IF EXISTS regist;
create procedure regist(
in v_account varchar(20),
in v_password varchar(20),
in v_sex varchar(3),
in v_email varchar(20),
in v_QQ varchar(15),
out flag int
)
begin
select count(password) into flag from users where account=v_account;
if flag=0
then insert into users values(v_account,v_password,v_sex,v_email,v_QQ);
end if;
end;
java 代码
dbDao =DbDao.getinsance();
String sql = "{call registe(?,?,?,?,?,?)}";
CallableStatement cst= dbDao.getcst(sql);
try {
cst.setString(1, account);
cst.setString(2, password);
cst.setString(3, sex);
cst.setString(4, email);
cst.setString(5, QQ);
cst.registerOutParameter(6, Types.INTEGER);
cst.execute();
flag = cst.getInt(6);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
dbDao.close();
}
最佳答案
  • 五星知识达人网友:罪歌
  • 2021-02-14 10:40
if flag=0
then insert into users values(v_account,v_password,v_sex,v_email,v_QQ);
end if;

flag=0就执行插入操作,否则直接跳过,不执行 ,也是不会报错的
看一下你的数据库里面是不是有满足这个SQL语句的数据:select count(password) into flag from users where account=v_account;
如果有满足的话,就不会插入数据的
全部回答
  • 1楼网友:青尢
  • 2021-02-14 11:43
首先,把sql打印出来,然后在mysql客户端执行一下。应该就是拼写错误。 其次,建议用preparedstatement,通过设置参数的方式来执行sql,而不是将参数拼接到sql中。那样的话插入操作values(?,?,?,?)替代。然后设置参数setstring(1,username)方式。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯