初識JDBC 一.JDBC概念 jdbc 英文全稱:java database connectivity ,是java訪問資料庫的一套規範,通俗可以理解為,java為連接資料庫提供的一套類和介面 jdbc與資料庫驅動的關係圖: 二.jdbc簡單使用 使用流程:(在使用之前需要將驅動的jar導入進去) ...
初識JDBC
一.JDBC概念
jdbc 英文全稱:java database connectivity ,是java訪問資料庫的一套規範,通俗可以理解為,java為連接資料庫提供的一套類和介面
jdbc與資料庫驅動的關係圖:
二.jdbc簡單使用
使用流程:(在使用之前需要將驅動的jar導入進去)
①:註冊驅動
②:連接資料庫
③:獲得sql語句的執行平臺
④:執行sql語句
⑤:處理結果
⑥:釋放資源
執行流程圖:
代碼實現(數據增刪改操作):
1 public class Demo13 { 2 public static void main(String[] args)throws Exception { 3 //1.註冊驅動 4 /* 5 * 因為查看Driver源碼發現這個類靜態代碼塊中已經註冊了驅動,我們也就沒必要二次註冊 6 * 註意:jdk1.6以後也可以省略註冊驅動這一步,不寫系統自動註冊 7 * 貼上源碼: 8 * static { 9 * try { 10 * java.sql.DriverManager.registerDriver(new Driver()); 11 * } catch (SQLException E) { 12 * throw new RuntimeException("Can't register driver!"); 13 * } 14 * } 15 * 16 * 17 */ 18 //DriverManager.registerDriver(new Driver()); 19 Class.forName("com.mysql.jdbc.Driver"); 20 21 22 //2.連接資料庫 23 /* 24 * 參數一: 連接ip port 資料庫名稱 固定格式 25 * 參數二:資料庫用戶名 26 * 參數三:資料庫密碼 27 */ 28 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root"); 29 //3.獲得sql語句執行平臺 30 Statement stat= con.createStatement(); 31 //4.執行sql語句 32 /* 33 * executeUpdate()方法是用來執行增刪改語句的 34 * 參數是sql語句 35 * 返回值是個int類型的,執行成功幾條語句 36 */ 37 int result= stat.executeUpdate("insert into car values(null,'寶馬')"); 38 //5.處理結果 39 /* 40 * 在這裡結果的處理其實就是需要看業務邏輯了,一般是個判斷這條語句執行成功了沒有 41 */ 42 if(result>0){ 43 System.out.println("執行成功"); 44 }else{ 45 System.out.println("執行失敗"); 46 } 47 //6.釋放資源 48 stat.close(); 49 con.close(); 50 } 51 52 }
下麵來研究查詢操作的代碼:
1 public class Demo03JDBC { 2 public static void main(String[] args) throws ClassNotFoundException, SQLException { 3 // 1:註冊驅動 4 Class.forName("com.mysql.jdbc.Driver"); 5 // 2:獲取和伺服器的連接 6 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day04db", "root", "123"); 7 // 3:向伺服器發送sql指令 8 // 3.1 獲取Statement介面的實現類對象 9 Statement stat = conn.createStatement(); 10 // 3.2 執行sql (查詢數據) 11 ResultSet rs = stat.executeQuery("select * from product"); 12 13 // 4:處理返回的結果集(知道列名和列的類型) 14 /* 15 while (rs.next()) {// 判斷有沒有下一行數據 16 int cid = rs.getInt("cid"); // 取出cid列 17 String cname = rs.getString("cname"); // 取出came列 18 System.out.println(cid + "\t" + cname); 19 } 20 */ 21 //處理返回的結果集(不知道列名,知道列的類型):通過列的索引來獲取 22 /* 23 while (rs.next()) {// 判斷有沒有下一行數據 24 int cid = rs.getInt(1); // 取出第一列 25 String cname = rs.getString(2); // 取出第二列 26 System.out.println(cid + "\t" + cname); 27 } 28 */ 29 //處理返回的結果集(不知道列名,不知道列的類型):通過列的索引來獲取 30 /* 31 while (rs.next()) {// 判斷有沒有下一行數據 32 Object obj1 = rs.getObject(1); 33 Object obj2 = rs.getObject(2); 34 System.out.println(obj1 +"\t" + obj2); 35 } 36 */ 37 //處理返回的結果集(不知道列名,不知道列的類型,不知道多少列):通過列的索引來獲取 38 ResultSetMetaData metaData = rs.getMetaData(); //獲取表的原始數據 39 //獲取列數 40 int count = metaData.getColumnCount(); 41 while(rs.next()){ //13次 42 for (int i = 1; i <=count; i++) { //4次 43 Object obj = rs.getObject(i); 44 System.out.print(obj+"\t"); 45 } 46 System.out.println(); 47 } 48 49 // 5:釋放資源 50 rs.close(); 51 stat.close(); 52 conn.close(); 53 } 54 }
簡單封裝的jdbc工具類:(主要是體會思想)
1 /* 2 * 此文件用於封裝JDBC的常用功能: 3 * 4 * 1:封裝驅動的註冊 5 * 2:封裝資料庫的連接 6 * 3:封裝資源的釋放 7 * 8 * JDK1.6之後,Java會自動註冊驅動 9 */ 10 public class MyJDBCUtils { 11 private static String classDriverName = null; 12 private static String url = null; 13 private static String username = null; 14 private static String password = null; 15 // 1:封裝驅動的註冊 16 /* 17 * 由於驅動的註冊只需要執行一次,所以可以將該代碼封裝在靜態代碼塊 18 * 由於解析Properties只需要解析一次,所以還是將解析的代碼放在靜態代碼塊 19 */ 20 static { 21 try { 22 //1:創建Properties對象 23 Properties prop = new Properties(); 24 //2:將文件的數據讀取到集合 25 prop.load(new FileInputStream("jdbc.properties")); 26 //3:獲取集合的數據 27 classDriverName = prop.getProperty("driverClassName"); 28 url = prop.getProperty("url"); 29 username = prop.getProperty("username"); 30 password = prop.getProperty("password"); 31 32 33 Class.forName(classDriverName); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 } 38 39 // 2:封裝資料庫的連接 40 public static Connection getConnection() throws SQLException { 41 Connection conn = DriverManager.getConnection(url, username, password); 42 return conn; 43 } 44 45 //封裝方法:處理結果集 46 public static void printResultSet(ResultSet rs) throws SQLException{ 47 ResultSetMetaData metaData = rs.getMetaData(); 48 int count = metaData.getColumnCount(); 49 50 while(rs.next()){ 51 for (int i = 1; i <= count; i++) { 52 Object obj = rs.getObject(i); 53 System.out.print(obj+"\t"); 54 } 55 System.out.println(); 56 } 57 58 } 59 60 61 // 3:封裝資源的釋放 null stat conn 62 public static void closeAll(ResultSet rs, Statement stat, Connection conn) { 63 if (rs != null) { 64 try { 65 rs.close(); 66 } catch (SQLException e) { 67 e.printStackTrace(); 68 } 69 } 70 if (stat != null) { 71 try { 72 stat.close(); 73 } catch (SQLException e) { 74 e.printStackTrace(); 75 } 76 } 77 if (conn != null) { 78 try { 79 conn.close(); 80 } catch (SQLException e) { 81 e.printStackTrace(); 82 } 83 } 84 } 85 }