JDBC的复习 和工具类总结

文章目录

  • 概述
    • JDBC
      • JDBC 访问数据库步骤
    • jdbc 常用接口
      • 1. Statement 接口
        • 三种 Statement 类
        • 常用的 Statement
      • 事务管理
      • 时间类型
        • 1. java.util.Date
        • 日期比较处理
    • 文本存储方式
      • CLOB
        • mysql 中的相关类型
      • BLOB
        • Mysql 中相关类型
  • 工具类总结
    • 第一种
    • 第二种方法
    • C3P0 配置文件

概述

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: 
* @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 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>

你可能感兴趣的:(数据库)