java 存储过程 设置参数名_JDBC 中利用存储过程插入数据怎么参数传不进来?(有没有人会的,帮帮忙,困扰了好几天了。谢谢!...

在Java中使用JDBC调用存储过程时遇到参数传递问题,错误提示为:Incorrect number of arguments for PROCEDURE...。代码尝试创建并执行存储过程,但在设置参数时出现了错误。解决方案可能涉及检查存储过程的参数数量和类型是否与调用时一致。

已结贴√

问题点数:20 回复次数:11

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

JDBC 中利用存储过程插入数据怎么参数传不进来?(有没有人会的,帮帮忙,困扰了好几天了。谢谢!

public static void main(String[] args){

ReplyEmp emp=new ReplyEmp();

emp.setInviationid(1);

emp.setFloor(1);

emp.setNickname("张三");

emp.setTonickname("李四");

emp.setTime(null);

emp.setDate(null);

emp.setContent("说得好!");

emp.setTohost(true);

ReplyDaoImpl impl=new ReplyDaoImpl(dbc.getConnection());

try {

System.out.println(impl.doCreateReply(emp));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

public Boolean doCreateReply(ReplyEmp reply) throws Exception {

String sql= "DROP PROCEDURE IF EXISTS reply_insert;"+     //存在储存过程就删除

"DELIMITER $$ "+    //重置自定义的sql语句结束标记

"CREATE PROCEDURE reply_insert(IN r_inviationid int," +

"IN r_floor int,IN r_nickname varchar(45),IN r_tonickname varchar(45)," +

"IN r_time time,IN r_date date,IN r_content varchar(45),IN r_tohost tinyint(4)) "+

"BEGIN "+

"INSERT INTO reply (`inviationid`,`floor`,`nickname`,`tonickname`,`time`," +

"`date`,`content`,`tohost`) " +

"VALUES (r_inviationid,r_floor,r_nickname,r_tonickname," +

"r_time,r_date,r_content,r_tohost);"+

"END $$ "+

"DELIMITER ;";    //设置回默认的sql语句结束标记

this.cstmt=this.conn.prepareCall("{call reply_insert(?,?,?,?,?,?,?,?)}");

this.cstmt=this.conn.prepareCall("{call reply_insert()}");

this.cstmt.setInt(1, reply.getInviationid());

this.cstmt.setInt(2, reply.getFloor());

this.cstmt.setString(3, reply.getNickname());

this.cstmt.setString(4, reply.getTonickname());

this.cstmt.setTime(5, reply.getTime());

this.cstmt.setDate(6, reply.getDate());

this.cstmt.setString(7, reply.getContent());

this.cstmt.setBoolean(8, reply.getTohost());    //1表示true,0表示false

if(this.cstmt.executeUpdate()>0){

return true;   //插入成功

}

return false;   //插入失败

}

报这样的错误:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Incorrect number of arguments for PROCEDURE forum.reply_insert; expected 0, got 8

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:408)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

at com.mysql.jdbc.Util.getInstance(Util.java:386)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)

at com.mysql.jdbc.CallableStatement.executeUpdate(CallableStatement.java:984)

at com.forum.dao.impl.ReplyDaoImpl.doCreateReply(ReplyDaoImpl.java:89)

at com.forum.dao.impl.ReplyDaoImpl.main(ReplyDaoImpl.java:36)

搜索更多相关主题的帖子:

public null

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值