[Java] JDBC 使用 MySQL 筆記

雖然學 Hibernate 後可能就不太會重寫 JDBC 這些繁雜的 code 還是記錄一下

如果 MySQL 的 database 叫 mydb,帳號root,密碼abc1234,對表格 mytable 做 insert 、update 和 select 動作:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcSample {

	String driverName = "com.sql.cj.jdbc.Driver";	// Java6之前用com.sql.jdbc.Driver
	String connectionString = "jdbc:mysql://localhost:3306/mydb?"
    + "user=root&password=abc1234&useUnicode=true&characterEncoding=utf-8";

	try {
		Class.forName(driverName);
		Connection conn = DriverManager.getConnection(connectionString);
				//獲得連線
		Statement stat = conn.createStatement();
		String insertString = "insert into mytable(col1, col2) values(data1, 'data2')";
		int count1 = stat.executeUpdate(insertString);
		//對 MySQL 執行,增加一筆col1=data1、col2='data2'的資料到表格mytable中
		//同時回傳一個整數給count表示此動作影響了幾個row

		String updateString ="update mytable set col1=data1 where col2='data2'";
		stat.executeUpdate(updateString);
		//對 MySQL 執行修改 col2 是 'data2' 的資料,使col1皆等於data1,一樣有回傳值

		String selectString = "select * from mytable";
		ResultSet result = stat.executeQuery(selectString);
		while(result.next()){
			System.out.println(
				result.getInt("col1") 
				+ " , " 
				+ result.getString("col2"));
		}
		//對 MySQL 執行查詢將結果給 ResultSet ,利用 .next() 方法得每一個 row
		//得到每一個 row 後再視資料決定用 getInt() 還是 getString() 取 column 值
		//當沒有資料時 .next() 會回傳 false 而跳出

		stat.close();		//關閉statment
		conn.close();		//關閉連線
	} catch (ClassNotFoundException classEx) {
		classEx.printStackTrace();
	} catch (SQLException sqlEx) {
		sqlEx.printStackTrace();
	}
}

另外新增資料還有一個用 preparedStatement 的方法:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JdbcPreparedSample {
	
	String connectionString = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8";
	String user = "root";
	String password = "abc1234";

	try {
		Class.forName("com.sql.cj.jdbc.Driver");
		Connection conn = DriverManager.getConnection(connectionString, user, password);
		//另一個開啓連線寫法

		PreparedStatment pprStat = conn.preparedStatement(
			"insert into mytable(col1, col2) values(?, ?)");
							//先用 ? 標記
		pprStat.setInt(1, data1);		//再依位置輸入好資料
		pprStat.setString(2,'data2');		//注意從1開始

		pprStat.executeUpdate();		//把以上資料給 MySQL insert
    
		pprStat.close();
		conn.close();
	} catch (ClassNotFoundException classEx) {
		classEx.printStackTrace();
	} catch (SQLException sqlEx) {
		sqlEx.printStackTrace();
	}
}

留言