csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库
上一篇描述了对MySQL数据库的简单操作,下面来看一下开发中应该如何灵活应用。
因为jdbc对数据库的驱动加载、连接获取、释放资源的代码都是相同的,为了提高代码的复用性,我们可以写一个工具类,将数据库驱动加载、获取连接、资源释放的代码封装起来。同时,为了提高工具类的灵活性,可以将数据库的驱动、url、用户名、密码等信息以键值对的形式存放在properties文件中,工具类初始化时从配置文件中读取所要连接数据库的信息。当需要更改连接的数据库时,只需要更改配置文件即可,而不必改写工具类的代码。
下面是工具类代码的实现:
1 package com.cream.ice.jdbc; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.sql.Connection; 6 import java.sql.DriverManager; 7 import java.sql.ResultSet; 8 import java.sql.SQLException; 9 import java.sql.Statement;10 import java.util.Properties;11 12 public class JdbcUtils {13 14 private static String driverName;15 private static String url;16 private static String user;17 private static String passWord;18 19 /*20 * 静态代码块,类初始化时加载数据库驱动21 */22 static {23 try {24 // 加载dbinfo.properties配置文件25 InputStream in = JdbcUtils.class.getClassLoader()26 .getResourceAsStream("dbinfo.properties");27 Properties properties = new Properties();28 properties.load(in);29 30 // 获取驱动名称、url、用户名以及密码31 driverName = properties.getProperty("driverName");32 url = properties.getProperty("url");33 user = properties.getProperty("user");34 password = properties.getProperty("password");35 36 // 加载驱动37 Class.forName(driverName);38 39 } catch (IOException e) {40 e.printStackTrace();41 } catch (ClassNotFoundException e) {42 e.printStackTrace();43 }44 }45 46 /*47 * 获取连接48 */49 public static Connection getConnection() throws SQLException {50 51 return DriverManager.getConnection(url, user, password);52 53 }54 55 /*56 * 释放资源57 */58 public static void releaseResources(ResultSet resultSet,59 Statement statement, Connection connection) {60 61 try {62 if (resultSet != null)63 resultSet.close();64 } catch (SQLException e) {65 e.printStackTrace();66 } finally {67 resultSet = null;68 try {69 if (statement != null)70 statement.close();71 } catch (SQLException e) {72 e.printStackTrace();73 } finally {74 statement = null;75 try {76 if (connection != null)77 connection.close();78 } catch (SQLException e) {79 e.printStackTrace();80 } finally {81 connection = null;82 }83 }84 }85 86 }87 88 }
这里dbinfo.properties文件中信息如下,读者可自行更改:
1 driverName=com.mysql.jdbc.Driver2 url=jdbc:mysql://localhost:3306/jdbc3 user=root4 password=123456
这里我们来举个例子使用工具类。我们写一个类JdbcCURD实现对特定数据库的增删改查操作,并在main函数中使用。
JdbcCURD.java代码如下:
1 package com.cream.ice.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 public class JdbcCURD { 9 10 private Connection connection;11 private Statement statement;12 private ResultSet resultSet;13 14 //更新操作15 public void update(String sql) {16 try {17 connection = JdbcUtils.getConnection();18 statement = connection.createStatement();19 //可执行创建、修改、删除表,添加、删除、修改元组以及查询sql语句20 statement.execute(sql);21 } catch (SQLException e) {22 e.printStackTrace();23 } finally {24 JdbcUtils.releaseResources(resultSet, statement, connection);25 }26 }27 28 //查询操作29 public void Query(String sql) {30 try {31 connection = JdbcUtils.getConnection();32 statement = connection.createStatement();33 resultSet = statement.executeQuery(sql);34 35 while(resultSet.next()){36 System.out.println("name:"+resultSet.getString("name"));37 System.out.println("id:"+resultSet.getString("Tid"));38 }39 40 } catch (SQLException e) {41 e.printStackTrace();42 } finally {43 JdbcUtils.releaseResources(resultSet, statement, connection);44 }45 }46 47 //添加操作48 public void addElement(String sql) {49 update(sql);50 }51 52 //删除操作53 public void removeElement(String sql) {54 update(sql);55 }56 57 //创建一个表58 public void createTable(String sql){59 update(sql);60 }61 62 //删除一个表63 public void dropTable(String sql){64 update(sql);65 }66 67 }
我们来写一个main函数来测试:
1 package com.cream.ice.jdbc; 2 3 import java.sql.SQLException; 4 5 public class JdbcTest { 6 7 public static void main(String[] args) throws ClassNotFoundException, 8 SQLException { 9 10 JdbcCURD curd=new JdbcCURD();11 12 String sql = null;13 14 //添加表Teacher15 sql="create table Teacher (Tid char(9) primary key,name char(9) unique)";16 curd.createTable(sql);17 18 //添加元组19 sql = "insert into Teacher (Tid,name) values ('0001','Tom')";20 curd.addElement(sql);21 22 //查询Teacher表23 sql="select * from Teacher";24 curd.Query(sql);25 26 //删除元组27 sql="delete from Teacher where Tid='0001'";28 curd.removeElement(sql);29 30 //删除表Teacher31 sql="drop table Teacher";32 curd.dropTable(sql);33 }34 35 }
经测试,将在控制台输出下列信息:
1 name:Tom2 id:0001
与上一篇中对数据库的操作相比,从配置文件中读取要连接数据库的信息,大大提高了代码的复用性以及灵活性,省去了当更改数据库时还要更改代码的麻烦。
新闻热点
疑难解答