1. 程式人生 > 資料庫 >JDBC---用Java操作資料庫

JDBC---用Java操作資料庫

什麼是JDBC

Java database connectivity——Java資料庫連結,Java語言操作資料庫。
資料庫驅動----資料庫廠商提供的可以和Java連結的介面。
jdbc是官方定義的一套操作所有關係型資料庫的規則,即介面,各個資料庫廠商實現介面,
提供資料庫驅動jar包,通過JDBC程式設計,真正執行程式碼的是驅動的jar包中的程式。

JDBC快速入門

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
 * JDBC快速入門
 *
 */
public class JDBCDemo1 {
    public static void main(String[] args) throws Exception {
        //1.匯入jar包---mysql-connector-java-8.0.13
        /*
            建立目錄 方便管理 第三方庫
            新建目錄 轉為 庫
            將jar包複製到專案的目錄檔案下
         */
        //2.註冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        //3.獲取資料庫連線物件
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "15367485979");
        //4.定義一個SQL語句
        String sql = "update mytable set score = 500 where ages =5";
        //5.執行SQL物件 statement
        Statement statement = conn.createStatement();
        //6執行sql
        int count = statement.executeUpdate(sql);
        //7.處理結果
        System.out.println(count);
        //8.釋放資源
        statement.close();
        conn.close();
        /*
        如果報錯和時區有關的錯誤時,可以參考下面的部落格,親測有效
        https://blog.csdn.net/manongxf/article/details/87615026
         */
    }
}

JDBC 介面

**DriverManager;		驅動管理物件**
功能:
 註冊驅動---告訴程式哪個資料庫驅動jar,MySQL5之後的jar包可以省略註冊驅動程式。
	Class.forName("com.mysql.jdbc.Driver");
	通過檢視原始碼發現在com.mysql.jdbc.Driver類中存在靜態程式碼塊
	---註冊驅動部分程式碼;	
 獲取資料庫連線
	Connection conn=DriverManager.getConnection
	("jdbc:mysql://localhost:3306/db3", "root", "15367485979");
	"jdbc:mysql://localhost:3306/db3"指定連結資料。
-------------------------------------------------------------------------------------------------------------
**Connection;		資料庫連結物件**
功能:
 	獲取執行SQL的物件
 		statement createstatement()
 		 preparedstatement preparestatement(string sql)
 	管理事務
 		開啟事務 setautocommit(boolean autocommit)引數為false 開啟事務
 		提交事務 commit()
 		回滾事務 rollback()
-----------------------------------------------------------------------------------------------------------
**Statement;		執行SQL物件**
		int executeUpdate(string sql)執行DML(insert update delete)語句DDL(create alter drop)語句,返回值指影響的行數,即資料庫表中被修改的資料記錄條數。
		Boolean execute(string sql)可以執行任意的SQL瞭解
		resultset executequery(string sql)執行DQL(select)語句
------------------------------------------------------------------------------------------------------
**ResultSet;		結果集物件**
	Boolean next()遊標向下移動一行
	get資料型別:獲取資料(引數),引數為列名
// ResultSet rset=null;
rset= stat.executeQuery(sql2);
for (int i=0;i<5;i++){
//處理結果
//讓游標向下移動一行
rset.next();
//獲取資料
int value = rset.getInt(1);
int value2 = rset.getInt(2);
System.out.println(value+","+value2);}

利用返回值和while來進行遍歷

// ResultSet rset=null;
rset= stat.executeQuery(sql2);
 boolean v=rset.next();
 while(v){
  //處理結果
  //獲取資料
  int value = rset.getInt(1);
  int value2 = rset.getInt(2);
  System.out.println(value+","+value2);
  //讓游標向下移動一行
     v =  rset.next();
 }
---------------------------------------------------------------------------------------------------------
	
**PreparedStatement;	執行SQL的物件**
  public static void main(String[] args) {
        Connection conn=null;
        Statement stat=null;
            //註冊驅動
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //建立連結
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "15367485979");
            //定義SQL
            String sql = "insert into mytable value(5,6)";
            //執行SQL
            stat = conn.createStatement();
            int s = stat.executeUpdate(sql);
            boolean ss = stat.execute(sql);
            if(s>0){
                System.out.println("資料執行成功");
            } else{
                System.out.println("資料執行失敗");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //避免空指標異常
            if (stat!=null){
                //關閉資源
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn!=null){
                //關閉資源
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

編寫JDBC工具類

目的:簡化書寫
分析:
	1.註冊驅動抽取
	2.抽取一個方法獲取連結物件
	3.釋放資源

工具類的實現

/**
 * JDBC工具類
 * 使用配置檔案傳遞引數
 */
public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    static {//靜態程式碼塊 能夠使得在類載入的時候就獲取資料
        //建立集合類
        Properties pro = null;
        try {
            pro = new Properties();//集合類 基於雜湊表
            //載入檔案
            pro.load(new FileReader("utils\\jabc.properties"));
            //獲取資料 賦值
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 獲取連結物件
     * @return
     */
    public static Connection getConnection(){
        try {
            Class.forName(driver);
            return DriverManager.getConnection(url, user, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 釋放資源
     */
    public static void close(ResultSet rs,Statement stmt, Connection conn){
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}