JDBCのCallableStatementとは何ですか?
CallableStatement インターフェイスは、ストアドプロシージャを実行するためのメソッドを提供します。 JDBC APIはストアドプロシージャのSQLエスケープ構文を提供するため、すべてのRDBMSのストアドプロシージャを単一の標準的な方法で呼び出すことができます。
CallableStatementの作成
CallableStatementのオブジェクトを作成できます (インターフェース) prepareCall()を使用する 接続の方法 インターフェース。このメソッドは、ストアドプロシージャを呼び出すクエリを表す文字列変数を受け入れ、 CallableStatementを返します。 オブジェクト。
Callableステートメントには、入力パラメーター、出力パラメーター、またはその両方を含めることができます。入力パラメーターをプロシージャー呼び出しに渡すには、プレースホルダーを使用し、CallableStatementインターフェースによって提供されるsetterメソッド(setInt()、setString()、setFloat())を使用してこれらに値を設定できます。
データベースにmyProcedureという名前のプロシージャがあり、次のように呼び出し可能なステートメントを準備できるとします。
//Preparing a CallableStatement CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
入力パラメータへの値の設定
セッターメソッドを使用して、プロシージャ呼び出しの入力パラメータに値を設定できます。
これらは2つの引数を受け入れます。1つは入力パラメータの配置インデックスを表す整数値で、もう1つはintまたは、Stringまたはfloatなどです。入力パラメータとしてプロシージャに渡す必要のある値を表します。
注: インデックスの代わりに、パラメータの名前を文字列形式で渡すこともできます。
cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad");
呼び出し可能ステートメントの実行
CallableStatementオブジェクトを作成したら、 execute()のいずれかを使用して実行できます。 メソッド。
cstmt.execute();
例
従業員という名前のテーブルがあるとします。 次のデータを含むMySQLデータベース内:
+---------+--------+----------------+ | Name | Salary | Location | +---------+--------+----------------+ | Amit | 30000 | Hyderabad | | Kalyan | 40000 | Vishakhapatnam | | Renuka | 50000 | Delhi | | Archana | 15000 | Mumbai | +---------+--------+----------------+
そして、以下に示すように、このテーブルに値を挿入するmyProcedureという名前のプロシージャを作成しました。
Create procedure myProcedure (IN name VARCHAR(30), IN sal INT, IN loc VARCHAR(45)) -> BEGIN -> INSERT INTO Employee(Name, Salary, Location) VALUES (name, sal, loc); -> END //
以下は、呼び出し可能なステートメントを使用して、上記で作成したプロシージャを呼び出すことにより、Employeeテーブルに新しいレコードを挿入するJDBCの例です。
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class CallableStatementExample { public static void main(String args[]) throws SQLException { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/testdb"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Preparing a CallableStateement CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}"); cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad"); cstmt.setString(1, "Kalyan"); cstmt.setInt(2, 4000); cstmt.setString(3, "Vishakhapatnam"); cstmt.setString(1, "Rukmini"); cstmt.setInt(2, 5000); cstmt.setString(3, "Delhi"); cstmt.setString(1, "Archana"); cstmt.setInt(2, 15000); cstmt.setString(3, "Mumbai"); cstmt.execute(); System.out.println("Rows inserted ...."); } }
出力
Connection established...... Rows inserted ....
selectクエリを使用してEmployeeテーブルの内容を取得すると、以下に示すように、新しく追加されたレコードを確認できます。
mysql> select * from employee; +---------+--------+----------------+ | Name | Salary | Location | +---------+--------+----------------+ | Amit | 30000 | Hyderabad | | Kalyan | 40000 | Vishakhapatnam | | Renuka | 50000 | Delhi | | Archana | 15000 | Mumbai | | Raghav | 3000 | Hyderabad | | Raghav | 3000 | Hyderabad | | Kalyan | 4000 | Vishakhapatnam | | Rukmini | 5000 | Delhi | | Archana | 15000 | Mumbai | +---------+--------+----------------+ 9 rows in set (0.00 sec)>
-
MySQL JDBCドライバー接続文字列とは何ですか?
MySQLJDBC接続文字列は次のようになります- Class.forName(com.mysql.jdbc.Driver); 上記では、ドライバーはインターフェースです。 JDBCがアプリケーションサーバーの外部で実行されている場合は常に、クラスDriverManagerが接続を確立します。 DriverManagerクラスは次のとおりです- conn = (Connection) DriverManager.getConnection(jdbc:mysql://localhost/yourdatabaseName,”yourRootName,yourPassword); ここ
-
JDBCの結果とは何ですか? ResultSetオブジェクトからデータを取得する方法は?
ResultSet JDBCのインターフェースは、SQLクエリによって生成された表形式のデータを表します。現在の行を指すカーソルがあります。最初、このカーソルは最初の行の前に置かれます。 結果セット全体でポインタを移動する next() ResultSetインターフェースのメソッド 現在の(ResultSet)オブジェクトのポインタを現在の位置から次の行に移動します。このメソッドはブール値を返します。現在の位置の横に行がない場合はfalseを返し、そうでない場合はtrueを返します。したがって、whileループでこのメソッドを使用すると、結果セットの内容を繰り返すことができます。