JDBCのPreparedStatementとは何ですか?
プリペアドステートメント interfaceは、Statementインターフェイスを拡張し、複数回実行できるプリコンパイルされたSQLステートメントを表します。これはパラメータ化されたSQLクエリを受け入れ、このクエリに0個以上のパラメータを渡すことができます。
最初、このステートメントはプレースホルダーを使用します「?」 パラメータの代わりに、後で PreparedStatement のsetXXX()メソッドを使用してこれらに動的に引数を渡すことができます。 インターフェイス。
プリペアドステートメントの作成
PreparedStatementのオブジェクトを作成できます (インターフェース) prepareStatement()を使用する 接続インターフェースのメソッド。このメソッドは(パラメーター化された)クエリを受け入れ、PreparedStatementオブジェクトを返します。
このメソッドを呼び出すと、Connectionオブジェクトは指定されたクエリをデータベースに送信して、コンパイルして保存します。クエリが正常にコンパイルされた場合、それだけがオブジェクトを返します。
クエリをコンパイルするために、データベースは値を必要としないため、(ゼロ以上の)プレースホルダーを使用できます。 (疑問符”?” )クエリの値の代わりに。
たとえば、従業員という名前のテーブルがある場合 次のクエリを使用して作成されたデータベース内。
CREATE TABLE Employee(Name VARCHAR(255), Salary INT NOT NULL, Location VARCHAR(255));
次に、以下に示すように、プリペアドステートメントを使用して値を挿入する必要があります。
//Creating a Prepared Statement String query="INSERT INTO Employee(Name, Salary, Location)VALUES(?, ?, ?)"; Statement pstmt = con.prepareStatement(query);
プレースホルダーへの値の設定
プリペアドステートメント インターフェイスは、setInt()、setFloat()、setArray()、setDate()、setDouble()などのいくつかのセッターメソッドを提供して、プリペアドステートメントのプレースホルダーに値を設定します。
これらのメソッドは2つの引数を受け入れます。1つはプレースフォルダの配置インデックスを表す整数値で、もう1つはその特定の位置に挿入する必要のある値を表すintまたは、Stringまたはfloatなどです。
以下に示すように、setterメソッドを使用して、上記で作成したステートメントのプレースホルダーに値を設定できます。
pstmt.setString(1, "Amit"); pstmt.setInt(2, 3000); pstmt.setString(3, "Hyderabad"); pstmt.setString(1, "Kalyan"); pstmt.setInt(2, 4000); pstmt.setString(3, "Vishakhapatnam"); pstmt.setString(1, "Renuka"); pstmt.setInt(2, 5000); pstmt.setString(3, "Delhi"); pstmt.setString(1, "Archana"); pstmt.setInt(2, 15000); pstmt.setString(3, "Mumbai");
プリペアドステートメントの実行
PreparedStatementオブジェクトを作成したら、 execute()のいずれかを使用して実行できます。 PreparedStatementインターフェースのメソッド、つまり execute() 、 executeUpdate() そして、executeQuery()。
-
execute(): このメソッドは、現在のプリペアドステートメントオブジェクトで通常の静的SQLステートメントを実行し、ブール値を返します。
-
executeQuery(): このメソッドは、現在準備されているステートメントを実行し、ResultSetオブジェクトを返します。
-
executeUpdate(): このメソッドは、現在のPreparedステートメントでinsertupdateやdeleteなどのSQLDMLステートメントを実行します。影響を受ける行数を表す整数値を返します。
以下に示すように、上記で作成したプリペアドステートメントを実行できます。
例
この例では、プリペアドステートメントを使用してEmployeesという名前のテーブルに値を挿入しようとしています。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class PreparedStatementExample { 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......"); //Creating a Prepared Statement String query = "INSERT INTO Employees(Name, Salary, Location) VALUES (?, ?, ?)"; PreparedStatement pstmt = con.prepareStatement(query); pstmt.setString(1, "Amit"); pstmt.setInt(2, 3000); pstmt.setString(3, "Hyderabad"); pstmt.setString(1, "Kalyan"); pstmt.setInt(2, 4000); pstmt.setString(3, "Vishakhapatnam"); pstmt.setString(1, "Renuka"); pstmt.setInt(2, 5000); pstmt.setString(3, "Delhi"); pstmt.setString(1, "Archana"); pstmt.setInt(2, 15000); pstmt.setString(3, "Mumbai"); int num = pstmt.executeUpdate(); System.out.println("Rows inserted ...."); } }
出力
Connection established...... Number of rows inserted: 1
データベースを確認すると、テーブルに挿入された値を次のように確認できます。
+---------+--------+----------------+ | Name | Salary | Location | +---------+--------+----------------+ | Amit | 30000 | Hyderabad | | Kalyan | 40000 | Vishakhapatnam | | Renuka | 50000 | Delhi | | Archana | 15000 | Mumbai | +---------+--------+----------------+ 5 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); ここ
-
C#の最後のステートメントは何ですか?
最後のブロックは、例外がスローされるかどうかに関係なく、特定のステートメントのセットを実行するために使用されます。たとえば、ファイルを開く場合、例外が発生したかどうかに関係なく、ファイルを閉じる必要があります。 エラー処理ブロックは、try、catch、finallyキーワードを使用して実装されます。 例 次のコードを実行して、finallyステートメントを実装してみてください- using System; namespace ErrorHandlingApplication { class DivNumbers { i