mysql的JDBC串連

來源:互聯網
上載者:User

標籤:.exe   沒有   lips   creat   並且   分析   data   row   釋放   

程式是通過DriverManager註冊驅動,所以載入之後可以直接使用DriverMannager
mysql中的多態:
不僅是賦值的時候使用了多態,返回的時候都是返回的借口(不是返回的子類對象),所以如果不使用多態需要強轉通過Java代碼去操作資料庫

  JDBC ----- Java 資料庫 串連JDBC是java提供的資料庫連接規範
  J ----- Java
  DB ----- DataBase
  C ----- Connectivity
使用JDBC
A.JDK 本身沒有實現資料庫連接的功能
  第三方實現了MySQL與Java的串連,並且打包成jar包
  我們要下載jar包,並且將jar包匯入到當前項目

B.擷取串連  資料庫連接的原理就是一個Socket
  在Eclipse的Java程式與MySQL之間建立一個管道

  註冊驅動:Class.forName("com.mycql.jdbc.Driver") 最常用的方法
  獲得串連:
      Connection con = DriverManager.getConnection(url,"帳號","密碼")
      這是個面向介面的編程,返回的是java中的父類Connection,建立的是mysql中實作類別的對象
      url 作用:用來定位元據庫
      jdbc:mysql://localhost:3306/database
      jdbc:mysql:  mysql資料庫協議
      localhost    IP地址,定位一台電腦
      3306        連接埠號碼:定位MySQL程式
      database     定位MySQL的一個資料庫
C.在串連上建立代理對象
  Statement sta = con.createStatement();
    編寫SQL語句並執行
    sta.executeXxx("SQL語句")
    處理執行結果
D.釋放資源 程式與外部互動都需要關閉資源,關閉資源之後資料庫的資料才能進行其它操作
  關閉順序,後建立的先關閉
  rs.close()
  sta.close()
  con.close()

載入驅動的方式將驅動類載入進記憶體
  1.Class.forName("驅動名")
  2.new Driver() 需要導包
  3.DriverManager.registerDriver(new Driver()) 需要導包
  4.System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver")

  2.3兩種方式不常用
    原因1:
      類載入時,會自己使用方式3進行註冊(Driver類中的靜態代碼塊)
      方式2額外建立了一個無用對象
      方式3重複載入驅動
    原因2:
      常見的情況是,開發使用MySQL資料庫,部署使用Oracle資料庫
      如果是方式2.3,需要頻繁改變匯入的包名
      方式1可以將驅動名配置進設定檔//返回的都是java中本身的介面規範,所以不需要導包

Statement 執行代理對象的使用(用於代理固定了的SQL語句)
  A.ResultSet rs = Statement.executeQuery("select * form ...") 執行查詢的語句,返回一個查詢到的結果集
    ResultSet 封裝了查詢到的若干條資料
    
用法:
    while(rs.next()){
      rs.getObject("欄位名");
      rs.getObject(int indext); 欄位索引,從第一行第一列開始
    }
      注意:Java中的索引一般從0開始,但是JDBC中的索引從1開始
B.  int line = Statement.executeUpdate("insert into 表名 欄位=值 where...")
      用於執行增刪改操作的SQL語句,返回的是此操作改變了多少條資料
C.  execute方法可以區別是查詢還是修改語句
      傳回值是true則是select語句,否則是修改語句

PrepareStatement是Statement的子類
  SQL語句的預先處理對象
    在SQL語句中可以用 ? 作為預留位置,之後補齊(站位符只能用於屬性值的地方,會逐個分析傳入字元,轉義非法字元,去掉最外層單引號)
  1.擷取執行對象
    PrepareStatement pst = con.prepareStatement(SQL語句)
  2.補齊預留位置
    pst.setObject(int indext, value)
    Object的類型要和value的類型保持一致
  3.執行SQL語句
    pst.executeQuery()
    pst.executeUpdate()

  優點:
    A.功能更強大,比如可以插入一些特殊字元
    B.執行效率更高,因此稱之為預定義的Statement(在獲得串連的時候就已經準備執行了)

註冊驅動,獲得串連,關閉資原始碼重複,封裝
JDBCUtils
  public class JDBCUtils {
    //註冊驅動只需要註冊一次
      static {
        Class.forName("com.mysql.jdbc.Driver")
      }
    //封裝獲得串連
      public static Connection getCon(){
        Connection con = null;
          try{
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database",賬戶,密碼);
          } catch (Exception e) {
          //發生了異常一定讓程式停止,因為沒有獲得串連(拋運行時異常結束java虛擬機器)
            e.printStackTrace();
            throw new RuntimeException();
          }
        return con;
      }

      public static void close(ResultSet rs,Statement sta,Connection con){
      //要列印自訂資訊,在異常的構造方法中的有參構造,建立異常對象的時候就給出資訊,catch到處理的時候列印
      //判斷是不是不等於空,避免null 指標,沒有對象的時候不需要關閉,一定要釋放資源,不然會影響資料的操作
        if(rs != null){
          try{
            rs.close();
          } catch (Exception e) {
            System.out.println(e.getMessage);
          }
        }
        sta.close();
        con.close();   //同理try\catch關閉資源
       }

    }

JDK 中的 JDBC 設計
  A:JDBC 中大量的使用了多態
    全是介面,就是定義了規則,供各種資料庫實現此規則,但都是介面層次,不用改源碼
    Connection 使用
    Statement 使用
    ResultSet 使用
  B:真正的實現全在各種資料庫自己封裝的jar包中
    不使用多態的時候:
      1.程式一樣運行
      2.缺點:更換jar包是,所有對應的導包實現都得修改
  
    多態體現在Jar包更換上,使用了多態,實現了一種可插拔設計
介面相當於是一種規範,jar包中類實現了介面,遵守規範完成某種操作

mysql的JDBC串連

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.