[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();
}
}
留言
張貼留言