JAVA學習->JDBC處理技術

一、什麼是JDBC 技術.

JDBC(Java DataBase Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
通俗來說就是:
(1)java語言操作數據庫;
(2)jdbc是oracle公司指定的一套規範;
(3)驅動:jdbc的實現類,由數據庫廠商提供。

二、JDBC技術的作用

(1)連接數據庫;
(2)發送sql語句;
(3)處理結果。

三、JDBC技術的操作步驟

(1)創建一個數據庫和表
(2)創建一個web項目
(3)編碼:

  註冊驅動
  獲取連接
  編寫sql語句
  創建預編譯的語句執行者
  設置參數
  執行sql語句
  處理結果
  釋放資源

四、代碼實現

1、基本實現:

package com.itheima.a_jdbc.a_hello;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.sql.Statement;

import org.junit.Test;

import com.itheima.a.utils.JdbcUtils;

public class Hello {
    @Test
    public void f1() {
        System.out.println("hello");
    }

    @Test
    public void f2() throws Exception {     //查詢操作
        //註冊驅動
        Class.forName("com.mysql.jdbc.Driver");//Driver類,完整路徑

        //創建連接
        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/day07","root","root");

        //編寫SQL語句
        String sql="select * from category";

        //創建語句執行者
        PreparedStatement ps=conn.prepareStatement(sql);//通過連接執行SQL語句

        //設置參數
        //修改數據庫的表內容時會用到

        //執行SQL語句
        ResultSet rs=ps.executeQuery();

        //處理結果
        while(rs.next()) {
            System.out.println(rs.getString("cid")+rs.getString("cname"));
        }

        //釋放資源
        rs.close();
        ps.close();
        conn.close();
    }

    @Test
    public void f3() {                          //插入操作
        Connection conn=null;
        ResultSet rs=null;
        PreparedStatement st=null;

        try {
            //獲取鏈接
            conn=JdbcUtils.getConnection();
            //編寫sql
            String sql="insert into category values(?,?);";

            //創建語句執行者
            st=conn.prepareStatement(sql);

            //設置參數
            st.setString(1, "c006");
            st.setString(2, "戶外");

            //執行sql
            int i=st.executeUpdate();

            //處理結果
            if(i==1) {
                System.out.println("success");
            }else {
                System.out.println("fail");
            }
        }catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //釋放資源
            JdbcUtils.closeResource(conn, st, rs);
        }
    }

    @Test
    public void f4() {          //更新操作
        Connection conn=null;
        PreparedStatement st=null;
        ResultSet rs=null;

        try {
            conn=JdbcUtils.getConnection();
            String sql="update category set cname=? where cid = ?";
            st=conn.prepareStatement(sql);
            st.setString(1, "手機");
            st.setString(2, "c006");

            int i=st.executeUpdate();
            if(i==1) {
                System.out.println("success");
            }else {
                System.out.println("fail");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //釋放資源
            JdbcUtils.closeResource(conn, st, rs);
        }
    }
    @Test
    public void f5() {          //刪除操作
        Connection conn=null;
        PreparedStatement st=null;
        ResultSet rs=null;

        try {
            conn=JdbcUtils.getConnection();
            String sql="delete from category where cid = ?";
            st=conn.prepareStatement(sql);
            st.setString(1, "c006");

            int i=st.executeUpdate();
            if(i==1) {
                System.out.println("success");
            }else {
                System.out.println("fail");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //釋放資源
            JdbcUtils.closeResource(conn, st, rs);
        }       
    }
}

2、JdbcUtils工具類改進:

package com.itheima.a.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

public class JdbcUtils {
    static final String DRIVERCLASS;
    static final String URL;
    static final String USER;
    static final String PASSWORD;

    static {
        //獲取ResourceBundle      ctrl+2  l
        ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
        //獲取指定內容
        DRIVERCLASS=bundle.getString("driverClass");
        URL=bundle.getString("url");
        USER=bundle.getString("user");
        PASSWORD=bundle.getString("password");
    }

    public static Connection getConnection() throws ClassNotFoundException, SQLException {

        //註冊驅動
        Class.forName(DRIVERCLASS);

        //獲取鏈接
        Connection conn=DriverManager.getConnection(URL,USER,PASSWORD);
        return  conn;
    }
    /**
     * 釋放資源
     * @param conn  鏈接
     * @param st    語句執行者
     * @param rs    結果集
     */

    public static void closeResource(Connection conn,Statement st,ResultSet rs) {
        closeConn(conn);
        closeStatement(st);
        closeResultSet(rs);
    }
    /**
     * 釋放鏈接
     * @param conn 鏈接
     */
    public static void closeConn(Connection conn) {
        if(conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            conn=null;
        }
    }

    /**
     * 釋放語句執行者
     * @param st 語句執行者
     */
    public static void closeStatement(Statement st) {
        if(st!=null) {
            try {
                st.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            st=null;
        }
    }

    /**
     * 釋放結果集
     * @param rs 結果集
     */
    public static void closeResultSet(ResultSet rs) {
        if(rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            rs=null;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章