Ошибка при вызове хранимой процедуры через JDBC: No value specified for parameter 1
Ну или я тупой , или что то не так.
Делал по этому гайду
Маленькая программка, да с хранимой процедурой, казалось бы, элементарная.
Код классов прилагается. Прошу помочь, так как у меня уже 2 раз такая беда с этим автором, код мой и его совпадает, но у меня, по классике, почему то не работает :D
MainClass:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Types;
import javax.imageio.ImageIO;
import java.sql.Driver;
public class mainClass {
public static void main(String[] args) {
System.out.println("Тест подключения к БД");
String userName="root";
String password="pass";
String connectionUrl = "jdbc:mysql://localhost:3306/test";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(connectionUrl,userName,password);
Statement statment = connection.createStatement();
System.out.println("Коннект");
statment.executeUpdate("drop table IF EXISTS Book;");
statment.executeUpdate("create table Book ( id int not null auto_increment,cnt int, name VARCHAR(100) not null, primary key (id));");
statment.executeUpdate("insert into Book(name)values('Kniga1');");
statment.executeUpdate("insert into Book(name)values('Kniga1');");
System.out.println("Добавили 2 книги");
CallableStatement callStat = connection.prepareCall("{call testPr(?)}");
System.out.println("Добавили вызов отложки");
callStat.registerOutParameter(1,Types.INTEGER);//тут ошибка,первый параметр
System.out.println("Рег аут параметра инт");
callStat.execute();
System.out.println("Екзекут успех");
System.out.println(callStat.getInt(1));
System.out.println("--------------------");
System.out.println("Успех!");
} catch (Exception d) {
System.out.println(d);
}
}
}
SQL файл,с запросом :
create procedure testPr(OUT cnt INT)
begin
select count(*) into cnt from Book;
end
Ответы (1 шт):
Автор решения: Serodv
→ Ссылка
Добавьте вот такой фрагмент кода:
System.out.println("Коннект");
// create stored procedure
statment.executeUpdate("drop procedure IF EXISTS testPr;");
statment.executeUpdate("create procedure testPr(OUT cnt INT) " +
"begin " +
" select count(*) into cnt from Book; " +
"end ;");
//
statment.executeUpdate("drop table IF EXISTS Book;");
Если заработает - то в базе сидела некорректная процедура.