Java資料庫連線
JDBC概述:
JDBC(Java DataBase Connectivity): java資料庫連線; 使用java程式 , 執行sql語句, 對資料進行增刪改查(CURD)。
使用jdbc需匯入jar包: mysql的驅動mysql-connectorjava-5.1.37-bin.jar
JDBC規範(掌握四個核心物件):
- DriverManager : 用於註冊驅動.
- Connection : 表示與資料庫建立的連線.
- Statement : 操作資料庫sql語句的物件.
- ResultSet : 結果集.
使用步驟: 6步
1.註冊驅動
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 不用. 在com.mysql.jdbc.Driver類中,有個靜態程式碼塊 static { // 建立Driver物件會執行靜態程式碼塊註冊了一次驅動 DriverManager.registerDriver(new Driver()); } 原因: 導致驅動被註冊了2次.
解決: 獲取class檔案物件,會執行靜態程式碼塊 , 所以用反射技術. Class.forName(“com.mysql.jdbc.Driver”);
2.獲取資料庫連線物件Connection
使用客戶端去連線伺服器,需要經過3次握手. DriverManager.getConnection(url , user , password ): 與資料庫建立連線. url: 需要連線資料庫的位置(jdbc:mysql://localhost:埠號/庫名) user: 使用者名稱 password: 密碼
3.獲取執行者物件Statement
Statement createStatement(); //建立操作sql語句的物件. 例: Statement stmt = conn.createStatement();
4.執行sql語句,並返回結果.
String sql = “sql語句”; 常用方法: int executeUpdate(String sql): - - 執行insert , update , delete 語句. ResultSet executeQuery(String sql): 執行select語句.
5.處理結果集(select的結果)
rs.next( ) ; / / 判斷是否有下一個元素. rs.getXxx( “欄位名” ) : / / 取出結果
常用方法:
- Object getObject(int index) / getObject(String name) 獲得任意物件
- String getString(int index) / String getString(String name) 獲得字串
- int getInt(int index) / int getInt(String name) 獲得整數.
6.釋放資源
使用後的東西都需要關閉!關閉的順序是先得到的後關閉,後得到的先關閉. rs.close( ) ; stmt.close( ) ; conn.close( );
原生 jdbc 6步:
public class Demo01JDBC {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1. 註冊驅動
Class.forName("com.mysql.jdbc.Driver");
// 2. 獲取資料庫連線物件Collection.
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day03","root","root");
// 3. 獲取執行物件Statement
Statement stmt = conn.createStatement();
// 4. 使用執行物件執行sql語句, 執行結果 .
int row = stmt.executeUpdate("INSERT INTO users(username,PASSWORD) VALUES('柳巖','1234');");
System.out.println(row);
// 5. 釋放資源.
stmt.close();
conn.close();
}
}
因為 " 獲取資料庫連線 " 和 " 釋放資源 " 的操作 , 經常用 , 所以可以封裝工具類JDBCUtils , 從而達到程式碼的重複利用.
import java.sql.*;
/*
建立JDBC工具類,工具類中的方法一般都是靜態的,方法我們直接通過類名使用
定義兩個方法
一個方法用於獲取資料庫連線物件Connection並返回
一個方法用於釋放資源
*/
public class JDBCUtil {
// 定義4個靜態的成員變數 , 儲存資料庫連線的相關資訊 .
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/day03";
private static String username = "root";
private static String password = "root";
// 建立靜態程式碼塊 , 裡面的程式碼只執行一次 , 優先執行.
static {
try {
// 註冊驅動 .
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 定義一個方法,用於獲取資料庫連線物件Collection
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
/*
如果獲取資料庫連線物件Connection失敗了,返回值conn就是null
那麼我們就沒有必要讓程式繼續執行
目的就是獲取連線操作資料庫,返回null是無法操作資料庫
所以我們就可以把編譯異常轉換為執行時異常,讓程式停止下來
*/
throw new RuntimeException("資料庫連線失敗..."+e);
}
return conn;
}
// 定義一個方法 , 用來釋放資源 .
public static void close(ResultSet rs , Statement stmt , Connection conn){
// 判斷它如果不為空 , 就釋放資源 .
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
使用JDBCUtils工具類: 查詢資料.
public class Demo03JDBC {
// 使用JDBC技術 , 查詢資料.
@Test
public void testSelect(){
// 使用JDBCUtil工具類 獲取資料庫連線物件Connection
Connection conn = JDBCUtil.getConnection();
// 獲取執行類物件Statement
Statement stmt = null;
try {
stmt = conn.createStatement();
// 執行sql語句.獲取結果 .
ResultSet rs = stmt.executeQuery("select * from users;");
while (rs.next()){
int i = rs.getInt("uid");
String username = rs.getString( "username");
String password = rs.getString("password");
System.out.println(i+"\t"+username+" \t"+password);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}