Java 数据库连接

大纲 :

  • 主要讲解 Java 连接数据库的几种方式 : 原生JDBC , Properties 配置文件 , xml 配置文件 , DBUtils , Hibernate , Mybatis , Spring 管理数据库连接以及事务
  • 还有数据库连接池 C3P0 , DBCP

JDBC 


 

//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
           
//2.获取数据库的连接对象
String url = "jdbc:mysql://localhost:3306/demo1";
String user = "root";
String password = "root";
Connection con =  DriverManager.getConnection(url , user , password);
   
//3.获取执行者对象
Statement statement = con.createStatement();
String sql2 = "SELECT * FROM zhangwu GROUP BY zname DESC";
PreparedStatement pstat = con.prepareStatement(sql2);
//4.执行sql语句 //通过执行者对象调用方法执行sql语句 //执行增删改 statement.executeUpdate("INSERT INTO users ( uname , uaddress) VALUE ( 'chenyun33' , 'fff')");
//执行查询 , 返回一个结果集 ResultSet rs = statement.executeQuery("SELECT * FROM users"); ResultSet prs = pstat.executeQuery();
//5.处理结果 while(rs.next()){ System.out.println(rs.getString("uid")+"\t"+rs.getString("uname")+"\t"+rs.getString("uaddress")); } //6.释放资源 rs.close(); statement.close(); con.close();

properties 配置文件方式 : 

     private static Connection con;
     
     //properties 方式
     static {
           try {
                InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("mysql.properties");
                Properties ps = new Properties();
                ps.load(in);
String driver
= ps.getProperty("driver"); String url = ps.getProperty("url"); String name = ps.getProperty("name"); String pw = ps.getProperty("password"); Class.forName(driver); con = DriverManager.getConnection(url, name, pw); } catch (Exception ex) { throw new RuntimeException(ex + "数据库连接异常"); } }

Xml 配置文件 : 

      static {
           try {
                SAXReader reader = new SAXReader();
                Document document = reader.read("mysql.xml");
                Element rootElement = document.getRootElement();

                String driver = rootElement.elementText("driver");
                String url = rootElement.elementText("url");
                String user = rootElement.elementText("username");
                String password = rootElement.elementText("password");

                Class.forName(driver);
                con = DriverManager.getConnection(url, user, password);

           } catch (Exception ex) {
                throw new RuntimeException(ex + "数据库连接异常");
           }
      }

 

数据库连接池 


数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

DBCP连接池 : 

public class JDBCUtils {
     //连接池对象
     private static BasicDataSource ds = new BasicDataSource();
     static{
           //设置连接池属性
           ds.setDriverClassName("com.mysql.jdbc.Driver");
           ds.setUrl("jdbc:mysql://127.0.0.1:3306/gjp");
           ds.setUsername("root");
           ds.setPassword("root");
     }
     
     private JDBCUtils() {
     }
     //多态 .. 向上转型 ,返回一个DataSource对象 (BasicDataSource implements DataSource)
     //为什么要转型 ? 因为QueryRunner 有一个构造方法能接收DataSource对象
     //QueryRunner 是DBUtils的核心类
     //DBUtils 是JDBC简化开发工具包
     //JDBC 是数据库驱动器
     public static DataSource getDataSource(){
           return ds;
     }
}

C3P0 连接池 : 

  • xml 文件形式 , 放在src目录下 
  • 文件名 : c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
     <property name="driverClass">com.mysql.jdbc.Driver</property>
       <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/stdb</property>
       <property name="user">root</property>
       <property name="password">root</property>
       <property name="initialPoolSize">5</property>
       <property name="maxPoolSize">20</property>
  </default-config>
</c3p0-config>
     //创建连接池
     private static final ComboPooledDataSource cpds = new ComboPooledDataSource();
     
     //返回连接
     public static Connection getConnection(){       
           Connection conn = null;
           try {
                conn = cpds.getConnection();
           } catch (SQLException e) {
                e.printStackTrace();
           }
           return conn;
     }
     
     //返回数据源(连接池)
     public static DataSource getDataSource(){
           return cpds;
     }
     //释放资源
    .......

 

DBUils 


 

  • JBDC 的简化开发工具包
  • DBUtils 是 java 编程中的数据库操作实用工具,小巧简单实用。
  • DBUtils 封装了对JDBC的操作,简化了JDBC操作,可以少写代码

三个核心类 : 

  • QueryRunner : 提供执行 sql 语句的 API.
  • DBUtils : 一个工具类 , 定义了关闭资源与事务处理的方法
  • ResultSetHandler : 接口 , 用于定义select操作后,怎样封装结果集
    • 主要使用以下八大结果集

 

Hibernate


 

 src 下创建核心配置文件 : hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
       "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
       "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd";>
<hibernate-configuration>
       <session-factory>
             <!-- 配置关于数据库连接的四个项 driverClass url username password -->
             <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
             <property name="hibernate.connection.url">jdbc:mysql:///hibernatetest</property>
             <property name="hibernate.connection.username">root</property>
             <property name="hibernate.connection.password">root</property>
             <!--使用c3p0 设置连接提供者 -->
             <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
             <!-- c3p0连接池的配置 -->
             <property name="hibernate.c3p0.max_size">20</property> <!-- 最大连接池 -->
             <property name="hibernate.c3p0.min_size">5</property> <!-- 最小连接数 -->
             <property name="hibernate.c3p0.timeout">120</property> <!-- 超时 -->
             <property name="hibernate.c3p0.idle_test_period">3000</property> <!-- 空闲连接 -->
<!-- 可以将向数据库发送的sql显示出来 --> <property name="hibernate.show_sql">true</property> <!-- 格式化sql --> <property name="hibernate.format_sql">true</property> <!-- hibernate的方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 自动创建表 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 用于设置事务提交方式 --> <property name="hibernate.connection.autocommit">false</property> <!-- 配置hibernate的映射文件所在位置 --> <mapping resource="cn/tone/domain/Customer.hbm.xml" /> </session-factory> </hibernate-configuration>

 

 Mybatis


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置属性 
        先加载内部属性,再加载外部属性,如果有同名属性会覆盖。
    -->
    <properties resource="db.properties">
        <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
    </properties>

   <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development">    <!-- 使用jdbc事务管理-->    <transactionManager type="JDBC" />    <!-- 数据库连接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> </configuration>

 

Spring 管理数据库连接


 

   <!-- 加载properties文件 -->
    <context:property-placeholder location="classpath:db.properties" />

    <!-- 数据库连接 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.user}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

 

Spring 管理数据库连接 , 管理事务等 , 还有整合 JPA , 等会儿整理

 

posted @ 2018-03-07 16:09  污力豆豆  阅读(123)  评论(0编辑  收藏  举报