Java对数据库的字符串字段进行压缩保存的尝试

数据字段一般都是保存原文的,一来方便在数据库修改和维护,而来有一些查询要用到它。但是在有些时候,我们无需保存原文了,比如在论坛,博客等数据里的内容字段,一般使用Clob类型,其很少参与搜索,而且就算要全文检索,我们也不推荐使用数据库的like 等,而应该用第三方的全文检索工具,比如lucene等实现。

这类数据都是大量的文本数据,有很大的可压缩性。由于一些原因,我的数据库已经超过我能容忍的大小了,所以想到了是否可以把这个数据压缩存储来节省空间,于是有了如下的尝试。

压缩算法就先不过多考虑了,就用Zip进行尝试就可以了。先看看如何把字符串压缩和解压缩的算法。

package com.laozizhu.article.util;
import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
 * 把字符串使用ZIP压缩和解压缩的代码。
 * 
 * @author JAVA世纪网(java2000.net, laozizhu.com)
 */  
public class StringZip {
  public static String zipString(String str) {
    try {
      ByteArrayOutputStream bos = null;
      GZIPOutputStream os = null;
      byte[] bs = null;
      try {
        bos = new ByteArrayOutputStream();
        os = new GZIPOutputStream(bos);
        os.write(str.getBytes());
        os.close();
        bos.close();
        bs = bos.toByteArray();
        return new String(bs, "iso-8859-1");
      } finally {
        bs = null;
        bos = null;
        os = null;
      }
    } catch (Exception ex) {
      return str;
    }
  }
  public static String unzipString(String str) {
    ByteArrayInputStream bis = null;
    ByteArrayOutputStream bos = null;
    GZIPInputStream is = null;
    byte[] buf = null;
    try {
      bis = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));
      bos = new ByteArrayOutputStream();
      is = new GZIPInputStream(bis);
      buf = new byte[1024];
      int len;
      while ((len = is.read(buf)) != -1) {
        bos.write(buf, 0, len);
      }
      is.close();
      bis.close();
      bos.close();
      return new String(bos.toByteArray());
    } catch (Exception ex) {
      return str;
    } finally {
      bis = null;
      bos = null;
      is = null;
      buf = null;
    }
  }
}

时间: 2024-09-20 20:53:42

Java对数据库的字符串字段进行压缩保存的尝试的相关文章

java中数据库的时间字段和jsp页面显示的不一样

问题描述 java中数据库的时间字段和jsp页面显示的不一样 数据库的时间和页面的时间显示不一样,数据库的时间是:2015-05-13 12:24:03 显示到页面上:1431491043000,求解 解决方案 得到的数据 应该是 日期的毫秒数· 可以通过 new java.Date(毫秒数) 转化成 Java里面的Date 应该就可以了 解决方案二: 需要对格式进行转换,转换代码: protected static final String DATE_TIME_FORMAT = "yyyy-M

c#.net-用.net连接sqlserver数据库查询特定字段(字段名以某特定字符串开头)

问题描述 用.net连接sqlserver数据库查询特定字段(字段名以某特定字符串开头) 数据库sqlserver中有一张表,表里面有类似于name1,name2,name3.......这类的字段,那在我不知道有几个这样的字段时,怎么把这些以name开头的字段全搜出来呢?比如select (所有以name开头字段名) from 表.求大神指导.虽然我没金币.... 解决方案 先用 http://blog.csdn.net/99guo/article/details/40142599 获得字段名

如何将查询到底IP地址字符串转换为IP数据库中StartIP字段的9位数字

问题描述 我刚下载了全国IP数据库ACCESS求根据用户IP查询IP数据库中相应所在县的代码:IP数据库中的字段如下:IP_ID:1,2,3,.....TEL_ID字段的332等是什么意思啊StartIP:9位数字是什么意思啊?我知道一般IP是诸如255.365.69.25,怎么转换过来的啊查询到的IP是253.251.251.214,是字符串,而数据库中的IP是9位数字,请问如何把前者转换为后者形式在数据库中进行比较啊,请教了 解决方案 解决方案二:up,up解决方案三:up,up解决方案四:

java 怎么随机生成字符串显示在jsp页面上

问题描述 java 怎么随机生成字符串显示在jsp页面上 如上我要点击一个按钮生成一个随机的用户, 用户账号是一个随机的字符串,我还需要获得产生随机的次数,来统计 解决方案 1.直接用random生成数字,然后把数字拼接 2.创建字符数组,然后random出数字,获取对应数字下标的字符,再拼接 解决方案二: 一种是楼上说的方法,另一种就是你要记录次数,用数据库来生成 解决方案三: 用UUID生成,存进数据库,在数据库中统计次数 解决方案四: 你字符串要什么格式的(汉字,英文大小写,数字,特殊符号

Java程序连接数据库的常用的类和接口介绍_java

编写访问数据库的Java程序还需要几个重要的类和接口.DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中用于管理数据库驱动程序的类.通常,应用程序只使用类DriverManager的getConnection()静态方法,用来建立与数据库的连接,返回Connection对象: static Connection getConnection(String url,String username,Strin

【java 获取数据库信息】获取MySQL或其他数据库的详细信息

1.首先是 通过数据库获取数据表的详细列信息 1 package com.sxd.mysqlInfo.test; 2 3 import java.sql.Connection; 4 import java.sql.DatabaseMetaData; 5 import java.sql.DriverManager; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; 8 import java.sql.ResultSe

Java的数据库应用

数据|数据库 利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果.由于SUN公司提供的JDK1.x开发工具包不是可视化的集成开发环境(IDE),不能象Delphi.VB那样方便地把查询结果在DBGrid等表格中显示出来.因此,只能靠自己编写代码来实现. 在实际应用中,我们可以利用Vector.JTable.AbstractTableModel等三个类较好地解决这一问题.以下,详细介绍一下实现方法. 一. 类Vector.类JTable及类AbstractTableModel简介:

y 中文乱码-PHP环语言对MySQL数据库进行中文字段的数据插入和查询时候遇到的乱码问题

问题描述 PHP环语言对MySQL数据库进行中文字段的数据插入和查询时候遇到的乱码问题 #定义插入数据库的时候定义插入的字符串的编码为 mysql_query('SET NAMES UTF8'); 这时候通过PhpMyadmin能够正常看到插入的正文字段信息,但是通过 mysql_query("select * from $table_name limit $offset,$rows"); 查询该字段的时候,显示的字段信息是乱码 如果不对插入数据库的编码做任何的定义,直接插入数据库中文

java-关于Java接数据库所出现的问题及解决办法

问题描述 关于Java接数据库所出现的问题及解决办法 小白一个,Java链接数据库过程中经常会出错,想问一下各位有遇到的什么问题以及解决办法吗? 解决方案 你自己写一个连接数据库的 如果正确的话就保留下来 以后如果还需要就可以直接用 当然如果报错的话 你就需要改代码 直到你的代码正确就可以 百度 谷歌 解决方案二: 开发时间长了,就总结出来了! 解决方案三: java链接数据库:http://blog.csdn.net/qq_19558705/article/details/49947317 遇