• 第4章 操作BLOB类型字段 & 第5章 批量插入


    第4章 操作BLOB类型字段

    *MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器

    *插入BLOB类型的数据必须使用PreparedStatement

    *MySQL的四种BLOB类型:

       TinyBlob:最大255;Blob:最大65k;MediumBlob:最大16M;LongBlob:最大4G

    1.向数据表中插入Blob类型数据

    1. public void testInsert() {
    2. Connection conn = null;
    3. PreparedStatement pr = null;
    4. try {
    5. conn = JDBCUtiles.getConnection();
    6. String sql="insert into customers (name,email,birth,photo) values (?,?,?,?)";
    7. pr = conn.prepareStatement(sql);
    8. pr.setObject(1,"桃桃");
    9. pr.setObject(2,"tao@163.com");
    10. pr.setObject(3,"2018-12-26");
    11. FileInputStream fis = new FileInputStream(new File("Figure_1.png"));
    12. pr.setBlob(4,fis);
    13. pr.execute();
    14. } catch (Exception e) {
    15. e.printStackTrace();
    16. } finally {
    17. JDBCUtiles.closeResource(conn,pr);
    18. }
    19. }

    2.从数据表中读取Blob类型数据

    1. public void testQuery() {
    2. Connection conn = null;
    3. PreparedStatement pr = null;
    4. InputStream is = null;
    5. FileOutputStream os = null;
    6. ResultSet query=null;
    7. try {
    8. String sql="select * from customers where id=?";
    9. conn = JDBCUtiles.getConnection();
    10. pr = conn.prepareStatement(sql);
    11. pr.setObject(1,16);
    12. query = pr.executeQuery();
    13. while (query.next()){
    14. Blob photo = query.getBlob("photo");
    15. is = photo.getBinaryStream();
    16. os = new FileOutputStream("zhuyin.jpg");
    17. byte[] bytes = new byte[1024];
    18. int len;
    19. while ((len= is.read(bytes))!=-1){
    20. os.write(bytes,0,len);
    21. }
    22. }
    23. } catch (Exception e) {
    24. e.printStackTrace();
    25. } finally {
    26. JDBCUtiles.closeResource(conn,pr,query);
    27. try {
    28. assert is != null;
    29. is.close();
    30. } catch (IOException e) {
    31. e.printStackTrace();
    32. }
    33. try {
    34. assert os != null;
    35. os.close();
    36. } catch (IOException e) {
    37. e.printStackTrace();
    38. }
    39. }
    40. }

    *如果在指定了相关的Blob类型以后,还报错xxx too large,那么在MySQL的安装目录下,找my.ini文件加上如下的配置参数:

    max_allowed_packet=16M,注意修改了my.ini文件后要重启MySQL服务:右键我的电脑à管理à服务和应用程序à服务à找到MySQLà右键à重新启动

    第5章 批量插入

    *MySQL服务器默认是关闭批处理的,需要在配置文件的url后面写如下语句:?rewriteBatchedStatements=true

    1. //使用addBatch()、executeBatch()、clearBatch()
    2. //向goods表中插入20000条数据
    3. @Test
    4. public void insertTest1(){
    5. Connection conn = null;
    6. PreparedStatement pr = null;
    7. try {
    8. conn = JDBCUtiles.getConnection();
    9. //设置不允许自动提交数据
    10. conn.setAutoCommit(false);
    11. String sql="insert into goods (name) values (?)";
    12. pr = conn.prepareStatement(sql);
    13. for (int i = 1; i <= 20000; i++) {
    14. pr.setString(1,"name_"+i);
    15. //批量(例如批量500执行一次)
    16. pr.addBatch();
    17. if(i%500==0){
    18. //批量执行
    19. pr.executeBatch();
    20. //清空
    21. pr.clearBatch();
    22. }
    23. }
    24. //提交数据
    25. conn.commit();
    26. } catch (Exception e) {
    27. e.printStackTrace();
    28. }finally {
    29. JDBCUtiles.closeResource(conn,pr);
    30. }
    31. }

  • 相关阅读:
    【1day】用友时空KSOA平台 任意文件上传漏洞学习
    微信网页版能够使用(会顶掉微信app的登陆)
    【图像增强】基于麻雀搜索算法与双伽马校正的图像自适应增强算法Matlab代码
    opencv(4):颜色空间
    Mysql 分组排序取组内前几条
    如何实现云上 Lakehouse 高性能
    SpringBoot 常用注解
    Redis缓存穿透-热点缓存并发重建-缓存与数据库双写不一致-缓存雪崩
    二叉树最近的公共祖先[后序遍历与回溯模型的考察]
    你这个视频背景太假了?
  • 原文地址:https://blog.csdn.net/weixin_47687315/article/details/127885732