Java中的JDBC

概述

JDBC(Java DataBase Connectivity) Java數據庫鏈接,其實就是利用java語言/程序鏈接並訪問數據庫的一門技術,以前咱們能夠經過CMD或者navicat等工具鏈接數據庫,但在企業開發中,更多的是經過程序(java程序)鏈接並訪問數據庫,經過java程序訪問數據庫,就要用到JDBC這門技術。java

訪問數據庫

(1)註冊數據庫驅動
Class.forName(com.mysql.jdbc.Driver);
(2)獲取數據庫鏈接
Connection conn=DirverManager.getConnection
("jdbc:mysql://localhost:3306/test?characterEncoding","root","root")
(3)獲取傳輸器
Statement stat = conn.createStatement();
(4)發送SQL到服務器執行並返回執行結果
String sql ="select * from account";
ResultSet rs = stat.executeQuery(sql);
(5)處理結果
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");
System.out.println(id+":"+name+":"+money);}
(6)釋放資源
rs.close();
stat.close();
conn.close();
System.out.println("Testjdbc.main()....");mysql

經常使用API

(1)註冊數據庫驅動
Class.forName("com.mysql.jdbc.Driver");
所謂的註冊驅動,就是讓JDBC程序加載mysql驅動程序,並管理驅動
驅動程序實現了JDBC API定義的接口以及數據庫服務器的交互的功能,加載驅動是爲了方便使用這些功能。
(2)獲取鏈接數據庫的URL
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/test?characterEncoding","root","root");
DriverManager.getConnection()用於獲取數據鏈接,返回的Connection鏈接對象是JDBC程序鏈接數據庫相當重要的一個對象。
參數1:"jdbc:mysql://localhost:3306/test"是鏈接數據庫的URL,用於指定訪問哪個位置上的數據庫服務器及服務器中的哪個數據庫,具體爲:
image.png
當鏈接本地數據庫,而且端口爲3306,能夠簡寫爲以下形式:
jdbc:mysql:///testsql

(3)Statement傳輸器對象
Statement stat = conn.createStatement();
該方法返回用於向數據庫服務器發送sql語句的statement傳輸器對象
該對象提供了發送sql的方法:
executeQuery(String sql)--
用於向數據庫發送查詢類型的sql語句,返回一個ResultSet對象中
executeUpdate(String sql)--
用於向數據庫發送更新(增長,刪除,修改)類型的sql語句,返回一個int值,表示影響的行數
(4)ResultSet結果集對象
ResultSet對象用於封裝sql語句查詢的結果,也是一個很是重要的對象。該對象上提供了遍歷數據及獲取數據的方法。
--遍歷數據行的方法--
next()-使指向數據行的箭頭向下移動一行,並返回一個布爾類型的結果,true表示箭頭指向了一行數據,false表示箭頭沒有指向任何數據(後面也沒有數據了)
--獲取數據的方法--數據庫

getInt(int columnIndex)
getInt(String columnLable)
getString(int columnIndex)
getString(String columnLable)
getDouble(int columnIndex)
getDouble(String columnLable)
getObject(int columnIndex)
getObjct(String columnLable)

--釋放資源--安全

rs.close();
stat.close();
conn.close();

增刪改查示例

新增:往simulation表中添加一個名稱爲john,money爲3500的記錄服務器

@Test
public void testInsert() {
        Connection conn = null;
        Statement stat = null;
        ResultSet rs = null;
        try{
            //註冊驅動並獲取鏈接
            conn = jdbcUtil.getConn();
            //獲取傳輸器
            stat = conn.createStatement();
            //發送sql語句到服務器執行,並返回執行結果
            String sql = "insert into simulation values(null,"john",3500)";
            //處理結果
            System.out.println("影響行數:"+rows);
        }catch(Exception e){
         e.printStackTrace();
        }finally{
            //經過jdbcUtil工具類中的close方法釋放資源
            jdbcUtil.close(conn,stat,rs);
        }
    }

修改:將simulation表中名稱爲john的記錄,money修改成1500元工具

@Test
 public void testUpdate(){
    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    try{
    //經過工具類註冊數據庫並獲取鏈接
    conn = jdbcUtil.getConn();
    //獲取傳輸器
    stat = conn.createStatement();
    //發送sql語句到服務器執行,並返回執行結果
    String sql = "update account set money=1500 where name = 'john'";
    //處理結果
    System.out.println("影響行數"+rows);
    } catch(Exeption e){
      e.printStackTrace();
    }finally{
    //經過工具類中的close方法釋放資源
    jdbcUtil.close(conn,stat,rs);
    }
 }

查詢:查詢account表中id爲1的記錄spa

@Test
 public void testFindById(){
  Connection conn = null;
  Statement stat = null;
  ResultSet rs = null;
  try{
  //經過工具類註冊驅動並獲取鏈接
  conn = jdbcUtil.getConn();
  //獲取傳輸器
  stat = conn.createStatement();
  //執行sql語句,返回執行結果
  String sql = "select * from account where id=1";
  //處理結果
  if(rs.next()){
   int id = rs.getInt("id");
   String name = rs.getString("name");
   double money = rs.getDouble("money");
   System.out.println(id+":"+name+":"+money);
 }catch(Exception e){
  e.printStackTrace();
 }finally{
   jdbcUtil.close(conn,stat,rs);
  }
 }

刪除:刪除account表中名稱爲john的記錄code

@Test
 public void testDelete(){
  Connection conn =null;
  Statement stat = null;
  ResultSet rs = null;
  try{
  //經過jdbcUtil工具類註冊驅動並獲取鏈接
  conn = jdbcUtil.getConn();
  //獲取傳輸器
  stat = conn.createStatement();
  //發送sql語句到服務器執行,並返回執行結果
  String sql = "delete from account where name='john'";
  int rows = stat.executeUpdate(sql);
  //處理結果
  System.out.println("影響行數:"+rows);
 }catch(Exception e){
  e.printStackTrace();
 }finally{
  //經過jdbcUtil工具類中的close方法釋放資源
  jdbcUtil.close(conn,stat,rs);
  }
 }

PrepareStatement

在上面的增刪改查操做中,使用的是Statement傳輸器對象,而在開發中咱們用的更多的傳輸器對象是PreparedStatement對象,PreparedStatement是Statement的子接口,比Statement更加安全,而且可以提升程序執行的效率。對象

小結

總的來講JDBC就是Java數據庫鏈接,用來規範客戶端程序如何來訪問數據庫的,提供了諸如查詢和更新數據庫中數據的方法,咱們一般說的JDBC是面向關係型數據庫的。

相關文章
相關標籤/搜索