gpt4 book ai didi

java - Java中使用存储过程输出数据

转载 作者:行者123 更新时间:2023-11-29 19:51:10 28 4
gpt4 key购买 nike

我已经坐下来谷歌搜索并弄乱我的代码有一段时间了,并且没有再报告任何错误。我不明白为什么我的输出值只有一个有效。

我的数据库中有一个“学生”表,其中包含列、snum、sname、专业、级别和年龄。

这是我创建的程序:

    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 学生姓名 VARCHAR(255)

OUT Student_major VARCHAR(255)

OUT Student_level VARCHAR(255)

OUT Student_age BIGINT(20)

我想做的是让用户输入学生 ID 号,然后一旦在数据库中找到学生 ID 匹配,我就会获取该学生的其余信息。

    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学生姓名: 无学生专业: 无学生级别:空学生年龄:0

ID 由用户设置,因此这很容易。我什至不需要从数据库中提取它,但其他 4 个值是我无法提取的。

如果有人能帮助我,我将不胜感激。我想自学 SQL 并熟练掌握它,但我仍然卡在这些琐碎的事情上。

最佳答案

我认为原因是你的参数索引有点困惑。看:

参数 1 应作为输入参数输入:

myCallStmt.setInt(1, student_num);

所以,它不应该被注册为输出参数:对我来说,应该删除这一行:

myCallStmt.registerOutParameter(1, Types.BIGINT);

(此外,参数student_num应在s.p.中声明为IN)

关于java - Java中使用存储过程输出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40813076/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com