JDBC的复习 和工具类总结

概述

JDBC

JDBC 访问数据库步骤

  1. 加载一个Driver驱动
  2. 创建数据库连接
  3. 创建Sql命令发送器Statement
  4. 通过Statement发送Sql命令并得到结果
  5. 处理结果
  6. 关闭数据库资源
    • ResultSet
    • Statement
    • Connection

jdbc 常用接口

1. Statement 接口

用于执行静态SQl 语句并返回它所生成的结果的对象

三种 Statement 类

  1. Statement : 用于发送简单的Sql 语句
  2. PreparedStatement 可以发送包含参数的语句,比上一个效率更好,而且可以防止SQL注入,
  3. CallableStatement : 继承则PreparedStatement ,用于调用存储过程
  • 优先使用PreparedStatement 可以避免Sql 注入风险

常用的 Statement

  • execute 运行语句,返回是否有结果集
  • eecuteQuery 运行select 语句,返回ResultSet 结果集
  • executeUpdate 运行inset/update/delete操作,返回更新的行数

事务管理

  • 在JDBC 中,事务操作 是自动提交的

  • 系统自动 调用 commit ,否则调用rollback 回滚

  • 可以改成手动提交,调用 setAutoCommit(False)来禁止自动提交

时间类型

1. java.util.Date

  • 子类 : java.sql.Date 表示年月日
  • 子类 : java.sql.Time 表示时分秒
  • 子类 : java.sql.TimeStmp 表示年月日时分秒

日期比较处理

  • 插入随机日期
  • 取出指定日期范围的记录

文本存储方式

CLOB

  • 用来存储大量的文本数据
  • 大字段有些特殊,不同的数据库处理方式不一样,大字段的操作常常是以流的方式来处理的,

mysql 中的相关类型

  • TINYTEXT
  • TEXT[(M)]
  • MEDIUMTEXT
  • LONGTEXT
  • 上面四种依次变大容量

BLOB

  • 二进制大对象的使用
  • 大字段数据通常是以流的形式,,而非一般的字段,一次即可读出数据

Mysql 中相关类型

  • TINYTEXT
  • TEXT[(M)]
  • MEDIUMTEXT
  • LONGTEXT
  • 上面四种依次变大容量

工具类总结

第一种

package com.pratice.jdbc;



/**
 * @version : 1.0
 * @auther : Firewine
 * @Program Name: <br>
 * @Create : 2018-09-29-21:30
 */


import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 操作JDBC的工具类,其中分装一些工具方法
 *
 */
public class JDBCTools {
    public static void release(ResultSet rs, Statement statement, Connection conn){
        if (rs != null){
            try{
                rs.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        if (statement != null){
            try{
                statement.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        if (conn != null){
            try{
                //也只是返回连接池中,不是真的关闭了

                conn.close();
            }catch (Exception e2){
                e2.printStackTrace();
            }
        }

    }
    /**
     * 关闭statement和connection 的方法
     * @param statement
     * @param conn
     */
    public static void release(Statement statement,Connection conn){
        if (statement != null){
            try{
                statement.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        if (conn != null){
            try{
                conn.close();
            }catch (Exception e2){
                e2.printStackTrace();
            }
        }
    }
    /**
     * 1.获取连接的方法
     * 通过读取配置文件从数据库服务器获取一个连接
     * @return
     * @throws Exception
     */
    private static DataSource dataSource = null;
    //数据库连接池只被初始化一次。
    static {
        dataSource = new ComboPooledDataSource("helloc3p0");
    }
    public static Connection getConnection()throws Exception{

        return dataSource.getConnection();
    }
//    public static Connection getConnection()throws Exception{
//        //1.准备连接数据库的4个字符串
//        //2.获取jdbc.properties对应的输入流
//        Properties ppop = new Properties();
//
//        //3.加载对应的输入流
//        InputStream in =
//                JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");
//
//        //4.具体决定user。password的等4个个字符串
//        ppop.load(in);
//        //3.加载数据库驱动程序(对应的Driver实现类中有注册驱动的静态代码块)
//        String user = ppop.getProperty("user");
//        String password = ppop.getProperty("password");
//        String jdbcUrl = ppop.getProperty("jdbcUrl");
//        String driver = ppop.getProperty("driver");
//
//        Class.forName(driver);
//        //4.通过DriverManager 的GetConnection方法获取数据库连接
//        return DriverManager.getConnection(jdbcUrl,user,password);
//    }
}

第二种方法

package sxt.study.jdbc;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtil {

	static Properties pros = null;   //可以帮助读取和处理资源文件中的信息
	
	static {   //加载JDBCUtil类的时候调用
		pros = new Properties();
		try {
			pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	public static Connection getMysqlConn(){
		try {
			Class.forName(pros.getProperty("mysqlDriver"));
			return DriverManager.getConnection(pros.getProperty("mysqlURL"),
					pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public static Connection getOracleConn(){
		try {
			Class.forName(pros.getProperty("oracleDriver"));
			return DriverManager.getConnection(pros.getProperty("oracleURL"),
					pros.getProperty("oracleUser"),pros.getProperty("oraclePwd"));
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public static void close(ResultSet rs,Statement ps,Connection conn){
		try {
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(ps!=null){
				ps.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Statement ps,Connection conn){
		try {
			if(ps!=null){
				ps.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void close(Connection conn){
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	
}

C3P0 配置文件


<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

    <named-config name="helloc3p0">

        <!-- 指定连接数据源的基本属性 -->
        <property name="user">root</property>
        <property name="password">pwd</property>
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql:///runoob?useSSL=true</property>

        <!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
        <property name="acquireIncrement">5</property>
        <!-- 初始化数据库连接池时连接的数量 -->
        <property name="initialPoolSize">5</property>
        <!-- 数据库连接池中的最小的数据库连接数 -->
        <property name="minPoolSize">5</property>
        <!-- 数据库连接池中的最大的数据库连接数 -->
        <property name="maxPoolSize">10</property>

        <!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->
        <property name="maxStatements">20</property>
        <!-- 每个连接同时可以使用的 Statement 对象的个数 -->
        <property name="maxStatementsPerConnection">5</property>

    </named-config>

</c3p0-config>
原文地址:https://www.cnblogs.com/YJBlog/p/12337103.html