mysql jdbc入門學習,mysqljdbc入門
一、jdbc基本概念
jdbc : Java Database Connectivity
sun公司為了統一對資料庫的操作,定義了一套api,稱之為jdbc
這套api完全由介面組成,我們在編寫程式的時候針對介面進行調用
這些介面交給資料庫廠家去實現, 不同的資料庫廠商會提供不同的實作類別,
這些實作類別被我們稱作資料庫的驅動。
一流公司定標準
二流公司做服務
三流公司做產品
資料庫驅動交給資料庫廠商製作的優點:
1.Java開發人員只需要維護Java應用和一套統一的規範
2.資料庫廠商提供具體的Java驅動程式,資料庫廠商如果改變了
資料庫底層的實現,資料庫廠商要隨之更新驅動程式,不會影響到
已經完成的Java應用程式。
簡單來說使用Java代碼發送SQL語句的技術,就是jdbc
二、實現jdbc程式的條件
1.需要知道串連資料庫伺服器所在地
需要資料庫的IP地址和連接埠號碼
ip定位到主機
連接埠號碼:定位到程式
2.需要知道資料庫的使用者名稱和密碼
三、如何?jdbc串連MySQL資料庫?
1.匯入資料庫的驅動程式
mysql-connector-java-5.0.8-bin.jar
2.註冊資料庫的驅動
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
3.建立與mysql資料庫的串連
String url = "jdbc:mysql://localhost:3306/test";//jdbc是主協議,mysql是子協議
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
4.建立用於發送sql語句的 Statement 對象
Statement stmt = conn.createStatement();
5. 編寫SQL語句
String sql = "select * from users";
6.發送sql, 獲得結果集
ResultSet rs = stmt.executeQuery(sql);
7.處理結果集
System.out.println("id | name | password | email | birthday");
while(rs.next()) {
// 有第一行
int id = rs.getInt("id"); // 通過列名取值比較直觀
String name = rs.getString("name");
String psw = rs.getString("password");
String email = rs.getString("email");
Date birthday = rs.getDate("birthday");
System.out.println(id + " | " + name + " | " + psw + " | " + email + " | " + birthday);
}
8.關閉資料庫連接,最後開啟的資源最先釋放,釋放之前需要判斷資源是否已經斷開
rs.close();
stmt.close();
conn.close();
四、jdbc程式詳解
1. 註冊驅動
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
上面的語句會導致註冊兩次驅動
原因在於,查看Driver類的源碼會發現在靜態代碼塊中完成了註冊驅動的工作,
也就是說註冊驅動其實很簡單,只需要載入驅動類即可
Class.forName(“com.mysql.jdbc.Driver”);
2. 建立資料庫的串連
Connection conn = DriverManager.getConnection(url, user, password);
其中:
url, 相當於資料庫的訪問地址,程式員通過url指定需要訪問的資料庫
//串連資料庫的url
//jdbc主協議,mysql是子協議
//jdbc協議:資料庫子協議://主機:連接埠號碼:/資料庫名
jdbc:mysql:[]//localhost:3306/test?參數名:參數值
其中jdbc為主協議,mysql為子協議,localhost為主機名稱,3306為連接埠號碼,test為資料庫名
url的後面可以跟參數,常用的參數有:user=root&password=root&characterEncoding=UTF-8
如果url地址後面跟了user和password,建立Connection對象時將不必再次傳入值
Connection conn = DriverManager.getConnection(url);
補充說明: 如果訪問的localhost:3306,url 可省寫為jdbc:mysql:///test
3. Connection 對象
Connection對象用於表示與某個資料庫之間的串連,在程式中對資料庫的所有操作都需要通過此對象來完成
常用方法有:
createStatement():建立向資料庫發送sql的statement對象。
prepareStatement(sql) :建立向資料庫發送先行編譯sql的PrepareSatement對象。
prepareCall(sql):建立執行預存程序的callableStatement對象。
setAutoCommit(boolean autoCommit):設定事務是否自動認可。
commit() :在連結上提交事務。
rollback() :在此連結上復原事務。
4. Statement 對象
用於向資料庫發送sql語句
execute(String sql):用於向資料庫發送任意sql語句
executeQuery(String sql) :只能向資料發送查詢語句。(常用)
executeUpdate(String sql):只能向資料庫發送insert、update或delete語句(常用)
addBatch(String sql) :把多條sql語句放到一個批處理中。
executeBatch():向資料庫發送一批sql語句執行。
5. ResultSet 對象
對於查詢操作,該對象特別重要,因為它專門用於封裝結果集
儲存的形式就是一種表格的形式,同樣是列+行,說白了就和我們在 dos 命令列視窗查詢的結果一樣
遍曆方式:
一開始遊標指向結果集第一行, 也就是表頭
通過 next 將遊標移向下一行, 如果沒有下一行,該方法會返回false
獲得當前行的資料需要調用get方法:
get(int index)獲得第幾列 列數從1開始
get(String columnName) 根據列名獲得值 常用
注意:資料庫的資料類型與java中資料類型的對應關係
ResultSet對象的常用方法
next():移動到下一行
previous():移動到前一行
absolute(int row):移動到指定行
beforeFirst():移動resultSet的最前面。
afterLast() :移動到resultSet的最後面。
6. 釋放資料庫資源
因為資料允許的並發訪問串連數量往往都比較有限,使用完成後,需要釋放資源
在java程式中,我們應該將最終必須要執行的代碼放到finally當中
釋放資源的代碼
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
7. 防止 sql 注入
在 service 層進行邏輯判斷
使用PreparedStatement對象
package cn.test.jdbc.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;
import com.mysql.jdbc.Driver;
public class JDBCDemo {
//串連資料庫的url的寫法
//jdbc主協議,mysql是子協議
//jdbc協議:資料庫子協議://主機:連接埠號碼:/資料庫名
private String url="jdbc:mysql://localhost:3306/day15";
//使用者名稱
String username = "root";
//密碼
String password = "Name-66437";
@Test
public void main(String [] args) throws SQLException{
//1.建立一個驅動程式的類對象
Driver driver = new com.mysql.jdbc.Driver();
//設定使用者名稱和密碼
Properties props = new Properties();
props.setProperty("username", username);
props.setProperty("password", password);
//2.串連資料庫
Connection conn = driver.connect(url, props);
Statement stmt = conn.createStatement();
String sql = "select * from student";
ResultSet rs = stmt.executeQuery(sql);
//7.處理結果集
System.out.println("id | name | password | email | birthday");
while(rs.next()) {
// 有第一行
int id = rs.getInt("id"); // 通過列名取值比較直觀
String name = rs.getString("name");
String psw = rs.getString("password");
String email = rs.getString("email");
Date birthday = rs.getDate("birthday");
System.out.println(id + " | " + name + " | " + psw + " | " + email + " | " + birthday);
}
//釋放資源的代碼
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
}