使用 JDBC 連線資料庫完成 CRUD 操作
阿新 • • 發佈:2018-12-12
JDBC 完成 CRUD 操作總結
準備工作
開發環境和工具
Eclipse、mysql、通過 JDBC 連線 mysql 資料庫時需要的架包 mysql-connector-java。
JDBC 工具類
將獲取連線和釋放資源的方法封裝到一個工具類中,之後在使用的時候直接呼叫此類中的方法即可,減少了程式碼量,程式碼實現見下方。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql. SQLException;
import org.junit.Test;
/**
* 工具類
* @author Tong
*
*/
public class JDBCUtils_V1 {
/**
* 獲取連線方法
* @return
*/
@Test
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08" , "root", "1");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 釋放資源方法
* @param conn
* @param pstmt
* @param rs
*/
@Test
public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
初始資料庫表記錄
CRUD 操作
根據 id 查詢使用者資訊(可傳參)
查詢方法
/**
* 根據 id 查詢使用者資訊
*/
@Test
public void testFindUserById() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 1. 獲取連線
conn = JDBCUtils_V1.getConnection();
// 2. 書寫 sql 語句
String sql = "select * from tbl_user where uid=?";
// 3. 獲取執行 sql 語句物件
pstmt = conn.prepareStatement(sql);
// 4. 設定引數
pstmt.setString(1, "2"); // 查詢 uid = 2 的使用者資訊
// 5. 執行 sql 語句
rs = pstmt.executeQuery();
// 6. 處理結果集
while (rs.next()) {
System.out.println(rs.getString(2) + ", " + rs.getString("upassword"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 7. 釋放資源
JDBCUtils_V1.release(conn, pstmt, rs);
}
}
查詢結果
新增使用者資訊
新增方法,新增一條記錄,uname = ‘zhaoliu’,upassword = ‘666’。
/**
* 新增使用者資訊
*/
@Test
public void testAdd() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 1. 獲取連線
conn = JDBCUtils_V2.getConnection();
// 2. 編寫 sql 語句
String sql = "insert into tbl_user values(null,?,?)";
// 3. 獲取執行 sql 語句的物件
pstmt = conn.prepareStatement(sql);
// 4. 設定引數
pstmt.setString(1, "zhaoliu");
pstmt.setString(2, "999");
// 5. 執行插入操作(返回影響的行數)
int row = pstmt.executeUpdate();
if (row > 0) {
System.out.println("新增成功!");
} else {
System.out.println("新增失敗!");
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
JDBCUtils_V2.release(conn, pstmt, null);
}
}
新增結果
根據 id 修改使用者資訊(可傳參)
修改方法,將 uid 為 2 的記錄中的 upassword 改為 999。
/**
* 修改使用者資訊
*/
@Test
public void testUpdateById() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 1. 獲取連線
conn = JDBCUtils_V3.getConnection();
// 2. 編寫 sql 語句
String sql = "update tbl_user set upassword=? where uid=?";
// 3. 獲取執行 sql 語句的物件
pstmt = conn.prepareStatement(sql);
// 4. 設定引數
pstmt.setString(1, "999");
pstmt.setInt(2, 1);
// 5. 執行 sql 語句
int row = pstmt.executeUpdate();
if (row > 0) {
System.out.println("更新成功!");
} else {
System.out.println("更新失敗!");
}
} catch(Exception e) {
throw new RuntimeException(e);
} finally {
JDBCUtils_V3.release(conn, pstmt, null);
}
}
修改結果
根據 id 刪除使用者資訊(可傳參)
刪除方法,刪除 uid 為 4 的記錄。
/**
* 刪除使用者資訊
*/
@Test
public void testDeleteById() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 1. 獲取連線
conn = JDBCUtils_V3.getConnection();
// 2. 編寫 sql 語句
String sql = "delete from tbl_user where uid=?";
// 3. 獲取執行 sql 語句的物件
pstmt = conn.prepareStatement(sql);
// 4. 設定引數
pstmt.setInt(1, 4);
// 5. 執行刪除操作
int row = pstmt.executeUpdate();
if (row > 0) {
System.out.println("刪除成功!");
} else {
System.out.println("刪除失敗!");
}
} catch(Exception e) {
throw new RuntimeException(e);
} finally {
JDBCUtils_V3.release(conn, pstmt, null);
}
}
刪除結果
總結
JDBC開發一般步驟
使用 Statement
- 註冊驅動
- 獲取連線
- 書寫 sql 語句
- 獲取執行 sql 語句物件(Statement)
- 執行 sql 語句,獲取結果集
- 處理結果集
- 釋放資源
使用 PreparedStatement(防 sql 注入)
- 註冊驅動
- 獲取連線
- 書寫 sql 語句
- 獲取執行 sql 語句物件(PreparedStatement)
- 設定引數
- 執行 sql 語句,獲取結果集
- 處理結果集
- 釋放資源
涉及知識點
資料庫 sql 語句(增刪改查)、Java 基礎語法(異常處理等)、Test單元測試、JDBC連線資料庫開發步驟等。