package sns.team6.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * 連結資料庫的工具類 * * @author 徐銳 * */ public class DBHelper { // mysql驅動路徑 private static final String driver = "com.mysql.jdbc.Driver"; // 資料庫的串連路徑 private static final String url = "jdbc:mysql://localhost:3306/snsteam6"; /** * 串連資料庫的對象 * * @return */ public static Connection getConnection() { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, "root", "root"); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 關閉開啟的資源 * * @param conn * @param pst * @param rst */ public static void closeInfo(Connection conn, PreparedStatement pst, ResultSet rst) { try { if (rst != null) { rst.close(); rst = null; } if (pst != null) { pst.close(); pst = null; } if (conn != null) { conn.close(); conn = null; } } catch (Exception e) { e.printStackTrace(); } } /** * 擷取結果集對象 * * @param sql * @param params * @return */ public static ResultSet resultSet(String sql, Object[] params) { // 資料庫的連結化物件 Connection conn = null; // 資料庫的操作對象 PreparedStatement pst = null; // 結果對象 ResultSet rst = null; try { // 資料庫的連結化物件 conn = DBHelper.getConnection(); // 資料庫的操作對象 pst = conn.prepareStatement(sql); // 判斷是否有參數 if (params != null && params.length > 0) { for (int i = 0; i < params.length; i++) { // 給操作對象賦值 pst.setObject(i + 1, params[i]); } } // 擷取結果對象 rst = pst.executeQuery(); } catch (SQLException e) { rst = null; e.printStackTrace(); } return rst; } /** * 擷取添加的結果對象 * * @param sql * @param params * @return */ public static boolean result(String sql, Object[] params) { boolean flag = false; // 資料庫的連結化物件 Connection conn = null; // 資料庫的操作對象 PreparedStatement pst = null; try { // 資料庫的連結化物件 conn = DBHelper.getConnection(); // 資料庫的操作對象 pst = conn.prepareStatement(sql); // 判斷是否有參數 if (params != null && params.length > 0) { for (int i = 0; i < params.length; i++) { // 給操作對象賦值 pst.setObject(i + 1, params[i]); } } // 擷取結果對象,是int類型,表示執行成功的行數 int row = pst.executeUpdate(); if (row > 0) { // 如果大於0,表示執行成功 flag = true; } } catch (SQLException e) { flag = false; e.printStackTrace(); } return flag; } } 例子 import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Connection; import java.sql.Statement; public class MysqlDemo { public static void main(String[] args) throws Exception { Connection conn = null; String sql; // MySQL的JDBC URL編寫方式:jdbc:mysql://主機名稱:串連連接埠/資料庫的名稱?參數=值 // 避免中文亂碼要指定useUnicode和characterEncoding // 執行資料庫操作之前要在資料庫管理系統上建立一個資料庫,名字自己定, // 下面語句之前就要先建立javademo資料庫 String url = "jdbc:mysql://localhost:3306/javademo?" + "user=root&password=root&useUnicode=true&characterEncoding=UTF8"; try { // 之所以要使用下面這條語句,是因為要使用MySQL的驅動,所以我們要把它驅動起來, // 可以通過Class.forName把它載入進去,也可以通過初始化來驅動起來,下面三種形式都可以 Class.forName("com.mysql.jdbc.Driver");// 動態載入mysql驅動 // or: // com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver(); // or: // new com.mysql.jdbc.Driver(); System.out.println("成功載入MySQL驅動程式"); // 一個Connection代表一個資料庫連接 conn = DriverManager.getConnection(url); // Statement裡面帶有很多方法,比如executeUpdate可以實現插入,更新和刪除等 Statement stmt = conn.createStatement(); sql = "create table student(NO char(20),name varchar(20),primary key(NO))"; int result = stmt.executeUpdate(sql);// executeUpdate語句會返回一個受影響的行數,如果返回-1就沒有成功 if (result != -1) { System.out.println("建立資料表成功"); sql = "insert into student(NO,name) values('2012001','陶偉基')"; result = stmt.executeUpdate(sql); sql = "insert into student(NO,name) values('2012002','周小俊')"; result = stmt.executeUpdate(sql); sql = "select * from student"; ResultSet rs = stmt.executeQuery(sql);// executeQuery會返回結果的集合,否則返回空值 System.out.println("學號\t姓名"); while (rs.next()) { System.out .println(rs.getString(1) + "\t" + rs.getString(2));// 入如果返回的是int類型可以用getInt() } } } catch (SQLException e) { System.out.println("MySQL操作錯誤"); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { conn.close(); } } } |