JDBC_part4_大对象_DAO_Bean_DButi
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.
**转载请注明 出自 : luogg的博客园 ** 谢谢配合!
JDBCday04_大对象_Dao_DBUtil_JavaBean
大对象 (一般不用)
clob(海量文字,如图书)
blob(二进制数据,如图片,音乐,电影)
clob海量文字存入数据库 : FileReader(读文本) + PreparedStatement的setCharacterStream方法(以字符输入)
blob图片,音乐存入数据库 : FileInputStream(字节读) + PreparedStatement的setBinaryStream的方法(以二进制输入)
clob海量文字从数据库写到本地磁盘 : FileWriter(文本写出) + PreparedStatement的getCharacterStream(先读再写)方法返回给Reader + FileWrite的write方法
clob图片音频从数据库写到本地磁盘 : FileOutputStream(字节写出) + ResultSet的getBinaryStream获取字节文件传给InputStream,然后创建byte数组,FileOutputStream的write方法写入.
往数据库中存大文本或图片 :
setCharacterStream(int parameterIndex,Reader x)将指定参数设置为给定输入流
File file = new File("D:\\mianshiti.txt");
//图片FileInputStream
FileReader fr = new FileReader(file);
Connection conn = DBUtil.getConnection();
String sql = "insert into t_book(book_id,book_name,book_content) values(?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "1");
pstmt.setString(2,"面试题");
//图片pstmt.setBinaryStream
pstmt.setCharacterStream(3, fr);
int i = pstmt.executeUpdate();
System.out.println(i);
DBUtil.close(pstmt);
DBUtil.close(conn);
fr.close();
2. 将数据库中的大文件存放到本地
File file = new File("D:\\HA.png");
//输出图片FileOutputStream fos = new FileOutputStream(file);
FileWriter fw = new FileWriter("D:\\haha.txt");
Connection conn = DBUtil.getConnection();
String sql = "select * from t_book";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()) {
/*
图片读取
InputStream is = rs.getBinaryStream(4);
byte[] b = new byte[23000];
*/
Reader reader = rs.getCharacterStream(3);
char[] ch = new char[1024];
int length = 0;
//作为整数读取的字符,如果已到达流的末尾,则返回 -1
while((length=reader.read(ch))!=-1) {
fw.write(ch, 0, length);
}
}
fw.close();
DBUtil.close(rs, stmt, conn);
DAO(Database Access Object)数据库访问对象
- 使用数据库访问对象来抽象和封装对数据库的所有访问
- 将底层的数据库访问和上层的业务逻辑分开
Dao怎么用
DAO操作数据库:即在DAO中封装了一个数据表在一个项目中的增、删、改、查的全部动作。
JavaBean
1.JavaBean是一个public类
2.JavaBean提供公共的无参构造方法
3.JavaBean内的属性(字段)都是私有的.这些属性只能通过
优点
1.减少了数据传递间的碎片
2.代码结构清晰
3.便于维护和程序扩展
4.节约了开发周期,避免了重复代码
DBUtil
将数据库的连接和关闭封装在一个类里,在其他类里如果需要开启或者关闭连接,只需要调用DBUtil里的方法,返回一个连接即可。不需要在当前类里写繁琐的代码。
优点
1.代码结构清晰
2.便于维护和程序扩展
3.节约了开发周期,避免了重复代码
查询工资在1-10的员工信息 (分页显示)
SELECT * FROM(
SELECT ROWNUM r,a.* FROM(
SELECT copy_emp.* FROM copy_emp WHERE salary IS NOT NULL ORDER BY salary DESC)a)
WHERE r>0 AND r<=10
分页代码
/**
* 分页显示
*/
public List<EmpBean> showEmpMagByPage(int page,int pageSize) {
Connection conn = DBUtil.getConnection();
String sql = "SELECT * FROM ( " +
" SELECT ROWNUM r,a.* FROM ( " +
" SELECT copy_emp.* FROM copy_emp"+
" WHERE salary IS NOT NULL ORDER BY salary DESC ) a ) " +
" WHERE r>? AND r<=?"; //字符串前边要加空格
PreparedStatement pstmt = null;
//int pageSize = 10;//每页显示条数
int startPage = (page - 1) * pageSize;
int endPage = pageSize * page;
ResultSet rs = null;
List<EmpBean> list = new ArrayList<EmpBean>();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, startPage);
pstmt.setInt(2, endPage);
rs = pstmt.executeQuery();
while(rs.next()) {
EmpBean bean = new EmpBean();
//bean.getFirstName(rs.getString(1));
bean.setRownum(rs.getInt(1));
bean.setEmpID(rs.getInt(2));
bean.setFirstName(rs.getString(3));
bean.setLastName(rs.getString(4));
bean.setSalary(rs.getDouble(9));
list.add(bean);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//DBUtil.close(rs, pstmt, conn);
DBUtil.close(rs);
DBUtil.close(pstmt);
DBUtil.close(conn);
}
return list;
}
JDBC_part4_大对象_DAO_Bean_DButi的更多相关文章
- [SQLServer大对象]——FileTable从文件系统迁移文件
阅读导航 从文件系统中迁移文件到FileTable 批量加载文件到FileTable 如何批量加载文件到FileTable 通过博文[SQLServer大对象]——FileTable初体验,已经可以将 ...
- C#中考虑为大对象使用弱引用
1.无论怎样尽力,我们总是会使用到某些需要大量内存的数据,而这些内存并不需要经常访问.或许你需要从一个大文件中查找某个特定的值,或者算法需要一个较大的查询表.这时,你也许会采用2中不太好做法:第一种是 ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等
将一张图片存储在mysql中,并读取出来(BLOB数据:插入BLOB类型的数据必须使用PreparedStatement,因为插入BLOB类型的数据无法使用字符串拼写): -------------- ...
- .Net 垃圾回收和大对象处理
CLR垃圾回收器根据所占空间大小划分对象.大对象和小对象的处理方式有很大区别.比如内存碎片整理 —— 在内存中移动大对象的成本是昂贵的,让我们研究一下垃圾回收器是如何处理大对象的,大对象对程序性能有哪 ...
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- C# 内存管理优化畅想(一)---- 大对象堆(LOH)的压缩
我们都知道,.net的GC是不会压缩大对象堆的,因为其时间开销不可接受,但这是以大对象堆产生大块碎片为代价的,如果以后要分配的大对象比最大的碎片还大,那么即使它比所有碎片的总大小要小,也是无法在不扩展 ...
- jsp笔记,包括编译指令和动作指令,九大对象等
jsp基础知识 不包括HTTP协议,只有jsp的基础知识,包括表达式,代码片段,jsp九大对象等. 编译指令是在jsp被转换成selvet时,使用的. 而动作指令,是在每次客户端请求时动态执行.
- hibernate 大对象类型hibernate制图
基础知识: 在 Java 在, java.lang.String 它可以用来表示长串(超过长度 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据. 此外, 在 JDBC API 中 ...
随机推荐
- 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)
在项目开发中,除了对数据的展示更多的就是对文件的相关操作,例如文件的创建和删除,以及文件的压缩和解压.文件压缩的好处有很多,主要就是在文件传输的方面,文件压缩的好处就不需要赘述,因为无论是开发者,还是 ...
- Openfiler配置RAC共享存储
将 Openfiler 用作 iSCSI 存储服务器,主要操作步骤如下: 1.设置 iSCSI 服务 2.配置网络访问 3.指定物理存储器并对其分区 4.创建新的卷组 5.创建所有逻辑卷 6.为每个逻 ...
- 利用poi导出Excel
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...
- java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)
一.Condition 类 在前面我们学习与synchronized锁配合的线程等待(Object.wait)与线程通知(Object.notify),那么对于JDK1.5 的 java.util.c ...
- HTML5笔记2——HTML5音/视频标签详解
音视频的发展史 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Quick ...
- Activity之概览屏幕(Overview Screen)
概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...
- 为什么你SQL Server的数据库文件的Date modified没有变化呢?
在SQL Server数据库中,数据文件与事务日志文件的修改日期(Date Modified)是会变化的,但是有时候你会发现你的数据文件或日志文件的修改日期(Date Modified)几个月甚至是半 ...
- centos7+mono4.2.3.4+jexus5.8.1跨平台起飞
很早之前就开始关注.net跨平台,最近正好测试了下用EF6连接mysql,于是就想直接把网站扔进Linux.查了很多资料,鼓捣了两个晚上,终于成功. 这里我使用的是budgetvm的1G openvz ...
- 腾讯云上免费部署HTTPS
接上篇<腾讯云下安装 nodejs + 实现 Nginx 反向代理>,想从头一步到位的同学建议从上篇文章开始阅读.本文将继续介绍如何通过 Nginx 免费部署HTTPS. 留意下,这里的“ ...
- 前端自学路线之js篇
上一篇我们讲了前端切图的学习路线,不知大家有没有收获.今天来聊聊前端工程师的核心技能之——JavaScript.js这门语言看似简单,但要做到入门.熟练以至于架构的程度,还是有一段路要走的,今天就来聊 ...