zoukankan      html  css  js  c++  java
  • 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>
    
  • 相关阅读:
    he canvas has been tainted by cross-origin data and tainted canvases may not be exported
    Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
    HOW TO REPLACE ALL OCCURRENCES OF A CHARACTER IN A STD::STRING
    one or more multiply defined symbols found
    Std::map too few template arguments
    Always run a program in administrator mode in Windows 10
    JSON.parse 必须用双引号包起来
    jni4net使用小结
    Cannot generate C# proxy dll with JNI4NET tool, running batch file as trusted assembly?
    Java access to the Domino Objects, Part 1
  • 原文地址:https://www.cnblogs.com/YJBlog/p/12337103.html
Copyright © 2011-2022 走看看