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

**转载请注明 出自 : 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. jquery屏幕滚动计算事件总结

    获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度: $(docume ...

  2. Windows下Visual studio 2013 编译 Audacity

    编译的Audacity版本为2.1.2,由于实在windows下编译,其源代码可以从Github上取得 git clone https://github.com/audacity/audacity. ...

  3. [开发笔记]yum错误

    yum 错误TypeError: rpmdb open failed 解决办法 是因为RPM数据库出现损坏导致的,它导致所有的软件的升级.安装甚至是删除都会出现问题,终端出现乱码,YUMEX也用不成, ...

  4. bzoj3208--记忆化搜索

    题目大意: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目.    我们可以把风景区看作一个n*n的地图,每个点有它的初始高度,滑雪只能从高处往低处滑[严格大于] ...

  5. Android Studio:Failed to resolve ***

    更换电脑后,也更新了所有的SDK的tool,仍然报错:Failed to resolve  各种jar包,出现这种问题主要是因为在Android studio中默认不允许在线更新,修改方法如下:

  6. Maven安装

    开发分布式的商场系统,用到了一些新的技术,做一个记录和分享 这里讲一下maven安装 首先什么是Maven Maven作为一个构建工具,不仅帮我们自动化构建,还能抽象构建过程,提供构建任务实现.他跨平 ...

  7. Configure a VLAN (on top of a bond) with NetworkManager (nmcli) in RHEL7

    not on top of a bond Environment Red Hat Enterprise Linux 7 NetworkManager Issue Need an 802.1q VLAN ...

  8. [DeviceOne开发]-do_LinearLayout组件使用技巧

    一.摘要 今天跟大家主要来介绍一下DeviceOne中的do_linearlayout这个布局,在DeviceOne开发中,do_linearlayout这个布局是相当重要. 现在给大家来总结一下. ...

  9. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  10. 使用 Arrays 类操作 Java 中的数组

    Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序.搜索等(关于类和方法的相关内容在后面的章节中会详细讲解滴 ...