JDBC第一篇【介紹JDBC、使用JDBC連線資料庫、簡單的工具類】

ldzsl發表於2021-09-09
什麼是JDBC

JDBC全稱為:Java Data Base Connectivity,它是可以執行SQL語句的Java API

為什麼我們要用JDBC
  • 市面上有非常多的資料庫,本來我們是需要根據不同的資料庫學習不同的API,sun公司為了簡化這個操作,定義了JDBC API【介面】
  • sun公司只是提供了JDBC API【介面】,資料庫廠商負責實現。
  • 對於我們來說,運算元據庫都是在JDBC API【介面】上,使用不同的資料庫,只要用資料庫廠商提供的資料庫驅動程式即可
  • 這大大簡化了我們的學習成本
簡單操作JDBC

步驟:

  1. 匯入MySQL或者Oracle驅動包
  2. 裝載資料庫驅動程式
  3. 獲取到與資料庫連線
  4. 獲取可以執行SQL語句的物件
  5. 執行SQL語句
  6. 關閉連線

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {

            /*
            * 載入驅動有兩種方式
            *
            * 1:會導致驅動會註冊兩次,過度依賴於mysql的api,脫離的mysql的開發包,程式則無法編譯
            * 2:驅動只會載入一次,不需要依賴具體的驅動,靈活性高
            *
            * 我們一般都是使用第二種方式
            * */

            //1.
            //DriverManager.registerDriver(new com.mysql.jdbc.Driver());

            //2.
            Class.forName("com.mysql.jdbc.Driver");

            //獲取與資料庫連線的物件-Connetcion
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "root");

            //獲取執行sql語句的statement物件
            statement = connection.createStatement();

            //執行sql語句,拿到結果集
            resultSet = statement.executeQuery("SELECT * FROM users");

            //遍歷結果集,得到資料
            while (resultSet.next()) {

                System.out.println(resultSet.getString(1));

                System.out.println(resultSet.getString(2));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {

            /*
            * 關閉資源,後呼叫的先關閉
            *
            * 關閉之前,要判斷物件是否存在
            * */

            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }

        }

上面我們已經簡單使用JDBC去查詢資料庫的資料了,接下來我們去了解一下上面程式碼用到的物件


Connection物件

客戶端與資料庫所有的互動都是透過Connection來完成的。

常用的方法:


//建立向資料庫傳送sql的statement物件。

createcreateStatement()

//建立向資料庫傳送預編譯sql的PrepareSatement物件。

prepareStatement(sql) 

//建立執行儲存過程的callableStatement物件

prepareCall(sql)

//設定事務自動提交

setAutoCommit(boolean autoCommit)

//提交事務

commit()

//回滾事務

rollback()

Statement物件

Statement物件用於向資料庫傳送Sql語句,對資料庫的增刪改查都可以透過此物件傳送sql語句完成。

Statement物件的常用方法:


//查詢

executeQuery(String sql)

//增刪改

executeUpdate(String sql)

//任意sql語句都可以,但是目標不明確,很少用

execute(String sql)

//把多條的sql語句放進同一個批處理中

addBatch(String sql)

//向資料庫傳送一批sql語句執行

executeBatch()

ResultSet物件

ResultSet物件代表Sql語句的執行結果,當Statement物件執行executeQuery()時,會返回一個ResultSet物件

ResultSet物件維護了一個資料行的遊標【簡單理解成指標】,呼叫ResultSet.next()方法,可以讓遊標指向具體的資料行,進行獲取該行的資料

常用方法:


//獲取任意型別的資料

getObject(String columnName)

//獲取指定型別的資料【各種型別,檢視API】

getString(String columnName)

//對結果集進行滾動檢視的方法

next()

Previous()

absolute(int row)

beforeFirst()

afterLast()

寫一個簡單工具類

透過上面的理解,我們已經能夠使用JDBC對資料庫的資料進行增刪改查了,我們發現,無論增刪改查都需要連線資料庫,關閉資源,所以我們把連線資料庫,釋放資源的操作抽取到一個工具類


    /*
    * 連線資料庫的driver,url,username,password透過配置檔案來配置,可以增加靈活性
    * 當我們需要切換資料庫的時候,只需要在配置檔案中改以上的資訊即可
    *
    * */

    private static String  driver = null;
    private static String  url = null;
    private static String  username = null;
    private static String password = null;

    static {
        try {

            //獲取配置檔案的讀入流
            InputStream inputStream = UtilsDemo.class.getClassLoader().getResourceAsStream("db.properties");

            Properties properties = new Properties();
            properties.load(inputStream);

            //獲取配置檔案的資訊
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");

            //載入驅動類
            Class.forName(driver);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,username,password);
    }
    public static void release(Connection connection, Statement statement, ResultSet resultSet) {

        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2325/viewspace-2799804/,如需轉載,請註明出處,否則將追究法律責任。

相關文章