时间:2021-07-01 10:21:17 帮助过:2人阅读
这样在创建连接的时候我可以直接拿到变量的名字去代替很长的字符串,而加载驱动时地方法Class.forName,我们将它声明在静态块中,因为加载数据的同时,加载了驱动
如下面所示:
static{ try { Class.forName(driverclass); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new RuntimeException("加载驱动错误",e); } }
对于创建连接,就是调用DriverManager的getConnection方法,并将对应的用户名,密码放入其中,我们将这个方法直接放到我自己定义的方法中,然后直接调用我的方法便可以创建连接,需要注意的是,方法的返回值是Connection这个对象,很好理解,因为就是要拿到这个连接类型的对象,如下面所示:
public static Connection getConnection() throws SQLException{ Connection conn= DriverManager.getConnection(url,user,password); return conn; }
然后是创建语句对象,发送SQL,当然SQL是这里面唯一特殊的地方,因为SQL要做的事千差万别,所以这个步骤就不用封装了。
最后是关闭连接,就是调用了close()这个方法,如下面所示
public static void close(Connection conn){ if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("关闭连接错误",e); } } }
整体的第一版本的封装如下面所示:
1 package jbbc_day01; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 /** 8 * 用来管理连接 9 * @author jiawenzhe 10 * 11 */ 12 public class DBUtil { 13 private static String driverclass="oracle.jdbc.driver.OracleDriver"; 14 private static String url="jdbc:oracle:thin:losthost:1521:orcl"; 15 private static String user="system"; 16 private static String password="123"; 17 //1、加载驱动 18 static{ 19 try { 20 Class.forName(driverclass); 21 } catch (ClassNotFoundException e) { 22 e.printStackTrace(); 23 throw new RuntimeException("加载驱动错误",e); 24 } 25 } 26 //2、创建连接 27 /* 28 * 如何定义一个能够创建连接的方法 29 * 返回值类型:是否有运算结果,如果有,结果的类型即为返回值类型 30 * 参数列表: 31 * 方法功能中是否有不确定的数据参与运算,如果有,即为参数 32 */ 33 public static Connection getConnection() throws SQLException{ 34 Connection conn= 35 DriverManager.getConnection(url,user,password); 36 return conn; 37 } 38 //3、关闭连接 39 public static void close(Connection conn){ 40 if(conn!=null){ 41 try { 42 conn.close(); 43 } catch (SQLException e) { 44 e.printStackTrace(); 45 throw new RuntimeException("关闭连接错误",e); 46 } 47 } 48 } 49 50 }
这样一个封装就好了,然后在进行SQL操作的时候直接调用这个封装类就可以了,而你只需要写的就是创建你的语句对象,发送你的SQL语句即可
其实版本2与版本一很类似,就是为了去弥补版本1的一个不足之处,就是,当你更换数据库的时候,不同数据库的账号密码是不一样的,这就要对账号密码和IP地址进行修改,我之前将这些以字符串的形式封装在了工具类之中,那就意味着我们每次更换数据库必须对工具类进行修改,这样是很不妥当的,于是提出了一种改进办法就是将这些连接数据放到一个配置文件之中,工具类去读取这个配置文件,我们在修改的时候直接去修改这个配置文件就可以了
在介绍这个版本之前,我前引出一个新类就是Properties,他就是一个能读取文件,并以流的形式去读取配置文件内容然后返回给工具类的
首先我先把配置文件示例出来,其实不用解释,一目了然,如下所示:
jdbc.driverclass=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:localhost:orcl jdbc.user=system jdbc.password=123
前面是键,后面是值,前面的键值是我们自己定义的,就像定义变量名字一样,后面的值就是我们数据库的实际情况,这里我们需要特别注意的是,这个配置文件的后缀名一定要以.properties结尾,因为这样Properties这个类才能读取的到。
这部分的示例如下:
static{ try { //加载属性文件数据 Properties pop=new Properties(); pop.load(DBUtil2.class.getClassLoader().getResourceAsStream("db.properties")); url=pop.getProperty("jdbc.url"); driverclass=pop.getProperty("jdbc.driverclass"); user=pop.getProperty("jdbc.user"); password=pop.getProperty("jdbc.password"); Class.forName(driverclass); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new RuntimeException("加载驱动错误",e); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
load()这个方法就是去读取也可以认为是加载配置文件的,这个整整一句话记住就行,不用去深究其意义,而getProperty()就是通过键获得到了对应的值,很像键值对集合获取值得形式
整体代码如下:
1 package jbbc_day01; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.sql.Connection; 7 import java.sql.DriverManager; 8 import java.sql.SQLException; 9 import java.util.Properties; 10 11 /** 12 * 用来管理连接 13 * 数据库连接信息,保存在属性文件中 14 * @author jiawenzhe 15 * 16 */ 17 public class DBUtil2 { 18 private static String driverclass; 19 private static String url; 20 private static String user; 21 private static String password; 22 //1、加载驱动 23 static{ 24 try { 25 //加载属性文件数据 26 Properties pop=new Properties(); 27 pop.load(DBUtil2.class.getClassLoader().getResourceAsStream("db.properties")); 28 url=pop.getProperty("jdbc.url"); 29 driverclass=pop.getProperty("jdbc.driverclass"); 30 user=pop.getProperty("jdbc.user"); 31 password=pop.getProperty("jdbc.password"); 32 Class.forName(driverclass); 33 } catch (ClassNotFoundException e) { 34 e.printStackTrace(); 35 throw new RuntimeException("加载驱动错误",e); 36 } catch (IOException e) { 37 // TODO Auto-generated catch block 38 e.printStackTrace(); 39 } 40 } 41 //2、创建连接 42 /* 43 * 如何定义一个能够创建连接的方法 44 * 返回值类型:是否有运算结果,如果有,结果的类型即为返回值类型 45 * 参数列表: 46 * 方法功能中是否有不确定的数据参与运算,如果有,即为参数 47 */ 48 public static Connection getConnection() throws SQLException{ 49 Connection conn= 50 DriverManager.getConnection(url,user,password); 51 return conn; 52 } 53 //3、关闭连接 54 public static void close(Connection conn){ 55 if(conn!=null){ 56 try { 57 conn.close(); 58 } catch (SQLException e) { 59 e.printStackTrace(); 60 throw new RuntimeException("关闭连接错误",e); 61 } 62 } 63 } 64 65 }
未完待续!
Java——JDBC小结(2)
标签: