本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

**转载请注明 出自 : 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的更多相关文章

  1. [SQLServer大对象]——FileTable从文件系统迁移文件

    阅读导航 从文件系统中迁移文件到FileTable 批量加载文件到FileTable 如何批量加载文件到FileTable 通过博文[SQLServer大对象]——FileTable初体验,已经可以将 ...

  2. C#中考虑为大对象使用弱引用

    1.无论怎样尽力,我们总是会使用到某些需要大量内存的数据,而这些内存并不需要经常访问.或许你需要从一个大文件中查找某个特定的值,或者算法需要一个较大的查询表.这时,你也许会采用2中不太好做法:第一种是 ...

  3. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等

    将一张图片存储在mysql中,并读取出来(BLOB数据:插入BLOB类型的数据必须使用PreparedStatement,因为插入BLOB类型的数据无法使用字符串拼写): -------------- ...

  5. .Net 垃圾回收和大对象处理

    CLR垃圾回收器根据所占空间大小划分对象.大对象和小对象的处理方式有很大区别.比如内存碎片整理 —— 在内存中移动大对象的成本是昂贵的,让我们研究一下垃圾回收器是如何处理大对象的,大对象对程序性能有哪 ...

  6. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  7. C# 内存管理优化畅想(一)---- 大对象堆(LOH)的压缩

    我们都知道,.net的GC是不会压缩大对象堆的,因为其时间开销不可接受,但这是以大对象堆产生大块碎片为代价的,如果以后要分配的大对象比最大的碎片还大,那么即使它比所有碎片的总大小要小,也是无法在不扩展 ...

  8. jsp笔记,包括编译指令和动作指令,九大对象等

    jsp基础知识 不包括HTTP协议,只有jsp的基础知识,包括表达式,代码片段,jsp九大对象等. 编译指令是在jsp被转换成selvet时,使用的. 而动作指令,是在每次客户端请求时动态执行.

  9. hibernate 大对象类型hibernate制图

    基础知识: 在 Java 在, java.lang.String 它可以用来表示长串(超过长度 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据. 此外, 在 JDBC API 中 ...

随机推荐

  1. 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)

    在项目开发中,除了对数据的展示更多的就是对文件的相关操作,例如文件的创建和删除,以及文件的压缩和解压.文件压缩的好处有很多,主要就是在文件传输的方面,文件压缩的好处就不需要赘述,因为无论是开发者,还是 ...

  2. Openfiler配置RAC共享存储

    将 Openfiler 用作 iSCSI 存储服务器,主要操作步骤如下: 1.设置 iSCSI 服务 2.配置网络访问 3.指定物理存储器并对其分区 4.创建新的卷组 5.创建所有逻辑卷 6.为每个逻 ...

  3. 利用poi导出Excel

    import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...

  4. java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)

    一.Condition 类 在前面我们学习与synchronized锁配合的线程等待(Object.wait)与线程通知(Object.notify),那么对于JDK1.5 的 java.util.c ...

  5. HTML5笔记2——HTML5音/视频标签详解

    音视频的发展史 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Quick ...

  6. Activity之概览屏幕(Overview Screen)

    概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...

  7. 为什么你SQL Server的数据库文件的Date modified没有变化呢?

    在SQL Server数据库中,数据文件与事务日志文件的修改日期(Date Modified)是会变化的,但是有时候你会发现你的数据文件或日志文件的修改日期(Date Modified)几个月甚至是半 ...

  8. centos7+mono4.2.3.4+jexus5.8.1跨平台起飞

    很早之前就开始关注.net跨平台,最近正好测试了下用EF6连接mysql,于是就想直接把网站扔进Linux.查了很多资料,鼓捣了两个晚上,终于成功. 这里我使用的是budgetvm的1G openvz ...

  9. 腾讯云上免费部署HTTPS

    接上篇<腾讯云下安装 nodejs + 实现 Nginx 反向代理>,想从头一步到位的同学建议从上篇文章开始阅读.本文将继续介绍如何通过 Nginx 免费部署HTTPS. 留意下,这里的“ ...

  10. 前端自学路线之js篇

    上一篇我们讲了前端切图的学习路线,不知大家有没有收获.今天来聊聊前端工程师的核心技能之——JavaScript.js这门语言看似简单,但要做到入门.熟练以至于架构的程度,还是有一段路要走的,今天就来聊 ...