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