ストアドプロシージャをJavaから呼び出す例を2つご紹介します。
演習で実施した例
package p08;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class SelectStoredProcedure {
public static final String CONNECT_STRING = "jdbc:mysql://localhost:3306/sip_a?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B9&rewriteBatchedStatements=true";
public static final String USERID = "newuser";
public static final String PASSWORD = "0";
public static final String SQL = "call sip_a.get_cars_custmers(?)";
public static Connection con = null;
public static PreparedStatement ps = null;
public static ResultSet rs = null;
public static void main(String[] args) {
try {
con = DriverManager.getConnection(CONNECT_STRING, USERID, PASSWORD);
System.out.println("データベースへの接続に成功しました。");
System.out.println("車の名前を指定してください");
Scanner sc = new Scanner(System.in);
String carsName = sc.nextLine();
sc.close();
ps = con.prepareStatement(SQL);
ps.setString(1, carsName);
System.out.println(SQL);
rs = ps.executeQuery();
while (rs.next()) {
System.out.print(rs.getString("customers.name") + ":");
System.out.print(rs.getString("cars.name") + ":");
System.out.print(rs.getString("price") + ":");
System.out.print(rs.getString("saled_at"));
System.out.println();
}
} catch (SQLException e) {
System.err.println("データベースへの接続時に問題が発生しました。");
} finally {
try {
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
System.out.println("データベースからの切断に成功しました。");
} catch (SQLException e) {
System.err.println("データベースからの切断時に問題が発生しました。");
}
}
}
}
一般的な呼び出し例
import java.sql.*;
public class StoredProcedureExample {
public static void main(String[] args) {
// データベース接続情報
String url = "jdbc:mysql://localhost:3306/database_name";
String username = "your_username";
String password = "your_password";
// ストアドプロシージャの名前
String procedureName = "procedure_name";
try (Connection connection = DriverManager.getConnection(url, username, password)) {
// ストアドプロシージャを呼び出すための準備
String callProcedure = "{ call " + procedureName + "() }";
CallableStatement statement = connection.prepareCall(callProcedure);
// ストアドプロシージャの実行
statement.execute();
// 結果の取得
// (ストアドプロシージャが結果を返す場合、ここで結果を処理する)
// ステートメントと接続のクローズ
statement.close();
connection.close();
System.out.println("ストアドプロシージャの実行が完了しました。");
} catch (SQLException e) {
e.printStackTrace();
}
}
}