MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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)
>
  1. MySQL JDBCドライバー接続文字列とは何ですか?

    MySQLJDBC接続文字列は次のようになります- Class.forName(com.mysql.jdbc.Driver); 上記では、ドライバーはインターフェースです。 JDBCがアプリケーションサーバーの外部で実行されている場合は常に、クラスDriverManagerが接続を確立します。 DriverManagerクラスは次のとおりです- conn = (Connection) DriverManager.getConnection(jdbc:mysql://localhost/yourdatabaseName,”yourRootName,yourPassword); ここ

  2. C#の最後のステートメントは何ですか?

    最後のブロックは、例外がスローされるかどうかに関係なく、特定のステートメントのセットを実行するために使用されます。たとえば、ファイルを開く場合、例外が発生したかどうかに関係なく、ファイルを閉じる必要があります。 エラー処理ブロックは、try、catch、finallyキーワードを使用して実装されます。 例 次のコードを実行して、finallyステートメントを実装してみてください- using System; namespace ErrorHandlingApplication {    class DivNumbers {       i