JDBC的操作步驟


JDBC的操作步驟

一、什么是JDBC

JDBC(Java DataBase Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用java語言編寫的類和接口組成。 其實,JDBC就是一套規范(接口),讓各大服務器廠商自己去實現這個規范(實現接口),從而可以使得java編寫的程序可以去訪問。JDBC的目標是使Java程序員使用JDBC可以連接任何提供了JDBC驅動程序的數據庫系統,這樣就使得程序員無需對特定的數據庫系統的特點有過多的了解,從而大大簡化和加快了開發過程。

img

二、常用的API

  • Statement接口:

    執行靜態SQL語句並返回它所生成結果.

    int executeUpdate(String sql): 執行DDL/DML語句. 若當前SQL是DDL語句,則返回0. 若當前SQL是DML語句,則返回受影響的行數.

    ResultSet executeQuery(String sql):執行DQL語句,返回結果集.

    close():釋放資源

  • Connection接口

    Statement createStatement():創建一個靜態的語句對象.

    PreparedStatement prepareStatement(String sql):創建一個預編譯語句對象. 此時參數sql:表示帶有占位符(?)的SQL語句的模板.

    close():釋放資源

  • PreparedStatement接口

    是Statemen接口的子接口,表示預編譯的 SQL 語句的對象.

    void setXxx(int parameterIndex,Xxx value):設置第幾個占位符的真正參數值.

    int executeUpdate():執行DDL/DML語句. 注意:沒有參數 若當前SQL是DDL語句,則返回0. 若當前SQL是DML語句,則返回受影響的行數.

    ResultSet executeQuery():執行DQL語句,返回結果集.

    close():釋放資源

  • ResultSet接口

    執行SQL語句會返回一個結果集,開始光標位於第一行的前,調用next方法會返回一個boolean類型,判斷下一行是否還有結果集並且光標會想下一行移動。

    boolean next():判斷當前光標是否能向下移動,如果能向下移動返回true,並同時將光標移動到下一行.

    Xxx getXxx(int columnIndex):取出當前光標所在行的第columnIndex列的數據(columnIndex從1開始算).

    Xxx getXxx(String columnName):取出當前光標所在行的列名為columnName列的數據,columnName可以是別名.

    close():釋放資源

    Xxx表示的是數據類型

三、怎么用JDBC

有五個鐵定的步驟,一個一個來說:

1.加載注冊驅動

先加載驅動包,驅動包就是服務器廠商實現了JDBC接口的一個jar包,比如mysql的驅動包。先build path ,mysql的jar包。用java加載注冊驅動代碼:

Class.forName("驅動類名稱");

一些數據庫的驅動類名稱:

mysql: com.mysql.jdbc.Driver

oracle: oracle.jdbc.driver.OracleDriver

DB2: com.ibm.db2.jcc.DB2Driver

加載過程就是 把驅動類這一份字節碼加載進JVM,會立刻執行類中的靜態代碼塊,而在這些類中的靜態代碼塊就是在注冊驅動。

Java6開始,JDBC4.0有一個新特性,無需加載注冊驅動。不提倡,因為JavaWeb也是要手動加載

2.獲取連接對象

Connection conn = DriverManager.getConnection(url,username,password);

url是也是各個數據庫不相同:

mysql的是 jdbc:mysql://主機名:3306/數據庫

username和password是數據庫的賬號和密碼

3.獲取語句對象

Statement st = conn.createStatement();
PreparedStatement ps = conn.prepareStatement(sql);

4.執行SQL語句

在數據庫管理系統上執行完sql語句返回結果,DML語句會返回影響的行數,DDL語句不返回,DQL會返回一個結果集

st.executeUpdate(sql);//DML,DDL
ResultSet rs = execumentQuery();//DQL

對於DQL語句要進行處理結果集

while(rs.next){//TODO}

5.釋放資源

正確關閉資源:

public static void close(Connection conn, Statement st, ResultSet rs){
    try {
        if(rs != null){
            rs.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        try {
            if(st != null){
                st.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(conn != null){
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{

            }
        }
    }
}

四、JDBC的DML,DDL,DQL操作

  • 創建表

    public void testCreateTab() throws Exception {
        String sql = "CREATE TABLE s_student(id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10) NOT NULL UNIQUE,age INT)";
        //1.記載注冊驅動/
        Class.forName("com.mysql.jdbc.Driver");
        //2.獲取連接對象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", 
                                                      "root", "admin");
        //3.創建語句對象
        Statement st = conn.createStatement();
        //4.執行SQL語句
        st.executeUpdate(sql);
        //5.釋放資源
        st.close();
        conn.close();
    }
    
  • 增刪改

    public class DMLTest {
    	@Test   //向表中添加行數據
    	public void testInsert() throws Exception {
    		String sql = "INSERT INTO s_student(name,age) VALUES('西門吹雪',18),('王熙鳳',19)";
    		//1.加載注冊驅動
    		Class.forName("com.mysql.jdbc.Driver");
    		//2.獲取連接對象
    		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
    		//3.獲取語句對象
    		Statement st = conn.createStatement();
    		//4.執行sql語句
    		int ret = st.executeUpdate(sql);
    		System.out.println("受影響的行數"+ret);
    		//5.關閉資源
    		st.close();
    		conn.close();
    	}
    	@Test
    	public void testDelete() throws Exception {
    		String sql = "DELETE FROM s_student WHERE name = '西門吹雪'";
    		//1.記載注冊驅動
    		Class.forName("com.mysql.jdbc.Driver");
    		//2獲取連接對象
    		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
    		//3獲取語句對象
    		Statement st = conn.createStatement();
    		//4.執行sql語句
    		st.executeUpdate(sql);
    		//5.釋放資源
    		st.close();
    		conn.close();
    	}
    	@Test
    	public void testUpdate() throws Exception {
    		String sql = "UPDATE s_student SET age = 99 WHERE id = 3";
    		Class.forName("com.mysql.jdbc.Driver");
    		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
    		Statement st = conn.createStatement();
    		st.executeUpdate(sql);
    		st.close();
    		conn.close();
    	}
    }
    
  • 查詢

    public class DQLTest {
    	@Test
    	public void testQuerySigle() throws Exception {
    		String sql = "SELECT * FROM s_student WHERE id = 1";
    		//加載驅動
    		Class.forName("com.mysql.jdbc.Driver");
    		//獲取連接對象
    		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
    		//獲取語句對象
    		Statement st = conn.createStatement();
    		//執行sql語句
    		ResultSet rs = st.executeQuery(sql);
    		if(rs.next()){
    			long id = rs.getLong("id");
    			long age = rs.getLong("age");
    			String name = rs.getString("name");
    			System.out.println(id + "," + age +"," + name);
    		}
    		rs.close();
    		st.close();
    		conn.close();
    	}
    	
    	@Test
    	public void testAll() throws Exception {
    		String sql = "SELECT * FROM s_student";
    		Class.forName("com.mysql.jdbc.Driver");
    		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","admin");
    		Statement st = conn.createStatement();
    		ResultSet rs = st.executeQuery(sql);
    		while(rs.next()){
    			String name = rs.getString("name");
    			long id = rs.getLong("id");
    			long age = rs.getLong("age");
    			System.out.println(name + "," + id +"," + age);
    		}
    		rs.close();
    		st.close();
    		conn.close();
    	}
    }
    

五、總結

JDBC的CUID操作就是嚴格按照上述步驟完成的,可以發現基本操作都很相同,也很容易理解。


免責聲明!

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



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