新建存过:
由于考虑到想要在Java调用时返回结果,CallableStatement.excute方法返回的布尔数据是这样的:
如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false(这个是别处看来的。)
所以在存过内进行判断是否执行成功,并返回一个标志:1 成功 0 失败;
CREATE PROCEDURE test2 (
IN sid BIGINT,
IN sname VARCHAR (100),
OUT result INT
)
BEGIN
INSERT INTO student (
ID,
NAME,
PASSWORD,
CLASS_ID,
MAJOR_ID,
SEX
)
VALUES
(
sid + 1,
sname,
'22222',
'321',
'123',
'女'
);
IF row_count() < 1 THEN
SET result = 0;
ROLLBACK;
ELSE
SET result = 1;
COMMIT;
END IF;
END;
Java中调用该存过:
Connection conn = null;
CallableStatement cs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager
.getConnection("jdbc:mysql://localhost:3306/test?user=testdb1&password=123123&noAccessToProcedureBodies=true");
cs = conn.prepareCall("call test2(?,?,?)");
cs.setLong(1, 20131844303L);
cs.setString(2, "啊哈");
cs.registerOutParameter(3, Types.INTEGER);
//如果第一个结果是 ResultSet 对象,则返回 true;
//如果第一个结果是更新计数或者没有结果,则返回 false
//由于这里无法直接返回执行是否成功,存过里面给返回一个结果,1:成功;0:失败
System.out.println(cs.execute());//这里就算执行成功了,返回的也是false
System.out.println(cs.getInt(3));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}