首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Java 連接 MySQL 實現增刪改查 (JDBC) 完整教程

     編輯:MySQL 綜合教學

Java 連接 MySQL 實現增刪改查 (JDBC) 完整教程

本文通過一個完整的 Maven 風格 Java 專案,演示如何使用 JDBC 連接 MySQL,實現數據插入(記錄系統名與時間)、查詢並映射到集合對象,涵蓋驅動加載、連接池雛形、PreparedStatement 防注入、資源關閉等最佳實踐。

一、 專案依賴準備

  1. 下載 mysql-connector-java-5.1.xx.jar(或更新版)。
  2. 在專案建立 lib 文件夾,放入 JAR 包。
  3. IDE 中右鍵專案 → Properties → Java Build Path → Libraries → Add JARs → 選中該 JAR → Apply。
資料表結構
運行效果
專案屬性
添加JAR

二、 核心代碼實現

1. 引入必要包

import java.sql.*;
import java.text.*;
import java.util.*;
import java.util.Date; // 消除與 java.sql.Date 衝突

2. 數據庫連接工具類

class Dbcon {
    public Connection getCon() {
        Connection con = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 連接串參數:useUnicode=true&characterEncoding=utf8 防亂碼
            String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true";
            String user = "root";
            String password = "root";
            con = DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return con;
    }
}

3. 主程序:插入與查詢

public class JavaDbTest {
    public static void main(String[] args) {
        Connection con = new Dbcon().getCon();
        String sql = null;

        // 獲取系統名與當前時間(時分秒)
        String username = System.getProperty("os.name");
        String classString = new SimpleDateFormat("HHmmss").format(new Date(System.currentTimeMillis()));

        // 插入操作
        sql = "INSERT INTO testtable(username, class) VALUES ('" + username + "', '" + classString + "')";
        try {
            con.createStatement().execute(sql);
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 查詢操作
        sql = "SELECT * FROM testtable";
        ResultSet rs = null;
        // 集合定義在 try 外部,保證作用域
        ArrayList idList = new ArrayList<>();
        ArrayList userList = new ArrayList<>();
        ArrayList classList = new ArrayList<>();

        try {
            rs = con.prepareStatement(sql).executeQuery();
            while (rs.next()) {
                idList.add(rs.getInt("id"));
                userList.add(rs.getString("username"));
                // class 列雖存數字但類型為 VARCHAR,需先取 String 再轉 int
                classList.add(Integer.parseInt(rs.getString("class")));
            }
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 輸出結果
        System.out.println("id username class");
        for (int i = 0; i < idList.size(); i++) {
            System.out.println(idList.get(i) + " " + userList.get(i) + " " + classList.get(i));
        }
    }
}

三、 完整可運行代碼(單文件版)

package test;
import java.sql.*;
import java.text.*;
import java.util.*;
import java.util.Date;

class Dbcon {
    public Connection getCon() {
        Connection con = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true";
            String user = "root";
            String password = "root";
            con = DriverManager.getConnection(url, user, password);
        } catch (Exception e) { e.printStackTrace(); }
        return con;
    }
}

public class JavaDbTest {
    public static void main(String[] args) {
        Connection con = new Dbcon().getCon();
        String sql = null;
        String username = System.getProperty("os.name");
        String classString = new SimpleDateFormat("HHmmss").format(new Date(System.currentTimeMillis()));
        sql = "INSERT INTO testtable(username, class) VALUES ('" + username + "', '" + classString + "')";
        try { con.createStatement().execute(sql); con.close(); } catch (Exception e) { e.printStackTrace(); }

        sql = "SELECT * FROM testtable";
        ResultSet rs = null;
        ArrayList idList = new ArrayList<>();
        ArrayList userList = new ArrayList<>();
        ArrayList classList = new ArrayList<>();
        try {
            rs = con.prepareStatement(sql).executeQuery();
            while (rs.next()) {
                idList.add(rs.getInt("id"));
                userList.add(rs.getString("username"));
                classList.add(Integer.parseInt(rs.getString("class")));
            }
            con.close();
        } catch (Exception e) { e.printStackTrace(); }

        System.out.println("id username class");
        for (int i = 0; i < idList.size(); i++) {
            System.out.println(idList.get(i) + " " + userList.get(i) + " " + classList.get(i));
        }
    }
}

四、 關鍵點總結

  • 防注入:生產環境務必使用 PreparedStatement 綁定參數,而非字符串拼接。
  • 資源管理:Connection、Statement、ResultSet 必須在 finally 或 try-with-resources 中關閉。
  • 字符集:連接串加 useUnicode=true&characterEncoding=utf8 避免中文亂碼。
  • 類型轉換:VARCHAR 存數字讀取時需 Integer.parseInt(rs.getString(...)),不可直接 getInt。
  • System 類:System.getProperty("os.name") 獲取操作系統名,System.currentTimeMillis() 獲取時間戳。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved