}
大数据{
用处:程序需要将大文本或二进制数据保存到数据库中,一般在实际开发中不直接使用数据库存储大文本大数据,因为在存取操作的时候,会占用连接大量的时间。
大数据(Large Objects):
clob:存储大文本,text文件blob:存储二进制数据,如图像,音频、二进制文mysql中用Text代替clob:
Text:Tinytext,text,mediumtext,longtext
blob:tinyblob,blob,mediumblob,longblob
大文本(Text){
存:
PreparedStatement的setCharacterStream( 1, reader, length)方法,填充占位符
// 定义sql语句
String sql = "insert into testclob(id,resum) values( , )";
// 预编译sql
PreparedStatement st = conn.prepareStatement(sql);
// 赋值占位符
st.setString(1, "1");
// 不建议用类装载器读取文件,因为文本内容可能太大,不适合读取至内存中
File file = new File("src/1.txt");
Reader reader = new FileReader(file);
st.setCharacterStream(2, reader, file.length());//reader:一个读取文本的流 length:文本的大小
// 这是long型的,使用1.6一下的jdk必须将其转成int
读:
reader = resultSet.getCharacterStream(i);
reader = resultSet.get Clob(i).getCharacterStream();
String s = resultSet.getSting(i);
// 定义sql语句 String sql = "select * from testclob where id= '1'"; // 预编译sql PreparedStatement st = conn.prepareStatement(sql); // 无占位符直接执行sql ResultSet rs = st.executeQuery(); // 通过结果集获取大数据文件 while(rs.next()){ String id = rs.getString(1); // 将数据库的文本数据放在一个流中,供用户使用 Reader reader = rs.getCharacterStream(2); // 读取数据 Writer writer = new FileWriter("src/2.txt"); ... }
}
二进制(Blob){
存:
PreparedStatement的setBinaryStream(i, inputStream, length)方法,填充占位符
// 定义sql语句 String sql = "insert into testblob(id,image) values( , )"; // 预编译sql PreparedStatement st = conn.prepareStatement(sql); // 赋值占位符 st.setString(1, "1"); // 不建议用类装载器读取文件,因为文本内容可能太大,不适合读取至内存中 File file = new File("src/1.jpg"); InputStream inputStream = new FileInputStream(file); st.setBinaryStream(2, inputStream, file.length());//inputStream:一个读取文本的流 length:文本的大小 // 这是long型的,使用1.6一下的jdk必须将其转成int读:查看数据不能直接通过命令行程序读取
inputStream = resultSet.getBinaryStream(i);
inputStream = resultSet.getBlob(i).getBinaryStream();
// 定义sql语句 String sql = "select * from testblob where id= '1'"; // 预编译sql PreparedStatement st = conn.prepareStatement(sql); // 无占位符直接执行sql ResultSet rs = st.executeQuery(); // 通过结果集获取大数据文件 while(rs.next()){ String id = rs.getString(1); // 将数据库的文本数据放在一个流中,供用户使用 InputStream in = rs.getBinaryStream(2); // 存储数据 OutputStream out = new FileOutputStream("c:\\2.jpg"); ...
}
}
批处理{
用处:当需要向数据库发送一批SQL语句执行时,应避免向数据库中一条条的发送执行,应该采用批处理机制,提升效率
第一种实现方式{
存储sql语句:Statement.addBatch(sql);
执行批处理语句:executeBatch()-->执行批处理命令 clearBatch();-->清除批处理命令
// 定义sql语句 String sql1 = "insert into testBatch(id,name) values('1', 'aaa')"; String sql2 = "update testBatch set name = 'bbb' where id = '1'"; // 获取Statement对象 Statement st = conn.createStatement(); // 将sql语句存到对象中,实际是将sql语句存放在内部的list对象中 st.addBatch(sql1); st.addBatch(sql2); // 执行sql int result[] = st.executeBatch();//该数组一次存放着每一条sql语句影响数据库数据的行数 // 清除 st.clearBatch();
1.可以发送不同的s