zoukankan      html  css  js  c++  java
  • 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")+" "+rs.getString("uname")+" "+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 , 等会儿整理

  • 相关阅读:
    [ 低危 ] mt网CRLF
    mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
    mysql 之编码配置、引擎介绍、字段操作、数据类型及约束条件
    Navicat Premium永久激活方式
    centos 用户名密码忘记了怎么办?
    并发编程总结
    初识mysql
    线程queue、线程进程池,协程
    python解释器
    线程全局修改、死锁、递归锁、信号量、GIL以及多进程和多线程的比较
  • 原文地址:https://www.cnblogs.com/pdy94/p/8523023.html
Copyright © 2011-2022 走看看