• 第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. }

  • 相关阅读:
    Python uWSGI 安装配置
    非零基础自学Java (老师:韩顺平) 第13章 常用类 13.8 Arrays类
    【js】vue获取document.getElementById(a)为null
    Jmeter的性能测试
    Android和Linux的开发差异
    山西电力市场日前价格预测【2023-10-29】
    工具模板 | 用APOEM方法消除对用户行为的偏见
    java计算机毕业设计教育辅导班信息网服务端源码+mysql数据库+系统+lw文档+部署
    责任链模式
    c++多态
  • 原文地址:https://blog.csdn.net/weixin_47687315/article/details/127885732