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



import java.sql.*;
import java.text.*;
import java.util.*;
import java.util.Date; // 消除與 java.sql.Date 衝突
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;
}
}
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 避免中文亂碼。Integer.parseInt(rs.getString(...)),不可直接 getInt。System.getProperty("os.name") 獲取操作系統名,System.currentTimeMillis() 獲取時間戳。