jdbc基础 (二) 通过properties配置文件连接数据库

来源:互联网 发布:python中pyparsing 编辑:程序博客网 时间:2024/05/29 08:26

本文为转载

因为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
阅读全文
1 0
原创粉丝点击