jdbc增刪查改
前言:
Java資料庫連線(Java Database Connectivity,J 簡稱JDBC),簡單來說就是 使用Java執行sql語句的,面向關係型資料庫的java_API
- 建立 Directory包 > 取名為 lib
- 後匯入 MySQL-connector-java-5.1.37 檔案
建立資料庫(不然連線什麼)
// 依據實體類建立資料庫欄位和型別
- 建立實體類(BankModel.java)
package com.kjzz;
public class Teacher{
// 成員變數
private int SID; // id
private String SName; // name
private String birthday; // birthday 生日
// 無參構造 / 有參構造
public Teacher(){
}
public Teacher(int SID, String SName,String birthday) {
this.SID = SID;
this.SName = SName;
this.birthday = birthday;
}
// get / set 方法
public int getSID() {
return SID;
}
public void setSID(int SID) {
this.SID = SID;
}
public String getSName() {
return SName;
}
public void setSName(String SName) {
this.SName = SName;
}
public String getBirthday(){
return birthday;
}
public void setBirthday(String birthday){
this.birthday = birthday;
}
}
5.建立資料庫驅動類(DBUtill.java)
public class DBConn{
// 驅動 , 路徑 , 使用者名稱 密碼
// DRIVER--URL---USER-PWD
public static String DRIVER = "com.mysql.jdbc.Driver";
// jdbc:資料庫名:// localhost:埠號/連線的資料庫
public static String URL = "jdbc:mysql://localhost:3306/test";
public static String USER = "root";
public static String PWD = "root";
// 獲取連結,為了處理找不到這個類,所以要異常處理
static{
try{
Class.forName(DRIVER); // 通過這個驅動名去找這個類
} catch(ClassNotFoundException e){
e.printStackTrace();
}
}
// 連線
public static Connection getConnection(){ // 要匯入sql的包 不要帶jdbc的
Connection conn = null;
try{
// 獲取連結用的
conn = DriverManager.getConnection(URL,USER,PWD)
// 路勁 使用者名稱 密碼
} catch(SQLException e){
e.printStackTrace();
}
}
/** 關閉連線
當資料庫使用後必須關閉,如果沒有關閉資料庫,
資料庫介面有限,下次不能連線
*/
public static void CloseConn(Conncetion conn,PerpredStatement prep,ResultSet rs){
try{
if(rs != null){ // 不等於空 說明在使用
rs.close();
}
if(perp != null){
prep.close();
}
if(coon != null){
coon.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
// 測試
public static void main(String[] args) {
Connection conn = getConnectionV();
System.out.println("ConnDB測試" + conn);
}
// 輸出結果 ConnDB測試 com.mysql.jdbc.JDBC4Connection@289d1c02
}
6.建立資料庫操作類
public class ZSGC {
public static Connection conn = null; // 連線物件
public static PreparedStatement prep = null; // 處理語句
public static ResultSet rs = null; // 查詢後返回的結果集
/* 查詢方法 實現思路
1. 載入資料庫驅動(已經寫好了 連線)
2. 獲取資料庫連線
3. 通過Conncetion 實列獲取 Statement 物件
4. 通過 Statement 實列執行 SQL 語句
5. 處理 ResultSet 結果集
6. 回收資料庫資源
*/
public List<Teacher> ChaXun(){
List<Teacher> list = new ArrayList<>();
String SelectSql = "select * from teacher"; // 表
try {
conn = Conn.getConnection(); // 1. 連線
prep = conn.prepareStatement(SelectSql); // 2. 處理sql
rs = prep.executeQuery(); // 3. 查詢返回的結果集
while(rs.next()){ //rs 有內容,不為空
Teacher t = new Teacher();
int ID = rs.getInt("sid");
String NAME = rs.getString("sname");
String BIRTHDAY = rs.getString("birthday");
t = new Teacher(ID,NAME,BIRTHDAY);
list.add(t); list.add(stu); // 都要加進list集合
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
Conn.CloseConn(conn,prep,rs);
}
return list;
}
// 新增
public static boolean Insert(Teacher teacher){
int num = 0;
String InsertSql = "INSERT INTO teacher values(?,?,?)";
try {
conn = Conn.getConnection();
prep = conn.prepareStatement(InsertSql);
prep.setInt(1,teacher.getSID());
prep.setString(2,teacher.getSName());
prep.setString(3,teacher.getBirthday());
num = prep.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
Conn.CloseConn(conn,prep,rs);
}
return num > 0;
}
// 刪除
public static boolean Delete(int key){
int num = 0;
String DeleteSql = "Delete from teacher where id = ?";
try {
conn = Conn.getConnection();
// 執行sql語句
prep = conn.prepareStatement(DeleteSql);
prep.setInt(1,key);
num = prep.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
Conn.CloseConn(conn,prep,rs);
}
return num > 0;
}
// 修改
public static boolean Update(Teacher teacher){
int num = 0; // 定義影響的行數
String UpdateSql = "update teacher set sid = ?,sname = ? where sid = ? ";
try {
conn = Conn.getConnection();
prep = conn.prepareStatement(UpdateSql);
prep.setInt(1,teacher.getSID());
prep.setString(2,teacher.getSName());
prep.setInt(3,teacher.getSID());
num = prep.executeUpdate(); // 增刪改都是這個,然會INT型別
} catch (SQLException e) {
e.printStackTrace();
}finally {
Conn.CloseConn(conn, prep, rs);
}
return num > 0;
}
}
- 測試
public class Text1 {
public static void main(String[] args) {
Conn conn = new Conn();
System.out.println("conn = " + conn);
CRUD crud = new CRUD();
List<Teacher> list = crud.ChaXun();
for (Teacher t : list) {
System.out.println(t.getSID());
System.out.println(t.getSName());
System.out.println(t.getBirthday());
}
// 新增
Teacher t1 = new Teacher(3,"白居易","1001-11-11");
boolean insert = CRUD.Insert(t1);
if (insert == true){
System.out.println("新增成功");
} else{
System.out.println("新增失敗");
}
// 修改
boolean delete = CRUD.Delete(2);
if (delete == true){
System.out.println("刪除成功");
} else {
System.out.println("報錯咯");
}
// 修改
Teacher t2 = new Teacher();
t2.setSID(1);
t2.setSName("張三");
t2.setSID(1);
boolean update = CRUD.Update(t2);
if (update == true){
System.out.println("1號名字已被修改為張三");
} else {
System.out.println("失敗");
}
}
}