java工程连接数据库(数据源dbcp/c3p0)

来源:互联网 发布:知乎 正装西服品牌 编辑:程序博客网 时间:2024/05/22 15:01

/**

测试类

  • 记得加入mysql的驱动jar包
  • 但是缺点是:每一次的连接都需要创建连接会很耗时
  • 所以代替的是DataSource来实现得到连接,用到的是连接池
  • DBCP和c3p0数据源的使用—需要配置需要额外的jar包:tomcat已经有了DBCP所需的jar包
  • DBCP:BasicDataSource BasicDataSourceFactory需要properties数据源
  • c3p0:xml配置 优点是可以配置多个连接池 ComboPooledDataSource
  • 以上都是java工程如果是web工程的话需要tomcat配置
  • 可以参照tomcat的自带DBCP
  • 注意的是JNDI:JAVA NAMESPCE DIRECTORY INTERFACE 依据名值对形式存在
  • 要知道的是tomcat服务器启动的时候就创建了数据源,我们要获取该数据源就是通过JNDI
  • */
    public class SimpleTest {
    static final String url=”com.mysql.jdbc.Driver”;
    static final String query_sql=”select * from zhu_ce”;
    static final String add_sql=”insert into zhu_ce (id,username,password) values(2,’xx’,’52588’)”;
    static final String minus_sql=”delete from zhu_ce where username=’xx’”;
    static final String change_sql=”update zhu_ce set password=’7777777’”;
    public static void main(String[] args) {
    //得到的是URL的path
    Stringpath=SimpleTest.class.getClassLoader().getResource(“info.properties”).getPath();
    ///E:/MyEclipse%2010/SimpleTest/bin/info.properties
    System.out.println(path);
    Properties p=new Properties();
    //com.zbv.mytest001.SimpleTest.class.getClassLoader().getSystemResourceAsStream(“info.properties”);
    InputStream in=ClassLoader.getSystemResourceAsStream(“info.properties”);
    try {
    //加载properties文件
    p.load(in);
    //注册驱动—反射机制
    Class.forName(url);
    //创建连接对象
    Connectionconn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/mytest001?user=root&password=root”); Connectionconn=DriverManager.getConnection(p.getProperty(“curl”,
    // p.getProperty(“username”),
    // p.getProperty(“password”));
    // System.out.println(“curl=”+p.getProperty(“curl”)+” ”
    // +”-username=”+p.getProperty(“username”)+” ”
    // +”-password=”+p.getProperty(“password”));
    // Connection conn=SimpleDBUtils.getConnectionDB();
    // Connection conn=DBCPUtils.getConnectionDB();
    Connection conn=C3P0Utils.getConnectionDB();
    //创建命令对象statement/prepareStatement
    // Statement sm=conn.createStatement();
    PreparedStatement ps=conn.prepareStatement(query_sql);
    ResultSet rs=ps.executeQuery();
    while(rs.next()){
    System.out.println(“id=”+rs.getInt(“id”)+” ”
    +”username=”+rs.getString(“username”)+” ”
    +”password=”+rs.getString(“password”)); }
    //执行查询数据库操作
    //查询—返回的是结果集
    // ResultSet rs=sm.executeQuery(query_sql);
    //输出结果集
    // while(rs.next()){
    // System.out.println(“id=”+rs.getInt(“id”)+” ”
    // +”username=”+rs.getString(“username”)+” ”
    // +”password=”+rs.getString(“password”));
    // }
    //添加
    // int result=sm.executeUpdate(add_sql);
    //删除
    // int result=sm.executeUpdate(minus_sql);
    // int result=sm.executeUpdate(change_sql);
    // System.out.println(“结果是:”+result);
    //依次关闭连接
    // sm.close();
    // conn.close();
    // SimpleDBUtils.releaseDB(conn, ps, rs);
    // DBCPUtils.releaseConnectionDB();
    C3P0Utils.releaseConnectionDB();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } } }
    /**

DriverManager创建连接的工具类

  • 使用DriverManager建立连接数据库
  • */
    public class SimpleDBUtils {
    private static ResourceBundle rb;
    static {
    //要是properties文件
    rb=ResourceBundle.getBundle(“info”);
    try {
    //注册驱动
    Class.forName(rb.getString(“classURL”));
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
    /**
    • 连接数据库
    • */
      public static Connection getConnectionDB() {
      try {
      return DriverManager.getConnection(rb.getString(“curl”), rb.getString(“username”), rb.getString(“password”));
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      return null;
      }
      /**
    • 释放数据库的资源
    • */
      public static void releaseDB(Connection conn, PreparedStatement ps,
      ResultSet rs) {
      if (conn != null) {
      try {
      conn.close();
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } }
      if (ps != null) {
      try {
      ps.close();
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } }
      if (rs != null) {
      try {
      rs.close();
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } } } }
      /**

DBCP数据源连接工具类

  • 使用DBCP数据源连接数据库:配置文件properties
  • 所需jar包
  • BasicDataSource implements DataSource
  • */
    public class DBCPUtils {
    private static BasicDataSource bds;
    static{
    Properties p=new Properties();
    InputStream in=DBCPUtils.class.getClassLoader().getResourceAsStream(“dbcpconfig.properties”);
    try {
    p.load(in);
    bds=(BasicDataSource) BasicDataSourceFactory.createDataSource(p);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
    /**
    • 使用DBCP数据源连接数据库表
    • */
      public static Connection getConnectionDB(){
      try {
      return bds.getConnection();
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      };
      return null;
      }
      /**
    • 释放DBCP连接的数据库资源
    • */
      public static void releaseConnectionDB(){
      try {
      bds.close();
      System.out.println(“数据库资源关闭了….”);
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } } }
      /**

c3p0数据源连接工具类

  • 使用c3p0数据源连接数据库:配置文件xml
  • jar包
  • 相比dbcp的一大优点应该是可以进行多个配置
  • ComboPooledDataSource实现 PooledDataSource继承DataSource
  • xml里面把注册的数据库URL 连接url 以及用户名 密码都写在xml里面
  • */
    public class C3P0Utils {
    private static ComboPooledDataSource cpds;
    static{
    cpds=new ComboPooledDataSource();
    }
    /**
    • 使用c3p0数据源连接数据库表
    • */
      public static Connection getConnectionDB(){
      try {
      return cpds.getConnection();
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      return null;
      }
      /**
    • 释放c3p0连接的数据库资源
    • */
      public static void releaseConnectionDB(){
      try {
      DataSources.destroy(cpds);
      System.out.println(“数据库资源关闭了….”);
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } } }
      c3p0xml配置文件
<?xml version="1.0" encoding="UTF-8"?><c3p0-config>    <default-config>        <property name="driverClass">com.mysql.jdbc.Driver</property>        <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property>        <property name="user">root</property>        <property name="password">root</property>        <property name="acquireIncrement">5</property>        <property name="initialPoolSize">10</property>        <property name="minPoolSize">5</property>        <property name="maxPoolSize">20</property>    </default-config>    <named-config name="mysql">        <property name="driverClass">com.mysql.jdbc.Driver</property>        <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property>        <property name="user">root</property>        <property name="password">root</property>        <property name="acquireIncrement">5</property>        <property name="initialPoolSize">10</property>        <property name="minPoolSize">5</property>        <property name="maxPoolSize">20</property>    </named-config>    <named-config name="oracle">        <property name="driverClass">com.mysql.jdbc.Driver</property>        <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property>        <property name="user">root</property>        <property name="password">root</property>        <property name="acquireIncrement">5</property>        <property name="initialPoolSize">10</property>        <property name="minPoolSize">5</property>        <property name="maxPoolSize">20</property>    </named-config></c3p0-config>

dbcp数据源properties配置文件
连接设置
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/day16 username=root password=root

initialSize=10 #最大连接数量 maxActive=50

maxIdle=20

minIdle=5

maxWait=60000
//JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:”user” 与 “password” 两个属性会被明确地传递,因此这里不需要包含他们。 connectionProperties=useUnicode=true;characterEncoding=gbk

// 指定由连接池所创建的连接的自动提交(auto-commit)状态。 defaultAutoCommit=true

//driver default 指定由连接池所创建的连接的只读(read-only)状态。
如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=false

//driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

最后说一下:
这只是java项目连接数据库的配置和使用,如果是web项目的话应当配置对应服务器的,例如tomcat,当然了,下一回我会更新的关于tomcat的web工程配置和使用,以飨喜欢的小伙伴^–^
当然了,十分欢迎各位大神的错误纠正或提升建议,谢!

0 0
原创粉丝点击