Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104214
  • 博文数量: 45
  • 博客积分: 2520
  • 博客等级: 少校
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-09 16:54
文章分类

全部博文(45)

文章存档

2011年(1)

2008年(44)

我的朋友

分类: 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.confPropertyReader.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,addressString,故用'号引用,ageint

           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类操作数据库成功!

          

                                                                  

                                                    仙尘于08310

阅读(556) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~