ホームページ  >  記事  >  Java  >  Java における JDBC の簡単な紹介

Java における JDBC の簡単な紹介

黄舟
黄舟オリジナル
2017-07-20 14:01:071416ブラウズ

JDBCとは何ですか?この記事では、クライアント プログラムがデータベースにアクセスする方法を標準化するために使用される Java 言語のアプリケーション プログラミング インターフェイスについて詳しく説明します。興味のある方は参照してください。

前書き: JDBC とは何ですか

。 Wikipedia の紹介:


Java Database Connectivity (略して JDBC) は、クライアント プログラムがデータベースにアクセスする方法を標準化するために使用される Java 言語のアプリケーション プログラミング インターフェイスであり、データベース内のデータのクエリや更新などの機能を提供します。 。 JDBC は Sun Microsystems の商標でもあります。 JDBC はリレーショナル データベース用です。


簡単に言えば、SQL ステートメントを実行するために使用される Java API の一種で、JDBC を通じて、Java プログラミングを使用してリレーショナル データベースを直接操作できます。カプセル化により、開発者は純粋な Java API を使用して SQL の実行を完了できます。


1. 準備(1): MySQL のインストール、設定、基礎学習

下の写真は、デモンストレーションに使用するデータベースのテーブルです。


2. 準備(2):データベースに対応したjarパッケージをダウンロードし、インポートします

JDBCを使用するには、対応するjarパッケージをプロジェクトにインポートする必要があります。 Eclipseでのインポート方法:

プロジェクトアイコンを右クリックし、「プロパティ」を選択し、「Java Bulid Path」で「外部JARの追加...」を選択し、ダウンロードして解凍した後に取得したjarパッケージを選択します。 S mysql を操作すると、現時点ではインポートでエラーは報告されません。

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

には、これに加えて、直接インポートできる JDBC パッケージも必要です。


import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

3. 基本的な JDBC 操作


わかりやすくするために、データベース関連の操作、コマンド、パラメーターはすべてハードコーディングされています。興味のある読者はこれらを調べて、データと操作の間の結合を減らすことができます。

まず、具体的なコードを見て実践してみましょう。この記事の 5 番目の部分では、使用される API について少し調べます。
以下のすべてのメソッドとデータメンバーは、パブリッククラス JDBCOperation 内にあります。


(1) 記録されたクラスの定義(オプション)


これは主に操作とインターフェース定義を容易にするために行われ、必須ではありません。


static class Student {
  private String Id;
  private String Name;
  private String Sex;
  private String Age;

  Student(String Name, String Sex, String Age) {
   this.Id = null; //default
   this.Name = Name;
   this.Sex = Sex;
   this.Age = Age;
  }

  public String getId() {
   return Id;
  }

  public void setId(String Id) {
   this.Id = Id;
  }

  public String getName() {
   return Name;
  }

  public void setName(String Name) {
   this.Name = Name;
  }

  public String getSex() {
   return Sex;
  }

  public void setSex(String Sex) {
   this.Sex = Sex;
  }

  public String getAge() {
   return Age;
  }

  public void setage(String Age) {
   this.Age = Age;
  }
}

(2) 接続の取得


操作する前に、データベースへの接続を取得する必要があります。

private static Connection getConn() {
 String driver = "com.mysql.jdbc.Driver";
 String url = "jdbc:mysql://localhost:3306/samp_db";
 String username = "root";
 String password = "";
 Connection conn = null;
 try {
  Class.forName(driver); //classLoader,加载对应驱动
  conn = (Connection) DriverManager.getConnection(url, username, password);
 } catch (ClassNotFoundException e) {
  e.printStackTrace();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return conn;
}

(3)挿入


private static int insert(Student student) {
 Connection conn = getConn();
 int i = 0;
 String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  pstmt.setString(1, student.getName());
  pstmt.setString(2, student.getSex());
  pstmt.setString(3, student.getAge());
  i = pstmt.executeUpdate();
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}
(4)更新


private static int update(Student student) {
 Connection conn = getConn();
 int i = 0;
 String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  i = pstmt.executeUpdate();
  System.out.println("resutl: " + i);
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}
(5) )select


で * を XXX から選択します例えば。


private static Integer getAll() {
 Connection conn = getConn();
 String sql = "select * from students";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement)conn.prepareStatement(sql);
  ResultSet rs = pstmt.executeQuery();
  int col = rs.getMetaData().getColumnCount();
  System.out.println("============================");
  while (rs.next()) {
   for (int i = 1; i <= col; i++) {
    System.out.print(rs.getString(i) + "\t");
    if ((i == 2) && (rs.getString(i).length() < 8)) {
     System.out.print("\t");
    }
    }
   System.out.println("");
  }
   System.out.println("============================");
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return null;
}

