使用存储过程以Java输出数据

时间:2016-11-25 22:43:32

标签: java mysql stored-procedures

我一直坐着,谷歌搜索和搞乱我的代码一段时间,并没有报告任何错误。我无法弄清楚为什么只有一个输出值可以解决。

我的数据库中有一个“学生”表,其中包含列,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并擅长它,但是我仍然坚持不懈地处理那些微不足道的事情。

1 个答案:

答案 0 :(得分:0)

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

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

myCallStmt.setInt(1, student_num);

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

myCallStmt.registerOutParameter(1, Types.BIGINT);

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