[轉載] 1.1Java使用JDBC原生方式連線MySql資料庫

ld909發表於2020-12-01

參考連結: Java資料庫連線JDBC驅動程式

前言:今天有朋友問我原生的java連線資料庫,因為框架的使用,如果基礎不牢固的人,是很容易遺忘原生的連線方式。今天正好趁此做一下回顧: 

   這裡只考慮原生方式,框架就不在這裡細說。   一、先大體搞清楚連線時,常用元素都是什麼作用:   在MySQL的官方文件中,這樣解釋說到: 

 java.sql.Driver 它在MySQL Connector / J 中實現的類的名稱 是 com.mysql.jdbc.Driver,也就是驅動程式。你可以把它理解為發動機,沒了它,其他都沒扯。  URL 有了發動機之後,你要開始利用它的力量,也就是為它指明前進的方向,而URL就是它的方向。 值得一提的是,目前連線URL的通用格式是這樣的:  

    protocol//[hosts][/database][?properties]

    

    protocol:一種連線協議,約定的規則。

    hosts:主機名,通常後跟埠號,例如當前主機預設就是localhost:3306,當然也可以多主機連線,這裡暫時不表。

    database:資料庫嘛

 

其實應用測試時也就是這樣的: 

    jdbc:mysql://localhost:3306/test

 

username 資料庫連線的使用者名稱 passowrd 連線密碼Connection 與資料庫建立連線關係,通常為 DriverManager.getConnection(url, username, password)。這裡可以很明顯的感覺出來,每個元素所產生的作用。Statement / PreparedStatement ,需要特別注意的是,我們提倡使用後者,也就是預編譯語句。 PreparedStatement好處: 簡化Statement中的操作 提高執行語句的效能 可讀性和可維護性更好 在程式碼示例中,語法會詳細體現。有了PreparedStatement語句之後,我們可以採用以下語句進行執行: executeQuery(String) 查詢 executeUpdate(String SQL) 更新資料 execute(String SQL) 如果你不知道是查詢還是修改,可以使用這個語句 

二、示例程式碼及註釋 準備: 首先要匯入mysql-connector-java 的jar包 其次,在資料庫中準備如下格式的表:  之後寫基本的連線程式碼 為了實現程式碼的重用,我對兩個基本方法新增和查詢進行封裝: 這是介面:(User類可自行寫入) 

public interface UserDao {

    public void add(User user);

    public User findByUsername(String username);

}

 

下面是實現類: 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import cn.bang.user.domain.User;

 

public class JdbcUserDao implements UserDao {

 

    @Override

    public void add(User form) {

        String driverClassName = "com.mysql.jdbc.Driver";    //啟動驅動

        String url = "jdbc:mysql://localhost:3306/test";    //設定連線路徑

        String username = "root";    //資料庫使用者名稱

        String password = "123";    //資料庫連線密碼

        Connection con = null;        //連線

        PreparedStatement pstmt = null;    //使用預編譯語句

        ResultSet rs = null;    //獲取的結果集

        try {

            Class.forName(driverClassName); //執行驅動

            con = DriverManager.getConnection(url, username, password); //獲取連線

            

            

            String sql = "INSERT INTO USER VALUES(?,?,?,?)"; //設定的預編譯語句格式

            pstmt = con.prepareStatement(sql);

            pstmt.setString(1, form.getUsername());

            pstmt.setString(2, form.getPassword());

            pstmt.setInt(3, form.getAge());

            pstmt.setString(4, form.getGender());

            pstmt.executeUpdate();

        } catch (Exception e) {

            throw new RuntimeException(e);

        }finally {

            //關閉資源,倒關

            try {

            if(rs != null) rs.close();

            if(pstmt != null) pstmt.close();

            if(con != null) con.close();  //必須要關

            } catch (Exception e) {

            }

        }

        

 

    }

 

    @Override

    public User findByUsername(String username) {

        String driverClassName = "com.mysql.jdbc.Driver";

        String url = "jdbc:mysql://localhost:3306/test";

        String mysqlusername = "root";

        String password = "123";

        Connection con = null;

        PreparedStatement pstmt = null;

        ResultSet rs = null;

        try {

            

            Class.forName(driverClassName);

            con = DriverManager.getConnection(url, mysqlusername, password);

            

            

            String sql = "SELECT * FROM USER WHERE username=?";

            pstmt = con.prepareStatement(sql);

            pstmt.setNString(1, username);

 

            rs = pstmt.executeQuery();

            if(rs == null) {

                return null;

            }

            if(rs.next()) {

            User user = new User();

            user.setUsername(rs.getString("username"));

            user.setPassword(rs.getString("password"));

            user.setAge(rs.getInt("age"));

            user.setGender(rs.getString("gender"));

            

            

            return user;

        } else {

            return null;

        }

        } catch (Exception e) {

            throw new RuntimeException(e);

        }finally {

            //關閉資源,倒關

            try {

            if(rs != null) rs.close();

            if(pstmt != null) pstmt.close();

            if(con != null) con.close();  //必須要關

            } catch (Exception e) {

            }

        }

    }

}

 

開始進行測試   

這時候我們去資料庫中檢視:    

其中驗證碼我簡單使用的一個類引入的。 

資料引導: MySQL官方文件

相關文章