第36 章 : Java資料庫程式設計基礎操作
156 JDBC簡介
JDBC 屬于一種服務,所有服務都必須按照指定的流程進行操作
Java Database Connectivity
開發包 java.sql
核心組成 DriverManager
接口 Connection、Statement、PreparedStatement、ResultSet
四種連接配接方式:
JDBC-ODBC 橋連接配接 JDK支援,性能較差
JDBC 一般隻連接配接本地服務
JDBC網絡連接配接 連接配接網絡資料庫
JDBC協定連接配接
157 連接配接MySQL資料庫
需要配置驅動程式路徑
通過反射機制加載資料庫驅動程式類
整個JDBC設計實作的就是一個工廠類
pom.xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
import java.sql.Connection;
import java.sql.DriverManager;
class Demo {
// MySQL < 8.0
// static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
// static final String DB_URL = "jdbc:mysql://localhost:3306/data";
// MySQL >= 8.0
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/data?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static void main(String[] args) throws Exception {
// 注冊 JDBC 驅動
Class.forName(JDBC_DRIVER);
// 打開連結
Connection conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 關閉連結
conn.close();
}
}
參考:
https://www.runoob.com/java/java-mysql-connect.html第37 章 : Statement資料庫操作接口
158 Statement接口簡介
Statement 資料操作
門面設計模式
Connection - 建立 -> Statement - 操作 -> SQl資料庫
常用操作
// 資料更新 insert update delete 傳回影響行數
int executeUpdate(String sql)
// 資料查詢 select 傳回查詢結果
ResultSet executeQuery(String sql)
159 Statement實作資料更新
建立學生表
create table student(
id int not null PRIMARY key auto_increment,
name varchar(20),
age int
)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
class Demo {
// MySQL >= 8.0
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/data?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static void main(String[] args) throws Exception {
// 注冊 JDBC 驅動
Class.forName(JDBC_DRIVER);
// 打開連結
Connection conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 執行SQL語句
Statement statement = conn.createStatement();
String sql = "insert into student(name, age) values('Tom', 23)";
int count = statement.executeUpdate(sql);
System.out.println("insert count: " + count);
// insert count: 1
// 關閉連結
conn.close();
}
}
160 Statement實作資料查詢
避免
SELECT *
查詢,跟上具體要傳回的字段名稱
select查詢結果過大也會對程式造成影響,注意加limit限制
// 查詢資料
String sql = "select name, age from student";
ResultSet result = statement.executeQuery(sql);
while (result.next()){
String name = result.getString("name");
int age = result.getInt("age");
System.out.println(String.format("%s %s", name, age));
// Tom 23
}
第38 章 : PreparedStatement資料庫操作
161 Statement問題分析
Statement問題:
1、不能很好描述日期形式
2、SQL拼湊,造成編寫與維護困難
3、對敏感字元資料不能合理拼湊
162 PreparedStatement接口簡介
資料和SQL語句分離, 問号? 作為占位符
// 資料更新
int executeUpdate()
// 資料查詢
ResultSet executeQuery()
更新資料
String sql = "update student set age = ? where id = ? ";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setInt(1, 16);
statement.setInt(2, 1);
int count = statement.executeUpdate();
System.out.println("update count: " + count);
// 1
163 使用PreparedStatement實作資料查詢操作
-- 查詢全部資料
select name, age from student
-- 根據id查詢資料
select name, age from student where id = ?
-- 分頁查詢
select name, age from student limit ?
-- 統計查詢
select count(*) from student