[數據庫操作]Java中的JDBC的使用方法.


[數據庫操作]Java中的JDBC的使用方法.

 

前言:
想必大家在實際編碼中都遇到過JDBC的操作, 這里僅做自己的一個總結, 有錯誤和不完整之處還請大家提出來. 

1,JDBC其實一套規范(接口)
數據庫廠商需要實現此接口(實現類)--數據庫驅動


2,jdbc的作用:
可以和數據庫創建鏈接
發送sql語句
接收返回值,處理結果

3,api詳解(java.sql或者javaX.sql)

DriverManager 類:
  管理一組 JDBC 驅動程序的基本服務。
  常用方法:
    registerDriver(Driver):注冊驅動
      查看 mysql的Driver的時候有下面一段代碼:
              
           發現在類加載的時候已經注冊過驅動,我們以后只需要把Driver加載到內存即可
        類.Class
        對象.getClass()
        Class.forName("全限定名(包名+類名)")
        以后開發中我們通過Class.forName("com.mysql.jdbc.Driver")把驅動注冊進去即可.  
      static Connection getConnection(String url, String user, String password) :獲取鏈接
        參數說明:
          url:告訴jdbc去連接那個數據庫
          固定格式: 協議:子協議:子協議名稱 參數
          mysql: jdbc:mysql ://localhost:3306/databaseName
          oracle: jdbc:oracle:thin :@localhost:1521:實例名
          user:數據庫的登錄名
          password:數據庫的登錄密碼

  Connection 接口:
    創建語句執行者:
      Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "123456");

  常用方法:
    Statement createStatement():創建Statement -語句執行者
    PreparedStatement prepareStatement(String sql) :創建一個預編譯的語句執行對象
    CallableStatement prepareCall(String sql) :(了解) 創建一個 CallableStatement 對象來調用數據庫存儲過程。

  Statement 接口(容易產生sql注入, 后期使用PreparedStatement. 后面會有blog說明這個問題)
    sql語句執行者:
      Statement st=conn.createStatement();

    常用方法:
      ResultSet executeQuery(String sql) :執行查詢語句,返回一個集合 ☆
      int executeUpdate(String sql) :執行更新 插入 刪除語句,返回影響行數.☆
      boolean execute(sql):執行給定的 SQL 語句,該語句可能返回多個結果。
        若返回true ,執行是的查詢語句
        調用 getResultSet 獲取查詢結果
        若返回false,執行的是更新 插入 刪除語句
        調用 getUpdateCount 獲取影響的行數

  ResultSet 接口
    
返回的查詢結果:
      String sql = "...";
      ResultSet rs=st.executeQuery(sql);

    常用方法:
      boolean next() :判斷是否有下一條記錄,並且移動到下一行
      獲取內容:
        getXXX(參數)
      參數的寫法:
        1.字段名稱 字符串
        2.第幾列 從1開始
          getInt()
          getString()
          getObject()

4, 實例JDBCUtil類的書寫
(1)配置文件 jdbc.properties

drivername=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ddatabaseName
user=root
password=1234

(2)JDBCUtil.java

復制代碼
 1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.ResultSet;
 4 import java.sql.SQLException;
 5 import java.sql.Statement;
 6 import java.util.ResourceBundle;
 7 
 8 public class JDBCUtil {
 9     //ctrl + shift + x  轉成大寫
10     //ctrl + shift + y  轉成小寫
11     static final String DRIVERNAME;
12     static final String URL;
13     static final String USERNAME;
14     static final String PASSWORD;
15     
16     static{
17         
18         /*通過ResourceBundle 專門用來加載properties文件
19         ResourceBundle bundle=ResourceBundle.getBundle("文件名稱");
20         
21         通過 bundle.getString(鍵的名字)
22         String value=bundle.getString("url");
23     */
24     
25         ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
26         DRIVERNAME=bundle.getString("drivername");
27         URL=bundle.getString("url");
28         USERNAME=bundle.getString("user");
29         PASSWORD=bundle.getString("password");
30     }
31     
32     static{
33         try {
34             Class.forName(DRIVERNAME);
35         } catch (ClassNotFoundException e) {
36             e.printStackTrace();
37         }
38     }
39     
40     //獲取鏈接
41     public static Connection getConnection() throws SQLException{
42         return DriverManager.getConnection(URL,USERNAME,PASSWORD);
43     }
44     
45     //釋放資源
46     public static void closeResource(Connection conn,Statement st,ResultSet rs){
47         if (rs!=null) {
48             try {
49                 rs.close();
50             } catch (SQLException e) {
51                 e.printStackTrace();
52             }
53         }
54         
55         if (st!=null) {
56             try {
57                 st.close();
58             } catch (SQLException e) {
59                 e.printStackTrace();
60             }
61         }
62         
63         if (conn!=null) {
64             try {
65                 conn.close();
66             } catch (SQLException e) {
67                 e.printStackTrace();
68             }
69         }
70         
71     }
72 }
復制代碼

