前に書いてある
さまざまなフレームワークが後を絶たずに登場していますが、それらはデータベースを操作するためのより便利な API を完璧に提供します。
しかし、初心者が SQL 構文を練習したり、基本的な JDBC の使い方を少しマスターしたり、それを趣味で行う小規模なプロジェクトに適用したりするには、JDBC を学ぶ価値があります。
1. 統合データベースインターフェースJDBC
•JDBC (Java DataBase Connectivity)、つまり Java データベース接続は、SQL ステートメントを実行するための Java API であり、さまざまなリレーショナル データベースへの統一アクセスを提供でき、Java 言語で記述されたクラスとインターフェイスのセットで構成されます。JDBC は、データベース開発者がデータベース アプリケーションを作成できるようにする高レベルのツールとインターフェイスを構築できるベースラインを提供します。
JDBC コアコンポーネント:
-
DriverManager: ドライバー マネージャー。接続識別子と特定のデータベース ドライバーに従って照合します。
-
ドライバー: ロードされたクラス情報に従って、マネージャーによって生成およびデプロイされ、通常は直接使用されません。
-
接続: データベースに特に接続されているオブジェクトを表します。
- ステートメント: このインターフェイスから作成されたオブジェクトを使用して、SQL ステートメントをデータベースに送信します。
- ResultSet: これらのオブジェクトは、Statement オブジェクトを使用して SQL クエリを実行した後にデータベースから取得したデータを保持します。
- SQLException: このクラスは、データベース アプリケーションで発生するエラーを処理します。
2. 使い方(本体)
- 事前準備(ここで、mysql-connector-java ライブラリをインポートする必要があることに注意してください)
- SQLの実行
- ファイルディレクトリとテーブル作成テキスト
3. コード
//文件IO
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
//sql支持
import java.sql.*;
//集合框架,List
import java.util.List;
public class MySQLDemo {
//数据库连接基本信息
//数据库驱动,提供对相应数据库操作支持
//低版本去掉.cj
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
//数据库地址,用户名和密码
static final String DB_URL = "jdbc:mysql://localhost:3306/MySQLDemoTest?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
static final String USER = "root";
static final String PASS = "123";
public static void main(String[] args) {
//使用url和用户名密码建立连接
Connection conn = null;
//Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句
Statement stmt = null;
Path pathCreat= Paths.get("src","MySQL","target","classes","CreatTable.txt");
try{
// 注册 JDBC 驱动;载入Class文件信息
Class.forName(JDBC_DRIVER);
// 打开链接
System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//建立好连接后,获取当前连接的Statement对象
System.out.println("实例化Statement对象...");
stmt = conn.createStatement();
//读取pathCreat目录下的文件内容,组成SQL语句
StringBuffer sql=new StringBuffer();
List<String> list=Files.readAllLines(pathCreat.toAbsolutePath());
for(String m:list)
sql.append(m);
//通过Statement的对象执行String类型的SQL语句即可
System.out.println("删除表...");
stmt.executeUpdate("DROP TABLE IF EXISTS student;");
System.out.println("新建表...");
stmt.executeUpdate(sql.toString());
System.out.println("插入...");
for(int i=1;i<10;i++)
stmt.executeUpdate("INSERT INTO student (name) VALUES('呆瓜"+i+"号')");
System.out.println("查询...");
ResultSet rs = stmt.executeQuery("SELECT * FROM student");
// 展开结果集数据库
while(rs.next()){
// 通过字段检索
int id = rs.getInt("id");
String name = rs.getString("name");
// 输出数据
System.out.print("ID: " + id);
System.out.print(", 姓名: " + name);
System.out.print("\n");
}
System.out.println("删除...");
for(int i=1;i<10;i++){
if(i%2==0){
stmt.executeUpdate("DELETE FROM student\n" +
"WHERE id="+i+"; ");
}
}
System.out.println("删除后查询...");
rs = stmt.executeQuery("SELECT * FROM student");
while(rs.next()){
// 通过字段检索
int id = rs.getInt("id");
String name = rs.getString("name");
// 输出数据
System.out.print("ID: " + id);
System.out.print(", 姓名: " + name);
System.out.print("\n");
}
// 完成后关闭
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// 处理 JDBC 错误
se.printStackTrace();
}catch(Exception e){
// 处理 Class.forName 错误
e.printStackTrace();
}finally{
// 关闭资源
try{
if(stmt!=null) stmt.close();
}catch(SQLException se2){
}// 什么都不做
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
4. その他の紹介
データベース開発期間:
• データベースのない時代: 専用のデータベースはなく、ほとんどのデータはファイルの形式で保存されます。
• 階層データベース: データベースの設計と保存に階層モデルを使用します。
•ネットワーク データベース: データベースの設計とストレージにネットワーク モデルを使用します。
• リレーショナル データベース: データベースの設計と保存にリレーショナル モデルを使用します。
•非リレーショナルデータベース:水平的なスケーラビリティに適応し、大量のデータ環境に対応するため、近年急速に発展しており、多くの派生型が存在します。
新しい課題と応用:
・Web 2.0の時代では、ユーザーの対話や共同構築によりデータベースの読み書きに対する要求が高まっていますが、大量のデータを保存する必要があるため、さまざまな分野に適したNoSQLデータベースが誕生しました。
• しかし、リレーショナル データベースは依然として支配的な地位を占めており、継続的な開発と他者からの学習により、リレーショナル データベースもより輝かしい新しい段階 - NewSQL を迎えることになります。