我一直坐着,谷歌搜索和搞乱我的代码一段时间,并没有报告任何错误。我无法弄清楚为什么只有一个输出值可以解决。
我的数据库中有一个“学生”表,其中包含列,snum,sname,major,level和age。
这是我创建的程序:
SELECT student_name = sname,
student_major = major,
student_level = level, student_age = age
FROM student
WHERE snum = student_num
我的参数是:
INOUT student_num BIGINT(20)
OUT student_name VARCHAR(255)
OUT student_major VARCHAR(255)
OUT student_level VARCHAR(255)
OUT student_age BIGINT(20)
我想要做的就是让用户输入学生证号码,然后我会在数据库中找到学生证书匹配后得到该学生的其余信息。
public void procedureGetStudentInfo(String spName) {
try {
statement = connection.createStatement();
//Creating variables to store the output of the procedure
int id = 0;
String student_name = "";
String student_major = "";
String student_level = "";
int student_age = 0;
CallableStatement myCallStmt = connection.prepareCall("{call "+spName+"(?,?,?,?,?)}");
myCallStmt.setInt(1, student_num);
myCallStmt.registerOutParameter(1, Types.BIGINT);
myCallStmt.registerOutParameter(2, Types.VARCHAR);
myCallStmt.registerOutParameter(3, Types.VARCHAR);
myCallStmt.registerOutParameter(4, Types.VARCHAR);
myCallStmt.registerOutParameter(5, Types.BIGINT);
myCallStmt.execute();
//Grabbing information from query
id = myCallStmt.getInt(1);
student_name = myCallStmt.getString(2);
student_major = myCallStmt.getString(3);
student_level = myCallStmt.getString(4);
student_age = myCallStmt.getInt(5);
//Outputting information to user
System.out.println("Student ID: " + id);
System.out.println("Student Name: " + student_name);
System.out.println("Student Major: " + student_major);
System.out.println("Student Level: " + student_level);
System.out.println("Student Age: " + student_age);
}
catch (SQLException e) {
e.printStackTrace();
}
}
输出是: 学生证:51135593 学生姓名:null 学生专业:null 学生等级:null 学生年龄:0
ID由用户设置,因此很容易。我甚至不需要从数据库中提取它,但其他4个值是我无法得到的。
如果有人能帮助我,那将非常感激。我想教自己SQL并擅长它,但是我仍然坚持不懈地处理那些微不足道的事情。
答案 0 :(得分:0)
我认为原因是你的参数索引有点乱。看:
参数1应作为输入参数输入:
myCallStmt.setInt(1, student_num);
所以,它不应该被注册为输出参数:对我来说,这行应该删除:
myCallStmt.registerOutParameter(1, Types.BIGINT);
(此外,参数student_num
应在s.p中声明为IN。)