JDBCとは何ですか?この記事では、クライアント プログラムがデータベースにアクセスする方法を標準化するために使用される Java 言語のアプリケーション プログラミング インターフェイスについて詳しく説明します。興味のある方は参照してください。
前書き: JDBC とは何ですか
1. 準備(1): MySQL のインストール、設定、基礎学習
2. 準備(2):データベースに対応したjarパッケージをダウンロードし、インポートします
プロジェクトアイコンを右クリックし、「プロパティ」を選択し、「Java Bulid Path」で「外部JARの追加...」を選択し、ダウンロードして解凍した後に取得したjarパッケージを選択します。 S mysql を操作すると、現時点ではインポートでエラーは報告されません。
import com.mysql.jdbc.Connection; import com.mysql.jdbc.PreparedStatement;
import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException;
わかりやすくするために、データベース関連の操作、コマンド、パラメーターはすべてハードコーディングされています。興味のある読者はこれらを調べて、データと操作の間の結合を減らすことができます。
まず、具体的なコードを見て実践してみましょう。この記事の 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;
}
}
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;
}
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
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;
}
private static int delete(String name) { Connection conn = getConn(); int i = 0; String sql = "delete from students where Name='" + name + "'"; 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 文が実行され、結果が返されます。
CallableStatement
パブリック インターフェイス PreparedStatementextends Statement
は、事前に評価された SQL 句のオブジェクトを示します。
よく使う方法
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 サイトの他の関連記事を参照してください。