JDBC:(java database Connection) java資料庫連接。
- 2021 年 10 月 25 日
- 筆記
JDBC 指 Java 資料庫連接,是一種標準Java應用編程介面( JAVA API),用來連接 Java 程式語言和廣泛的資料庫。
JDBC連接步驟:
1.先導入jar包,把jar放入到工程下並 add Libar ay
2.載入驅動 Class.forName(“com.mysql.jdbc.Driver”);
3.獲取連接對象 Connection connection=DriverManger.getConnection(url,user,password);
4.獲取執行sql語句的對象: Statement
解決方案 : 使用PrepareStatement來進行sql的預編譯
2.常見的JDBC組件
JDBC 的 API 提供了以下介面和類:
DriverManager :這個類管理一系列資料庫驅動程式。匹配連接使用通訊子協議從 JAVA 應用程式中請求合適的資料庫驅動程式。識別 JDBC 下某個子協議的第一驅動程式將被用於建立資料庫連接。
Driver : 這個介面處理與資料庫伺服器的通訊。你將很少直接與驅動程式互動。相反,你使用 DriverManager 中的對象,它管理此類型的對象。它也抽象與驅動程式對象工作相關的詳細資訊。
Connection : 此介面具有接觸資料庫的所有方法。該連接對象表示通訊上下文,即,所有與資料庫的通訊僅通過這個連接對象進行。
Statement : 使用創建於這個介面的對象將 SQL 語句提交到資料庫。除了執行存儲過程以外,一些派生的介面也接受參數。
ResultSet : 在你使用語句對象執行 SQL 查詢後,這些對象保存從數據獲得的數據。它作為一個迭代器,讓您可以通過它的數據來移動。
SQLException : 這個類處理髮生在資料庫應用程式的任何錯誤。
3.程式碼演示
下面是我的程式碼舉例:
1.首先要創建一個後綴為 properties 的文件,(注意必須要寫在src路徑下) 寫入硬編碼,目的是為了程式日後有變動的話直接在這個文件中更改,源程式碼保持不動。
url=jdbc:mysql://localhost:3306/abc? serverTimezone=Asia/Shanghai user=root password=123@qwe drivername=com.mysql.cj.jdbc.Driver //都是以鍵值對的形式,(注意:這裡面不需要在每段程式碼結尾加 ; ) //url = jdbc:mysql://路徑(埠)/庫名?serverTimezone(時區)=Asia(亞洲)/Shanghai //user=(mysql帳號) //password=(mysql密碼) //drivername(這個可以自行定義)=com.mysql.cj.jdbc.Driver(這個路徑是導入jar包的路徑)
2.創建實體類 包名命名為 entiy(實體)
1 public class User3 { 2 private Integer id; 3 private String name; 4 private String password; 5 6 public Integer getId() { 7 return id; 8 } 9 10 public void setId(Integer id) { 11 this.id = id; 12 } 13 14 public String getName() { 15 return name; 16 } 17 18 public void setName(String name) { 19 this.name = name; 20 } 21 22 public String getPassword() { 23 return password; 24 } 25 26 public void setPassword(String password) { 27 this.password = password; 28 } 29 30 @Override 31 public String toString() { 32 return "User3{" + 33 "id=" + id + 34 ", name='" + name + '\'' + 35 ", password='" + password + '\'' + 36 '}'; 37 } 38 }
3.建立util包,裡面建立BaseDao類
-類作用主要用於將UserDao3類中的重複程式碼進行提取,提高效率;實現程式碼簡潔。
1 public Connection connection; 2 public PreparedStatement ps; 3 public ResultSet resultSet; 4 5 private static String url; 6 private static String user; 7 private static String password; 8 private static String drivername; 9 10 static{ 11 try { 12 //先建立輸入流 創建properrties對象 載入資源流 13 InputStream resourceAsStream = BaseDao3.class.getResourceAsStream("/db2.properties"); 14 Properties properties = new Properties(); 15 properties.load(resourceAsStream); 16 //導入數據 17 url = properties.get("url").toString(); 18 user = properties.get("user").toString(); 19 password = properties.get("password").toString(); 20 drivername=properties.get("drivername").toString(); 21 //載入驅動(驅動只需要載入一次就可以了) 22 Class.forName(drivername); 23 24 } catch (Exception e) { 25 e.printStackTrace(); 26 } 27 28 } 29 30 public void getconnection(){ //建立連接方法 31 try { 32 connection = DriverManager.getConnection(url,user,password); 33 } catch (Exception throwables) { 34 throwables.printStackTrace(); 35 } 36 } 37 38 public int change(String sql,Object... arg){ //增刪改方法 39 try { 40 getconnection(); 41 ps=connection.prepareStatement(sql);//預編譯 42 for(int index=0;index<arg.length;index++){ 43 ps.setObject(index+1,arg[index]); 44 } 45 int row =ps.executeUpdate(); //執行更新 46 return row; 47 } catch (Exception throwables) { 48 throwables.printStackTrace(); 49 }finally{ 50 closeAll(); 51 } 52 return 0; 53 } 54 55 56 public void closeAll() { //關閉連接, 從內往外關閉 57 try { 58 if (resultSet != null) { resultSet.close(); } 59 if (ps != null) { ps.close(); } 60 if (connection != null) { connection.close(); } 61 }catch(Exception e){ 62 e.printStackTrace(); 63 } 64 }
4.創建實體類後緊跟要創建實體類Dao, 上面我的實體類名為 user3 那麼Dao類名就可以為 user3Dao
Dao方法用來建立連接mysql資料庫,實現程式連接資料庫功能。
裡面寫入方法,需求(增刪改查)
public class UserDao3 extends BaseDao3 { //繼承剛才寫好的BaseDao父類
//添加數據
public int insert(User3 user3){
String a="insert into user (id,name,password) values (?,?,?)";
return change(a,user3.getId(),user3.getName(),user3.getPassword());
}
//使用list遍歷表中數據
public List<User3> select(){
List<User3> list =new ArrayList<>();
try {
getconnection();
String a ="select * from user";
ps=connection.prepareStatement(a);
resultSet = ps.executeQuery();
while(resultSet.next()){
User3 user3 =new User3();
user3.setId(resultSet.getInt(1));
user3.setName(resultSet.getString(2));
user3.setPassword(resultSet.getString(3));
list.add(user3);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return list;
}
public int update(User3 user3){ //修改資料庫表中數據
String a ="update user set password=? where id=?";
return change(a,user3.getPassword(),user3.getId());
}
public int delete(User3 user3){ //刪除表中數據
String a = "delete from user where id=?";
return change(a,user3.getId());
}
}