设为首页 加入收藏

TOP

java自学之路-----jdbc_分页查询,大数据,批处理,存储过程(二)
2014-11-23 17:34:59 来源: 作者: 【 】 浏览:145
Tags:java 自学 -----jdbc_ 查询 数据 处理 存储 过程
executeQuery(); // 将结果封装到QueryResult对象中 //在service层,将该对象封装到QueryBean中,传给jsp用于显示 ... } catch (Exception e) { }finally{ JdbcUtils.release(conn, st, rs); } }

}

大数据{

用处:程序需要将大文本或二进制数据保存到数据库中,一般在实际开发中不直接使用数据库存储大文本大数据,因为在存取操作的时候,会占用连接大量的时间。
大数据(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
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇并发问题:大数据量的访问 下一篇基于简单sql语句的sql解析原理及..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: