JDBC 对大数据的处理
什么是大数据
1、 所谓大数据,就是大的字节数据,或大的字符数据标准SQL中提供了如下类型来保存大数据类型:;
2、 在mysql中没有提供tinyclob、clob、mediumclob、longclob四种类型,而是使用如下四种类型来处理文本大数据:;
3、 首先我们需要创建一张表;
4、 同样我们生成脚本文件后再PL_SQL当中执行;
5、 向数据库插入二进制数据需要使用PreparedStatement为原setBinaryStream(int,InputSteam)方法来完成(完整代码见文末);
6、 结果图;
7、 读取二进制数据,需要在查询后使用ResultSet类的getBinaryStream()方法来获取输入流对象也就是说,PreparedStatement有setXXX(),那么ResultSet就有getXXX()(完整代码见文末);
8、 还有一种方法,就是把要存储的数据包装成Blob类型,然后调用PreparedStatement的setBlob()方法来设置数据,此处不再介绍;
源码
package com.wyx;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBCUpdate2
{
public static void main(String[] args)
{
// saveLob();
getLob();
}
public static void saveLob()
{
// 定义oracle数据库的驱动的类
String driverClass = "oracle.jdbc.OracleDriver";
// 定义连接的oracle的url
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
// 用户名
String username = "scott";
// 密码
String password = "tiger";
// 定义Connection连接
Connection conn = null;
// 定义数据库的sql执行对象
PreparedStatement ps = null;
// 定义要执行的sql
String addSql = "insert into lob_test values(?,?)";
try
{
// 注册数据库的驱动程序
Class.forName(driverClass);
// 获得数据库的连接
conn = DriverManager.getConnection(url, username, password);
// 创建sql执行对象
ps = conn.prepareStatement(addSql);
// 定义二进制文件输入流
InputStream in = new FileInputStream("F:/administrator/Desktop/wyx.jpg");
// 定义大文本的文件的输入流
Reader reader = new FileReader("F:/administrator/Desktop/wyx.txt");
// 设置二进制参数
ps.setBinaryStream(1, in);
// 设置大文本的参数
ps.setClob(2, reader);
int count = ps.executeUpdate();
System.out.println("数据响应条数:" + count);
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
if (ps != null)
{
ps.close();
}
if (conn != null)
{
conn.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public static void getLob()
{
// 定义oracle数据库的驱动的类
String driverClass = "oracle.jdbc.OracleDriver";
// 定义连接的oracle的url
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
// 用户名
String username = "scott";
// 密码
String password = "tiger";
// 定义Connection连接
Connection conn = null;
// 定义数据库的sql执行对象
PreparedStatement ps = null;
// 定义结果集对象
ResultSet rs = null;
// 定义要执行的sql
String sql = "select * from lob_test";
InputStream in = null;
Reader reader = null;
OutputStream out = null;
Writer writer = null;
try
{
// 注册数据库的驱动程序
Class.forName(driverClass);
// 获得数据库的连接
conn = DriverManager.getConnection(url, username, password);
// 创建sql执行对象
ps = conn.prepareStatement(sql);
// 查询
rs = ps.executeQuery();
// 让游标向下移动
rs.next();
// 获得二进制的输入流
in = rs.getBinaryStream(1);
// 获得大文本对象
Clob clob = rs.getClob(2);
// 获得reader对象
reader = clob.getCharacterStream();
// 把图片写入到硬盘上
out = new FileOutputStream("F:/administrator/Desktop/wyx[副本].jpg");
byte[] bytes = new byte[1024];
int length = 0;
while ((length = in.read(bytes)) != -1)
{
out.write(bytes, 0, length);
}
out.flush();
writer = new FileWriter("F:/administrator/Desktop/wyx[副本].txt");
char[] cs = new char[1024];
int length1 = 0;
while ((length1 = reader.read(cs)) != -1)
{
writer.write(cs, 0, length1);
}
writer.flush();
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
if (writer != null)
{
writer.close();
}
if (out != null)
{
out.close();
}
if (reader != null)
{
reader.close();
}
if (in != null)
{
in.close();
}
if (ps != null)
{
ps.close();
}
if (conn != null)
{
conn.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}