• 批处理文件和存储过程


    Statement 对象和PreparedStatement

    package jdbc;
    
    import java.io.FileNotFoundException;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import org.junit.Test;
    
    import utils.JdbcUtils;
    //二进制的数据存储及读取
    /**
     * 创建表
     * create table t1{
     *     id int primary key,
     *     img BLOB
     * }
     * 
     * USE mysite;
    CREATE TABLE t3
    (
        id INT PRIMARY KEY,
        NAME VARCHAR(20),
        age INT
    );
     * 
     * @author kj
     *
     */
    public class BlobTest {
    
        @Test
        public void testSave() throws SQLException, FileNotFoundException {
            //获得连接对象
            Connection conn = JdbcUtils.getConnection();
    
            Statement stmt = conn.createStatement();
            //将三条语句一起放入stmt对象,一起发送到服务端执行,在DBMS中会编译成一个逻辑单元执行,速度快些
            String sql1 = "insert into t3 values(1,'富兰克林',22)";
            String sql2 = "insert into t3 values(2,'麦克',42)";
            String sql3 = "insert into t3 values(3,'崔佛',32)";
            
            stmt.addBatch(sql1);
            stmt.addBatch(sql2);
            stmt.addBatch(sql3);
            
            stmt.executeBatch();
            JdbcUtils.release(null, stmt, conn);
    
        }
        @Test
        public void testPrepare() throws SQLException, FileNotFoundException {
            //获得连接对象
            Connection conn = JdbcUtils.getConnection();
            PreparedStatement pstmt = conn.prepareStatement("insert into t3 values(?,?,?)");
            //指定?的值
            pstmt.setInt(1,4);
            pstmt.setString(2, "王飞1");
            pstmt.setInt(3, 56);
            pstmt.addBatch();
            
            pstmt.setInt(1, 5);
            pstmt.setString(2, "王飞2");
            pstmt.setInt(3, 58);
            pstmt.addBatch();
            
            pstmt.setInt(1, 6);
            pstmt.setString(2, "王飞3");
            pstmt.setInt(3, 59);
            pstmt.addBatch();
            
            pstmt.executeBatch();
            
            JdbcUtils.release(null, pstmt, conn);
        }
    
    }

     插入1000条数据

        @Test
        public void testPrepareFor() throws SQLException, FileNotFoundException {
            //获得连接对象
            Connection conn = JdbcUtils.getConnection();
            PreparedStatement pstmt = conn.prepareStatement("insert into t3 values(?,?,?)");
            //指定?的值
            //执行前的时间
            System.out.println(new Date());
            for (int i = 0; i < 1000; i++) {
                pstmt.setInt(1,i);
                pstmt.setString(2, "崔佛-菲利普" + i);
                pstmt.setInt(3, i);
                //缓存
                pstmt.addBatch();
                //为了提高效率,两百条发送一次
                if(i % 200 == 0){
                    //执行sql语句
                    pstmt.executeBatch();
                    //一定要清空缓存
                    pstmt.clearBatch();
                }
            }
            //为了防止缓存中还有sql语句没有执行,应当再次执行sql语句
            pstmt.executeBatch();
            //执行前的时间
            System.out.println(new Date());
            
            JdbcUtils.release(null, pstmt, conn);
        }

    JDBC大数据LOB的存取

    大数据也称为LOF(Large Object),LOB又可分为clob和blob,clob用于存储大文本,blob用于存储二进制数据。

    在MySQL中,只有blob和Text。

    Text又可分为TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT

    blob又可分为TINYBLOB,BLOB,MEDIUMBLOB和LONGBLOB


    存储过程

    ---------------------存储过程---

    -- 无参的存储过程 --
    DELIMITER ;; -- 指定结束符
    CREATE PROCEDURE pro1()
    BEGIN 
    SELECT * FROM mysite.`t3`;
    END;
    ;;
    -- 调用
    CALL pro1();;

    带参存储过程

    -- 带参的存储 in 表示输入参数,整型
    DELIMITER ;;
    CREATE PROCEDURE pro2(IN a INT)
    BEGIN
        SELECT * FROM t3 WHERE id = a;
    END;
    ;;
    CALL pro2(5);

    带输入参数和输出参数

    -- 输出参数  输出参数b
    DELIMITER ;;
    CREATE PROCEDURE pro4(IN a INT, OUT b VARCHAR(20))
    BEGIN
        SELECT NAME INTO b FROM t3 WHERE id = a;
    END;
    ;;
    
    -- 接收参数
    CALL pro4(5,@name);
    SELECT @name;

    Java中调用存储过程

    //演示JDBC调用存储过程
    public class ProcedureTest {
    
        @Test
        public void callStatement() throws Exception{
            //获得连接对象
            Connection conn = JdbcUtils.getConnection();
            //创建执行存储过程的命令对象
            CallableStatement cstmt = conn.prepareCall("{call pro4(?,?)}");
            //指定? 的值
            cstmt.setInt(1, 6);
            //指定第二个问号是输出参数
            cstmt.registerOutParameter(2, Types.VARCHAR);
            //执行存储过程
            cstmt.executeUpdate();
            //获得返回值
            String name = cstmt.getString(2);
            System.out.println(name);
            
            //释放资源
            JdbcUtils.release(null, cstmt, conn);
        }
    }
  • 相关阅读:
    Cookie中的HttpOnly详解
    垃圾收集器Serial 、Parallel、CMS、G1
    Spring中ApplicationContextAware的用法
    Java IO包装流如何关闭
    Oracle数据库只读事务和无事务的区别
    protobuf和thrift对比
    Google的SPDY协议成为HTTP 2.0的基础
    在tomcat7中启用HTTPS的详细配置
    实现Spring RESTful服务的SSL
    大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理
  • 原文地址:https://www.cnblogs.com/taiguyiba/p/6198617.html
Copyright © 2020-2023  润新知