你好,游客 登录 注册 搜索
背景:
阅读新闻

JDBC之大数据内容的传输

[日期:2014-12-12] 来源:博客园-Java   作者:白Rime [字体: ]

JDBC之 大数据内容的传输

什么是大数据内容?

      在数据库中,有一条一条的记录,记录中很多字段都是几个字符就够的,假如现在要把一部小说存入数据库,这本小说当然不是几个字符组成,而是由几万字组成,这本小说的数据我们就可以说是大数据,生活中当然有各种各样的大数据:电影,音乐,图片等等。。。

大字符数据内容操作

      大字符内容:通常是指很长的字符类型的文件,例如小说,故事等等,内容有字符组成。

      下面说明一下MySQL与Oracle中的大数据类型

数据种类 数据大小 MySQL Oracle
字符 char,varchar varchar2
text/longtext clob
字节 bit,blob,longblob blob

1.把大字符数据存进数据库(把一个文本的数据存进MySQL中的text类型字段)

@Test
public void writeInDB() throws Exception {
    //获取连接
    connection = sqlUtil.getconnection();
    
    //获取对象
    PreparedStatement preparedStatement = 
    connection.prepareStatement("insert into book values(?)");
    
    //准备一个Reader用于读取本地文件
    Reader reader = new FileReader(new File("e:/test.txt"));
    
    //设置大数据参数
    preparedStatement.setClob(1, reader);
    
    //执行SQL语句
    preparedStatement.executeUpdate();
    
    //关闭资源
    reader.close();
    sqlUtil.close(preparedStatement, connection);
}

2.从数据库把大字符文件读入到本地

@Test
public void readFromDB() throws Exception
{
    //获取连接
    connection = sqlUtil.getconnection();
    
    //创建对象
    PreparedStatement preparedStatement = 
    connection.prepareStatement("SELECT content FROM book");
    
    //设置参数//preparedStatement.setObject(1, "book");//获得结果
    ResultSet res = preparedStatement.executeQuery();
    
    //以String的形式获得大字符内容
    while(res.next())
    {
String content = res.getString("content");
System.out.println(content);
    }
    
    //关闭资源
    sqlUtil.close(preparedStatement, connection);
}

      获得结果后还有第二种方法:

@Test
public void readFromDB() throws Exception
{
//获取连接
connection = sqlUtil.getconnection();

//创建对象
PreparedStatement preparedStatement = 
connection.prepareStatement("SELECT content FROM book");

//设置参数//preparedStatement.setObject(1, "book");//获得结果
ResultSet res = preparedStatement.executeQuery();

FileWriter fileWriter = new FileWriter(new File("d:/11021.txt"));
//利用Clob对象
if(res.next())
{
Clob clob = res.getClob("content");
Reader reader = clob.getCharacterStream();

//然后把Reader写入到本地文件中
char[] cr = new char[1024];
int len = 0;
while((len = reader.read(cr))!=-1)
{
fileWriter.write(cr, 0, len);
}
reader.close();
}

//关闭资源
fileWriter.close();
sqlUtil.close(preparedStatement, connection);
}

      以上就是对大字符文件的读入与写出~下面我们示范来对大字节文件的操作~

4.把大字节文件写入数据库

    @Test
    public void writeInDB() throws Exception {
//获取连接
connection = sqlUtil.getconnection();

//获取对象
PreparedStatement preparedStatement = 
connection.prepareStatement("insert into book values(?,?)");

//准备一个InputStream用于读取本地文件
InputStream in = new FileInputStream(new File("f:/computer.jpg"));

//设置大数据参数
preparedStatement.setObject(1, 1);
preparedStatement.setBlob(2, in);
//也可以使用这个//preparedStatement.setBinaryStream(2, in);//执行SQL语句
preparedStatement.executeUpdate();

//关闭资源
in.close();
sqlUtil.close(preparedStatement, connection);
    }

5.从数据库把大字节文件读取到本地

@Test
public void readFromDB() throws Exception
{
//获取连接
connection = sqlUtil.getconnection();

//创建对象
PreparedStatement preparedStatement = 
connection.prepareStatement("SELECT content FROM book where id=?");

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

//获得结果
ResultSet res = preparedStatement.executeQuery();

FileOutputStream out = new FileOutputStream(new File("d:/999.jpg"));
//利用Blob对象
if(res.next())
{
//Blob blob = res.getBlob("content");//InputStream in =  blob.getBinaryStream();//这样也行

InputStream in = res.getBinaryStream("content");
//然后把Reader写入到本地文件中
byte[] buf = new byte[1024];
int len = 0;
while((len = in.read(buf))!=-1)
{
out.write(buf, 0, len);
}
in.close();
out.close();
}		
//关闭资源		
sqlUtil.close(preparedStatement, connection);
}
原文链接:http://www.cnblogs.com/vmax-tam/p/4153996.html




收藏 推荐 打印 | 录入:Cstor | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款