分类: Java
2008-03-10 11:38:50
将连接数据库的属性放在配置文件中
1, 不管连接哪种数据库,都需要获得以下属性:
<1>数据库的驱动器的Driver类
<2>连接数据库的URL
<3>连接数据库的用户名
<3>连接数据库的用户名的密码
2, 为了提高程序的可移植性,可以将以上属性放到一个配置文件中,程序从配置文件中读取这些属性,
如果程序以后需要访问其它数据库,只需要修改配置文件即可.
<1>假定db.conf配置文件中内容为:
JDBC_DRIVER = com.mysql.jdbc.Driver DB_URL = jdbc:mysql://localhost:3306/STOREDB?useUnicode=true&characterEncoding=GB2312 DB_USER = pl DB_PASSWORD = 123 |
<2>PropertyReader.java类是一个实用类,它从db.conf文件中读取这些属性:
(编译此文件时,保证db.conf与PropertyReader.class在同一目录下)
*PropertyReader.java类是一个实用类,它从db.conf文件中读取连接数据库时 *需要的URL,USER,PASSWORD属性: */ import java.util.*; import java.io.*; public class PropertyReader { static private Properties ps; static { ps = new Properties(); try { //假定db.conf文件与PropertyReader.class文件位于同一目录 InputStream in = PropertyReader.class.getResourceAsStream("db.conf"); ps.load(in); in.close(); }catch(Exception e) { e.printStackTrace(); } } //读取特定属性 public static String get(String key) { return (String)ps.get(key); } } |
3, ConnectionProvider类封装了加载和注册驱动器,以及与数据库连接的细节,它的getConnection()
方法返回一个Connection对象
import java.sql.*; public class ConnectionProvider { private String JDBC_DRIVER; private String DB_URL; private String DB_USER; private String DB_PASSWORD; public ConnectionProvider() { JDBC_DRIVER = PropertyReader.get("JDBC_DRIVER"); DB_URL = PropertyReader.get("DB_URL"); DB_USER = PropertyReader.get("DB_USER"); DB_PASSWORD = PropertyReader.get("DB_PASSWORD"); try { //加载数据库Driver类 Class jdbcDriver = Class.forName(JDBC_DRIVER); //注册数据库Driver类 java.sql.DriverManager.registerDriver((Driver )jdbcDriver.newInstance()); }catch(Exception e) { e.printStackTrace(); } } public Connection getConnection() throws SQLException { Connection con = java.sql.DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); return con; } } |
3, 下面DBTest2类通过ConnectionProvider类来获得Connection对象:
import java.sql.*; public class DBTest2 { private ConnectionProvider provider; public DBTest2(ConnectionProvider provider) { this.provider = provider; } //插入操作 public void addCustomer(String name, int age, String address) throws SQLException { Connection con = null; Statement stmt = null; try { //建立数据库连接 con = provider.getConnection(); //创建一个Statement对象 stmt = con.createStatement(); //注意:name,address是String型,故用'号引用,age是int型 String sql = "insert into CUSTOMERS(NAME,AGE,ADDRESS)values(" +"'"+ name +"'" +","+ age + "," +"'"+ address +"'" + ")"; //执行sql语句 stmt.execute(sql); }finally { //依次关闭操作--连接,下同 closeStatement(stmt); closeConnection(con); } } //删除操作 public void deleteCustomer(String name) throws SQLException { Connection con = null; Statement stmt = null; try { con = provider.getConnection(); stmt = con.createStatement(); String sql = "delete from CUSTOMERS where NAME= '" +name+ "'"; stmt.execute(sql); }finally { closeStatement(stmt); closeConnection(con); } } //打印表内容 public void printAllCustomers() throws SQLException { Connection con = null; Statement stmt = null; ResultSet rs = null; try { con = provider.getConnection(); stmt = con.createStatement(); //查询记录 rs = stmt.executeQuery("SELECT ID,NAME,AGE,ADDRESS from CUSTOMERS"); //输出查询结果 while(rs.next()) { long id = rs.getLong(1); String name = rs.getString(2); int age = rs.getInt(3); String address = rs.getString(4); //打印数据 System.out.println("id= "+id+",name= "+name+",age= "+age+",address= "+address); } }finally { /* *释放相关资源 *关闭数据库操作的顺序与打开数据库操作的顺序相反 *依次关闭结果集-->操作-->连接 */ closeResultSet(rs); closeStatement(stmt); closeConnection(con); } } //将关闭结果集,操作,连接的操作进行封装(private) private void closeResultSet(ResultSet rs) { try { if(rs != null) rs.close(); }catch(SQLException e) { e.printStackTrace(); } } private void closeStatement(Statement stmt) { try { if(stmt != null) stmt.close(); }catch(SQLException e) { e.printStackTrace(); } } private void closeConnection(Connection con) { try { if(con != null) con.close(); }catch(SQLException e) { e.printStackTrace(); } } public static void main(String args[]) throws Exception { DBTest2 test = new DBTest2(new ConnectionProvider()); test.addCustomer("小马", 20, "上海"); test.printAllCustomers(); //test.deleteCustomer("小马"); } } |
打印结果为:
id= 1,name= 小李,age= 23,address= 北京
id= 2,name= 小红,age= 29,address= 天津
id= 3,name= 小白,age= 33,address= 香港
id= 4,name= 小彭,age= 28,address= 深圳
id= 5,name= 小王,age= 20,address= 上海
id= 6,name= 小马,age= 20,address= 上海
通过select语句查看customers内容为:
mysql> select * from customers;
+----+------+------+---------+
| ID | NAME | AGE | ADDRESS |
+----+------+------+---------+
| 1 | 小李 | 23 | 北京 |
| 2 | 小红 | 29 | 天津 |
| 3 | 小白 | 33 | 香港 |
| 4 | 小彭 | 28 | 深圳 |
| 5 | 小王 | 20 | 上海 |
| 6 | 小马 | 20 | 上海 |
+----+------+------+---------+
6 rows in set (0.00 sec)
说明通过DBTest类操作数据库成功!
仙尘于08年3月10日