(3)CRUDDemo, 使用PreparedStatement方式

復制代碼
  1 public class PPCRUDDemo {
  2     public static void main(String[] args) {
  3         //插入
  4         //insert("趙四","123","zhaosi@163.com");
  5         //更新
  6         //updateByName("趙四","尼古拉斯.趙四");
  7         //獲取
  8         //getByName("尼古拉斯.趙四");
  9         //刪除
 10         deleteByName("尼古拉斯.趙四");
 11     }
 12 
 13     private static void deleteByName(String string) {
 14         //模版
 15         Connection conn=null;
 16         PreparedStatement st=null;
 17         ResultSet rs=null;
 18         
 19         try {
 20             //獲取鏈接
 21             conn=JDBCUtil.getConnection();
 22             //編寫sql
 23             String sql="delete from user where username =?";
 24             //獲取預編譯執行者
 25             st=conn.prepareStatement(sql);
 26             //設置參數
 27             st.setString(1, string);
 28             //執行sql
 29             int i = st.executeUpdate();
 30             //處理結果
 31             if (i>0) {
 32                 System.out.println("成功");
 33             }else{
 34                 System.out.println("失敗");
 35             }
 36         } catch (Exception e) {
 37             e.printStackTrace();
 38         }finally{
 39             //釋放資源
 40             JDBCUtil.closeResource(conn, st, rs);
 41         }
 42         
 43     }
 44 
 45     private static void getByName(String string) {
 46 
 47         Connection conn=null;
 48         PreparedStatement st=null;
 49         ResultSet rs=null;
 50         
 51         try {
 52             conn=JDBCUtil.getConnection();
 53             String sql="select * from user where username=? limit 1";
 54             st=conn.prepareStatement(sql);
 55             
 56             st.setString(1, string);
 57             rs=st.executeQuery();
 58             if (rs.next()) {
 59                 System.out.println(rs.getInt(1)+":"+rs.getString(2)+":"+rs.getObject(3)+":"+rs.getObject(4));
 60             }
 61         } catch (Exception e) {
 62             // TODO: handle exception
 63             e.printStackTrace();
 64         }finally{
 65             
 66             JDBCUtil.closeResource(conn, st, rs);
 67         }
 68         
 69     }
 70 
 71     private static void updateByName(String oldName, String newName) {
 72         Connection conn=null;
 73         PreparedStatement st=null;
 74         ResultSet rs=null;
 75         
 76         try {
 77             conn=JDBCUtil.getConnection();
 78             String sql="update user set username = ? where username = ?";
 79             st=conn.prepareStatement(sql);
 80             st.setString(1, newName);
 81             st.setString(2, oldName);
 82             
 83             int i=st.executeUpdate();
 84             //處理結果
 85             if (i>0) {
 86                 System.out.println("成功");
 87             }else{
 88                 System.out.println("失敗");
 89             }
 90             
 91         } catch (Exception e) {
 92             e.printStackTrace();
 93         }finally{
 94             JDBCUtil.closeResource(conn, st, rs);
 95         }
 96         
 97         
 98     }
 99 
100     private static void insert(String username, String password, String email) {
101         Connection conn=null;
102         PreparedStatement st=null;
103         ResultSet rs=null;
104         
105         try {
106             //獲取鏈接
107             conn=JDBCUtil.getConnection();
108             //編寫sql
109             String sql="insert into user values(null,?,?,?)";
110             //獲取預編譯語句執行者
111             st=conn.prepareStatement(sql);
112             //設置參數
113             st.setString(1, username);
114             st.setString(2, password);
115             st.setString(3, email);
116             //執行sql
117             int i=st.executeUpdate();
118             //處理結果
119             if (i>0) {
120                 System.out.println("成功");
121             }else{
122                 System.out.println("失敗");
123             }
124         } catch (Exception e) {
125             e.printStackTrace();
126         }finally{
127             JDBCUtil.closeResource(conn, st, rs);
128         }
129     }
130 
131 }
復制代碼

 

這里沒有多么高深的東西, 熟能生巧, 暫時總結的就這么多.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM