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>
發佈了79 篇原創文章 · 獲贊 22 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章