(6) delete


private static int delete(String name) {
 Connection conn = getConn();
 int i = 0;
 String sql = "delete from students where Name=&#39;" + name + "&#39;";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  i = pstmt.executeUpdate();
  System.out.println("resutl: " + i);
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}
4. テスト

テストする前に、システム内の対応するデータベースのサービスを開く必要があります。 WindowsでのMySQLの起動コマンドは
net start mysql


テストコード

public static void main(String args[]) {
 JDBCOperation.getAll();
 JDBCOperation.insert(new Student("Achilles", "Male", "14"));
 JDBCOperation.getAll();
 JDBCOperation.update(new Student("Bean", "", "7"));
 JDBCOperation.delete("Achilles");
 JDBCOperation.getAll();
}

Eclipseでの出力です

============================
1 エンダー 男性 8
2 ビーン 男性 6
3 ペトラ 女性 9
4ピーター 男性 9
5 _グラフ 男性 40
6 神 女性 255
============================
=========== =================
1 エンダー 男性 8
2 ビーン 男性 6
3 ペトラ フェマ 9
4 ピーター 男性 9
5 _グラフ 男性 40
6 神 女性 255
7 アキレス男性 14
============================
結果: 1
結果: 1
========== ==================
1 エンダー 男性 8
2 ビーン 男性 7
3 ペトラ フェマ 9
4 ピーター 男性 9
5 _グラフ 男性 40
6 神 女性 255
= ===========================

五、代暗号分析

上記の对データ库进行增删修正過程中、その共性部分、つまり汎用的なフローを公開できます:

(1)接続オブジェクトの作成、SQL 蟥询コマンド文字列;
(2)接続オブジェクトの入力SQL 蟥询コマンド、PreparedStatement オブジェクトの取得;
(3)PreparedStatementオブジェクトはexecuteUpdate()またはexecuteQurey()を実行して結果を取得します;
(4)次にPreparedStatementオブジェクトとConnectionオブジェクトを閉じます。 ResultSet クラス。Java API ハンドラは、その具体的な概念と方法を理解できます。パブリックインターフェース Connectionextends Wrapper


特定のデータベースとの接続 (セッション)。接続コンテキスト内で SQL 文が実行され、結果が返されます。

接続オブジェクトの説明、サポートされている SQL 文、保存手順、この接続機能などの情報を提供できます。この情報は、getMetaData メソッドを使用して取得されます。 :

CallableStatement

パブリック インターフェイス PreparedStatementextends Statement
は、事前に評価された SQL 句のオブジェクトを示します。

SQL 句は、事前に評価され、PreparedStatement オブジェクトに保存されます。その後、このオブジェクトを使用して、この句を何度も効率的に実行できます。


よく使う方法

booleanexecute()
この PreparedStatement オブジェクト内の SQL ステートメントを実行します。これは、任意の種類の SQL ステートメントにすることができます。
ResultSet useQuery()
この PreparedStatement オブジェクトで SQL クエリを実行し、クエリによって生成された ResultSet オブジェクトを返します。
int executeUpdate()
ここでは PreparedStatement オブジェクト内の実行 SQL 句、SQL データベース操作句(データ操作言語、DML)の句、比など INSERT、UPDATE または DELETE の句、または返されません内容を返すSQL DDL ステートメントなどのステートメント。

ResultSet

java.sql
インターフェースResultSet
すべてのスーパーインターフェース:
Wrapper
すべての既知のサブインターフェース:
CachedRowSet、FilteredRowSet、JdbcRowSet、JoinRowSet、RowSet、SyncResolver、 owSet

パブリックインターフェースResultSetextends Wrapper

は、データベース結果セットのデータ テーブルを表します。これは通常、データベースにクエリを実行するステートメントを実行することによって生成されます。

6. 考慮すべき質問

すべての SQL 操作は接続を確立して閉じる必要がありますが、これは必然的に大量のリソース オーバーヘッドを消費します。これを回避するにはどうすればよいでしょうか。
分析: 接続プールを使用すると、毎回接続を確立したり閉じたりすることなく、接続を均一に維持できます。実際、これは JDBC をカプセル化する多くのツールで使用されています。

以上がJava における JDBC の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。