JDBC(6)mysql中的大数据处理

  • 免费录播jdbc视频
  • JDBC操作
    • 驱动可以不注册
    • 大数据处理
    • 批处理
    • 时间处理
    • 事务

免费录播jdbc视频

最全JDBC 视频 https://ke.qq.com/course/280836#tuin=5740604a

JDBC操作

驱动可以不注册

JDBC(6)mysql中的大数据处理_第1张图片

        * 可以省略 Class.forName(driver); (高版本)
        * 原因:mysql-connector-java-5.1.22-bin.jar/META-INF/services/java.sql.Driver 内容com.mysql.jdbc.Driver ,程序将自动加载(SPI机制)


        mysql-connector-java-5.1.5-bin.jar不行

大数据处理

    * PreparedStatement对象
        * sql注入:防止实际参数作为sql语句的一部分。
        * 大数据处理
            * mysql大数据类型:
                * blob :Binary Large Object,二进制大对象。 mysql提供blob(64k),longblob(4G)
                    * java对象api : 
                        * psmt.setBinaryStream(parameterIndex, x) 二进制数据或者
                        * psmt.setBlob(parameterIndex, inputStream) blob对象
                * clob :Character Large Object字符大对象。mysql提供text(64k),longtext(4G)

大数据表准备

create table bigimg(
  id int primary key auto_increment,
  img blob
);


create table bigtext(
  id int primary key auto_increment,
  content longtext
);
@Test
    public void sendImg() {
        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtil.getConnection();

            //1 准备sql语句
            String sql = "insert into bigimg(img) values(?)";

            //2准备预处理对象
            psmt = conn.prepareStatement(sql);

            // * 图片的数据流
            FileInputStream is = new FileInputStream(new File("台湾.jpg"));

            //3设置内容
            psmt.setBinaryStream(1, is);

            //4执行sql
            int r = psmt.executeUpdate(); //不需要sql语句

            System.out.println(r);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.closeResource(conn, psmt, rs);
        }
    }
    @Test
    public void getImg() {
        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtil.getConnection();

            //1 准备sql
            String sql = "select img from bigimg where id = ?";

            //2预处理对象
            psmt = conn.prepareStatement(sql);

            //3设置参数
            psmt.setInt(1, 1);

            //4执行sql
            rs = psmt.executeQuery(); //不需要sql语句

            //5处理结果
            if (rs.next()) {
                System.out.println("下载中");
                //获得流并保存
                InputStream is = rs.getBinaryStream("img");

                FileOutputStream out = new FileOutputStream(new File("bak.jpg"));
                byte[] buf = new byte[1024];
                int len = -1;
                while ((len = is.read(buf)) != -1) {
                    out.write(buf, 0, len);
                }
                out.close();
                is.close();
            } else {
                System.out.println("没有数据");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.closeResource(conn, psmt, rs);
        }
    }

@Test
    public void getText() {
        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtil.getConnection();

            //1  -- 使用的字段的别名
            String sql = "select content c from bigtext where id = ?";

            //2
            psmt = conn.prepareStatement(sql);

            //3
            psmt.setInt(1, 2);

            //4执行
            rs = psmt.executeQuery();

            if (rs.next()) {
                System.out.println("下载中");
                Reader reader = rs.getCharacterStream("c"); //获得内容时,必须使用别名

                Writer writer = new OutputStreamWriter(new FileOutputStream("d:/1.txt"), "UTF-8");
                char[] buf = new char[1024];
                int len = -1;
                while ((len = reader.read(buf)) != -1) {
                    writer.write(buf, 0, len);
                }

                writer.close();
                reader.close();

            } else {
                System.out.println("没有");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.closeResource(conn, psmt, rs);
        }
    }

    @Test
    public void sendText() {

        //java.lang.OutOfMemoryError: Java heap space

        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtil.getConnection();

            //1
            String sql = "insert into bigtext(content) values(?)";

            //2
            psmt = conn.prepareStatement(sql);

            // * 提供字符串流

            Reader reader = new InputStreamReader(new FileInputStream(new File("d:/斗破苍穹.txt")), "UTF-8");

            //3 参数
            psmt.setCharacterStream(1, reader);

            //4
            int r = psmt.executeUpdate();

            System.out.println(r);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.closeResource(conn, psmt, rs);
        }
    }

批处理

Statement对象
1. addBatch(String sql) 给批处理缓存中,添加sql语句
2. clearBatch() 清空缓存
3. executeBatch() 将缓存中的sql语句都执行

* PreparedStatement对象*
1. 获得对象,提供sql
2. addBatch() ,将指定的参数添加到批处理缓存

sql脚本

create table batch(id int primary key , content varchar(30));
@Test
    public void statement(){ //语句执行
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtil.getConnection();

            st = conn.createStatement();

            //批处理
            st.addBatch("create database day12_batch");
            st.addBatch("use day12_batch");
            st.addBatch("create table batch(id int primary key auto_increment , content varchar(30))");
            st.addBatch("insert into batch(content) values('jack')");
            st.addBatch("insert into batch(content) values('rose')");


            //执行
            int[] arr = st.executeBatch();
            System.out.println(Arrays.toString(arr));

        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtil.closeResource(conn, st, rs);
        }
    }

    @Test
    public void prepared(){ //预处理
        //String url = "jdbc:mysql:///day12_batch?useUnicode=true&characterEncoding=UTF-8";
        long start = System.currentTimeMillis();
        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtil.getConnection();

            String sql = "insert into batch(content) values(?)";
            psmt = conn.prepareStatement(sql);

            //批处理--设置参数
            for(int i = 0 ; i< 100 ; i++){
                psmt.setString(1, i + "");
                // 添加到缓存
                psmt.addBatch(); //没有sql语句
            }

            //执行
            int[] arr = psmt.executeBatch();
            System.out.println(Arrays.toString(arr));

        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtil.closeResource(conn, psmt, rs);
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start);

    }

时间处理

 Statement对象,字符串的形式处理或mysql提供时间函数now()
 PreparedStatement对象 ,getDate(java.sql.Date)  getTime(java.sql.Time) getTimeStamp(java.sql.TimeStamp)
                * new java.sql.Date(new java.util.Date().getTime())

sql语句


CREATE TABLE dt(

  d DATE,

  t TIME,

  ts TIMESTAMP

)

JDBC(6)mysql中的大数据处理_第2张图片
JDBC(6)mysql中的大数据处理_第3张图片

事务

create table account(
  id int primary key auto_increment,
  username varchar(50),
  money int
);

insert into account(username,money) values('jack',500);
insert into account(username,money) values('rose',500);

你可能感兴趣的:(JAVAWEB)