1.准備工作
1》

新建一個配置文件,名為jdbc.properties將其放入src中
2》在項目中導入jdbc驅動,注意連接不同的數據庫,所用到的驅動是不一樣的,這些在網上都能找到
具體導入jar的方法,請參照http://blog.csdn.net/mazhaojuan/article/details/21403717
2、代碼
1 import java.io.InputStream; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 import java.util.Properties; 8 9 public class Main { 10 public static void main(String[] args) { 11 DBUtil dbUtil = new DBUtil(); 12 dbUtil.R("select * from table"); 13 } 14 } 15 16 class DBUtil{ 17 /** 18 * 得到數據庫連接 19 * @return 20 * @throws Exception 21 */ 22 public Connection getConnection() throws Exception{ 23 //1.創建配置文件並得到對象輸入流 24 InputStream is = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties"); 25 //2.創建propetities 26 Properties jdbc = new Properties(); 27 jdbc.load(is); 28 //3. 通過key-value 的方式得到對應的值 29 String driver = jdbc.getProperty("driver"); 30 String url = jdbc.getProperty("url"); 31 String user = jdbc.getProperty("user"); 32 String password = jdbc.getProperty("password"); 33 //4.加載運行時類對象 34 Class.forName(driver); 35 //5通過DriverManager得到連接 36 Connection connection = DriverManager.getConnection(url,user,password); 37 return connection; 38 39 } 40 /** 41 * 釋放資源的方法 42 * @param connection 43 * @param statement 44 * @param resultSet 45 */ 46 public void release(Connection connection,Statement statement,ResultSet resultSet){ 47 try { 48 if(resultSet!=null){ 49 resultSet.close(); 50 } 51 } catch (SQLException e) { 52 e.printStackTrace(); 53 } 54 try { 55 if(statement!=null){ 56 statement.close(); 57 } 58 } catch (SQLException e) { 59 e.printStackTrace(); 60 } 61 try { 62 if(connection!=null){ 63 connection.close(); 64 } 65 } catch (SQLException e) { 66 e.printStackTrace(); 67 } 68 69 } 70 /** 71 * 查詢數據庫的方法 72 * @param sql 字符串,要執行的sql語句 如果其中有變量的話,就用 ‘"+變量+"’ 73 */ 74 public void R(String sql){ 75 Connection connection = null; 76 Statement statement = null; 77 ResultSet resultSet = null; 78 try { 79 connection = getConnection(); 80 statement = connection.createStatement(); 81 resultSet = statement.executeQuery(sql); 82 while(resultSet.next()!=false){ 83 //這里可以執行一些其他的操作 84 System.out.println(resultSet.getString(1)); 85 } 86 } catch (Exception e) { 87 e.printStackTrace(); 88 }finally { 89 release(connection, statement, resultSet); 90 } 91 } 92 /** 93 * 數據庫記錄增刪改的方法 94 * @param sql 字符串,要執行的sql語句 如果其中有變量的話,就用 ‘"+變量+"’ 95 */ 96 public void CUD(String sql){ 97 Connection connection = null; 98 Statement statement = null; 99 int result = 0; 100 try { 101 connection = getConnection(); 102 statement = connection.createStatement(); 103 result = statement.executeUpdate(sql); 104 105 //這里可以根據返回結果(影響記錄的條數) 進行判斷,該語句是否執行成功 106 System.out.println(result); 107 } catch (Exception e) { 108 e.printStackTrace(); 109 }finally { 110 release(connection, statement, null); 111 } 112 } 113 114 }
3.預處理,其中上面的連接數據庫及釋放資源的方法不動
代碼如下:
1 import java.io.InputStream; 2 import java.sql.Connection; 3 import java.sql.DatabaseMetaData; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.ResultSetMetaData; 8 import java.sql.SQLException; 9 import java.sql.Statement; 10 import java.util.Properties; 11 12 public class Main { 13 public static void main(String[] args) { 14 15 } 16 } 17 18 class DBUtil{ 19 /** 20 * 得到數據庫連接 21 * @return 22 * @throws Exception 23 */ 24 public Connection getConnection() throws Exception{ 25 //1.創建配置文件並得到對象輸入流 26 InputStream is = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties.txt"); 27 //2.創建propetities 28 Properties jdbc = new Properties(); 29 jdbc.load(is); 30 //3. 通過key-value 的方式得到對應的值 31 String driver = jdbc.getProperty("driver"); 32 String url = jdbc.getProperty("url"); 33 String user = jdbc.getProperty("user"); 34 String password = jdbc.getProperty("password"); 35 //4.加載運行時類對象 36 Class.forName(driver); 37 //5通過DriverManager得到連接 38 Connection connection = DriverManager.getConnection(url,user,password); 39 return connection; 40 41 } 42 /** 43 * 釋放資源的方法 44 * @param connection 45 * @param statement 46 * @param resultSet 47 */ 48 public void release(Connection connection,Statement statement,ResultSet resultSet){ 49 try { 50 if(resultSet!=null){ 51 resultSet.close(); 52 } 53 } catch (SQLException e) { 54 e.printStackTrace(); 55 } 56 try { 57 if(statement!=null){ 58 statement.close(); 59 } 60 } catch (Exception e) { 61 // TODO: handle exception 62 } 63 try{ 64 if(connection!=null){ 65 connection.close(); 66 } 67 } catch (SQLException e) { 68 e.printStackTrace(); 69 } 70 71 } 72 /** 73 * 查詢數據庫的方法 74 * @param sql 字符串,要執行的sql語句 如果其中有變量的話,就用 ‘"+變量+"’ 75 */ 76 public void R(String sql, Object ...args){ 77 Connection connection = null; 78 PreparedStatement preparedStatement = null; 79 ResultSet resultSet = null; 80 try { 81 connection = getConnection(); 82 preparedStatement = connection.prepareStatement(sql); 83 for (int i = 0; i < args.length; i++) { 84 preparedStatement.setObject(i+1, args[i]); 85 } 86 resultSet = preparedStatement.executeQuery(); 87 ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); 88 int columnCount = resultSetMetaData.getColumnCount(); 89 while(resultSet.next()!=false){ 90 //這里可以執行一些其他的操作 91 for (int i = 1; i <= columnCount; i++) { 92 System.out.println(resultSet.getString(i)); 93 } 94 } 95 } catch (Exception e) { 96 e.printStackTrace(); 97 }finally { 98 release(connection, preparedStatement, resultSet); 99 } 100 } 101 /** 102 * 數據庫記錄增刪改的方法 103 * @param sql 字符串,要執行的sql語句 如果其中有變量的話,就用 ‘"+變量+"’ 104 */ 105 public void CUD(String sql, Object ...args){ 106 Connection connection = null; 107 PreparedStatement preparedStatement = null; 108 int result = 0; 109 try { 110 connection = getConnection(); 111 preparedStatement = connection.prepareStatement(sql); 112 for (int i = 0; i < args.length; i++) { 113 preparedStatement.setObject(i+1, args[i]); 114 } 115 result = preparedStatement.executeUpdate(); 116 //這里可以根據返回結果(影響記錄的條數)進行判斷,該語句是否執行成功 117 System.out.println(result); 118 } catch (Exception e) { 119 e.printStackTrace(); 120 }finally { 121 release(connection, preparedStatement, null); 122 } 123 } 124 125 }
在預處理代碼第87行使用了元數據獲取集合中的列的數量 有關數據庫 元數據,請參考文檔上的相關接口:
DatabaseMetaData
ResultSetMetaData
注:本文為原創,如需轉載請注明出處:http://www.cnblogs.com/zhuchenglin/p/7919803.html
