2016-11-25 2 views
0

Я сижу и прихожу к ошибкам с помощью кода и некоторое время не сообщаю об ошибках. Я не могу понять, почему работает только одно из моих выходных значений.Использование хранимой процедуры для вывода данных в Java

У меня в моей базе данных «студент» с колонками, снумом, змеей, майором, уровнем и возрастом.

Вот моя процедура я создал:

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)

То, что я пытаюсь сделать с этим пользователь ввел студент идентификационный номер, то я получить остальную часть информации, которая студента, как только я найти соответствие Student 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(); 
    } 
} 

Выход: Student ID: 51135593 Имя студента: нулевой Студент Major: нулевой Студент Уровень: нулевой Student Возраст: 0

Идентификатор устанавливается пользователем, так это было легко. Мне даже не нужно извлекать его из базы данных, но другие 4 значения - это то, что я не могу получить.

Если кто-то может мне помочь, это было бы высоко оценено. Я хочу научить себя SQL и хорошо разбираться в этом, но тривиальный материал, который я застрял на месте.

ответ

0

Я думаю, что причина немного беспорядка с индексами ваших параметров. Смотри:

Параметр 1 должен быть введен в качестве входного параметра:

myCallStmt.setInt(1, student_num); 

Таким образом, он не должен быть зарегистрирован в качестве выходного параметра: Для меня, эта линия должна быть удалена:

myCallStmt.registerOutParameter(1, Types.BIGINT); 

(Более того, параметр student_num должен быть объявлен как IN в sp)

+0

Когда я запускаю хранимую процедуру после выполнения этой настройки, каждое значение возвращает значение null. – WegnerLJ26

Смежные вопросы