老师如是说:有一个规律永远不变,就是量变引起质变,什么时候你吃的盐比我吃的米多,那你就可以教我了……
1.JDBC是一个标准,是J2EE的一部分;讲tcp时就提到了分层思想,jdbc也是分层,即上层只需要和紧挨着的下层通讯,方便扩展。不管开奥拓车还是开奥迪车方向盘都在屁股前边,档都在右边。不过jdbc还需要写select语句等,而hibernate完全实现了数据库底层,而且屏蔽了细小差别;现在的EJB也实现了某些功能。
2.TestJDBC
若是连接字符串或者某些方法忘了(但是有些东西不能忘,比如System.out.println),就注明平时用多了Eclipse,若是查查还能知道……
1 import java.sql.*; 2 3 public class TestJDBC { 4 5 public static void main(String[] args) { 6 ResultSet rs = null; 7 Statement stmt = null; 8 Connection conn = null; 9 /* 10 * 一定要加上try catch finally,不要throws 11 * 因为若在遍历过程中出问题,那么下面的关闭就一直执行不了 12 * 服务器会越来越卡,最后死掉 13 */ 14 try { 15 Class.forName("oracle.jdbc.driver.OracleDriver"); 16 //new oracle.jdbc.driver.OracleDriver(); 17 conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT", 18 19 "scott", "tiger"); 20 stmt = conn.createStatement(); 21 //结果集就像游标,不过不像数据库,第一条没指向第一条,像iterator 22 rs = stmt.executeQuery("select * from dept"); 23 while(rs.next()) { 24 System.out.println(rs.getString("deptno")); 25 //和实际字段类型无关,只要能转换为int就可以 26 System.out.println(rs.getInt("deptno")); 27 } 28 } catch (ClassNotFoundException e) { 29 e.printStackTrace(); 30 /* 31 * 实际上要用log4j把异常记录在日志里 32 */ 33 } catch (SQLException e) { 34 e.printStackTrace(); 35 } finally { 36 /* 37 * 要把rs,stmt,conn声明在大try外边 38 * 否则在这就不认识了 39 */ 40 try { 41 /* 42 * 不加try catch会出错,因为close也会出错. 43 * 如果rs没有初始化,这直接close那么一定会报错 44 */ 45 if(rs != null) { 46 rs.close(); 47 /* 48 * 查过api后会发现close后会直接设置为null 49 * 方便gc回收 50 * 写下面的是为了展现良好的编程风格 51 */ 52 rs = null; 53 } 54 if(stmt != null) { 55 stmt.close(); 56 stmt = null; 57 } 58 if(conn != null) { 59 conn.close(); 60 conn = null; 61 } 62 } catch (IOException e) { 63 e.printStackTrace(); 64 } 65 } 66 } 67 68 } 69 70 View Code