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

**转载请注明 出自 : 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. 【NLP】十分钟快览自然语言处理学习总结

    十分钟学习自然语言处理概述 作者:白宁超 2016年9月23日00:24:12 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文 ...

  2. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  3. 后缀数组的倍增算法(Prefix Doubling)

    后缀数组的倍增算法(Prefix Doubling) 文本内容除特殊注明外,均在知识共享署名-非商业性使用-相同方式共享 3.0协议下提供,附加条款亦可能应用. 最近在自学习BWT算法(Burrows ...

  4. 原生JS实现-星级评分系统

    今天我又写了个很酷的实例:星级评分系统(可自定义星星个数.显示信息) sufuStar.star();使用默认值5个星星,默认信息 var msg = [........]; sufuStar.sta ...

  5. 项目游戏开发日记 No.0x000001

    14软二杨近星(2014551622) 既然已经决定了开发软件, 时不时就要练练手, 还要时不时的去寻找素材, 因为开发的人物设定就是DotA2里面的祈求者, 所以, 就去找了他的相关人物图片和模型, ...

  6. spring mvc 数据校验

    1.需要导入的jar包: slf4j-api-1.7.21.jar validation-api-1.0.0.GA.jar hibernate-validator-4.0.1.GA.jar 2.访问页 ...

  7. /etc/ppp/chap-secrets

    # Secrets for authentication using CHAP # client server secret IP addresses abc l2tpd * client:VPN 用 ...

  8. 微信硬件H5面板开发(一) ---- 调用openApi

    微信硬件平台是微信推出连接物与人,物与物的IOT解决方案.也就是说可以通过微信控制各种智能设备.比如一些蓝牙设备.空调.电视等等. 我本身不懂硬件(虽然是电子信息专业),硬件是北航的两个研究生在弄,小 ...

  9. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

  10. Java学习笔记(05)

    目录: static的用法 主函数的定义 增强for的循环 单例设计模式 封装 一.Static的用法 1.对象的内存分析 对象的引用变量是存在于栈区,而在堆区开辟了一块内存空间,调用对象给成员变量赋 ...