MySQL for Java

      在〈MySQL for Java〉中尚無留言

下載驅動

驅動程式有分5.1及8.0的版本, 分別到如下網址下載. 若需選取版本, 則選取 Platform independent

5.1 https://dev.mysql.com/downloads/connector/j/5.1.html
8.0 https://dev.mysql.com/downloads/connector/j/

下載完成後, 解壓縮.

NetBeans 加入 jar Library

在 NetBeans中, 開啟新專案, 然後於NetBeans的專案名稱下的 Libraries按右鍵/Add JAR/Forder, 再選取剛剛解壓縮的.jar檔
(mysql-connector-java-5.1.49.jar,
mysql-connector-java-5.1.49-bin.jar,
mysql-connector-java-8.0.21.jar 都可以)

java_mysql

Java代碼載入驅動程式

如果是使用 5.1的驅動, 使用

try {
    Class.forName("com.mysql.jdbc.Driver");
} 
catch (ClassNotFoundException ex) {}

如果是8.0的驅動, 需使用

try {
    Class.forName("com.mysql.cj.jdbc.Driver");
} 
catch (ClassNotFoundException ex) {}

請注意, 前後都要用try-catch包含, 抓取 ClassNotFoundException 例外

建立連線

在NetBeans12中, 可能有些bug, 無法用Alt+Enter自動輸入java.sql套件. 所以要手動自已打上去

import java.sql.*;

5.1的驅動, 連線方式如下

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/cloud?useSSL=false", "帳號","密碼");

8.0 的驅動, 連線字串要多加 serverTimezone=UTC

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/cloud?useSSL=false&serverTimezone=UTC", "帳號","密碼");

沒有加serverTimezone=UTC, 會出現如下錯誤

The server time zone value '�x�_�зǮɶ�' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support

連線補充說明

在Android中, 連線的建立及其他的SQL語法操作, 都必需在新的執行緒上執行.
如果是在Java上, 若操作時間過久, 也要考慮使用新的執行緒.

建立命令物件

Statement為命令物件, 執行後, 會產生ResultSet資料集.

資料集的取得, 可以使用 rs.getString(欄位數) or rs.getString(欄位名)
如果是欄位數, 記得是從 1 開始. 如果是欄位名, 需加 “”

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from 旅客資料");
while (rs.next()) {
    System.out.printf("%s, %s, %s\n", 
    rs.getString(1), 
    rs.getString("護照"), 
    rs.getString(3));
}

底下是使用5.1驅動的完整代碼

package mysqltest51;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.sql.*;
public class MySQLTest51 {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn=DriverManager.getConnection(
                "jdbc:mysql://localhost/travel?useSSL=false", 
                "帳號","密碼");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from 旅客資料");
            while (rs.next()) {
                System.out.printf("%s, %s, %s\n", 
                        rs.getString(1), 
                        rs.getString("護照"), 
                        rs.getString(3));
            }
        }
        catch (ClassNotFoundException ex) {}
        catch(SQLException e){
            System.out.println(e.getMessage());
        }
    }
}

底下是使用 8.0驅動的完整代碼

package mysqltest80;
import java.sql.*;
public class MySQLTest80 {
    public static void main(String[] args) {
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn=DriverManager.getConnection(
                "jdbc:mysql://localhost/travel?useSSL=false&serverTimezone=UTC", 
                "帳號","密碼");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from 旅客資料");
            while (rs.next()) {
                System.out.printf("%s, %s, %s\n", 
                        rs.getString(1), 
                        rs.getString("護照"), 
                        rs.getString(3));
            }
        }
        catch (ClassNotFoundException ex) {}
        catch(SQLException e){
            System.out.println(e.getMessage());
        }
    }
    
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *