JDBC学习总结(四)
JDBC对LOB的读写
在JDBC中提供了java.sql.Blob和java.sql.Clob,两个类分别代表BLOB和CLOB数据。
package com.yyq.blob;
import com.yyq.factory.CloseFactory;
import com.yyq.factory.ConnectionFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* Created by gao on 16-4-13.
*/
public class BlobInsertTest {
public static void insert() throws SQLException{
Connection conn = ConnectionFactory.getConnection();
PreparedStatement pstmt = null;
String sql = "insert into stuinfo(name,content,image) values(?,?,?)";
BufferedReader brtxt = null;
InputStream isimg = null;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"test");
// 从文件中获取输入流--读取文本
InputStream istxt = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("test.txt");
brtxt = new BufferedReader(new InputStreamReader(istxt));
//设置Blob
pstmt.setCharacterStream(2,brtxt);
//从文件中获取输入流--读取图片
isimg = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("panda.png");
pstmt.setBinaryStream(3,isimg);
if (pstmt.executeUpdate() == 1){
System.out.println("恭喜成功添加一条记录!");
}else{
System.out.println("添加记录失败!");
}
}catch (SQLException e){
e.printStackTrace();
}finally {
try {
brtxt.close();
}catch (IOException e){
e.printStackTrace();
}
try{
isimg.close();
}catch (IOException e){
e.printStackTrace();
}
CloseFactory.close(pstmt,conn);
}
}
public static void main(String[] args) throws SQLException {
BlobInsertTest.insert();
}
}
3)LOB的读取
package com.yyq.blob;
import com.yyq.factory.CloseFactory;
import com.yyq.factory.ConnectionFactory;
import java.io.*;
import java.net.ConnectException;
import java.sql.*;
/**
* Created by gao on 16-4-13.
*/
public class BlobSelectTest {
public static void select() {
Connection conn = ConnectionFactory.getConnection();
PreparedStatement pstmt = null;
String sql = "select id,name,content,image from stuinfo where name=?";
ResultSet rs = null;
BufferedReader br = null;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "test");
rs = pstmt.executeQuery();
while (rs.next()) {
Reader rd = rs.getCharacterStream(3);
br = new BufferedReader(rd);
String str = null;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
Blob blob = rs.getBlob(4);
BufferedInputStream bis = new BufferedInputStream(blob.getBinaryStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("newpanda.png"));
byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys, 0, 1024)) != -1) {
bos.write(bys, 0, len);
}
bos.flush();
bos.close();
System.out.println("\n-------------图片写好了!");
}
}catch (SQLException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
CloseFactory.close(pstmt,conn);
}
}
public static void main(String[] args) {
BlobSelectTest.select();
}
}
JDBC学习总结(四)的更多相关文章
- JDBC学习笔记(四)
减少各个Dao类间的重复代码,有以下几种方式: 写一个DBConnectionManager,将公共的查询逻辑做成方法,将sql语句作为参数传递给方法. public class DBConnecti ...
- MyBatis学习 之 四、MyBatis配置文件
目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...
- JDBC学习笔记(2)——Statement和ResultSet
Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...
- JDBC学习笔记(1)——JDBC概述
JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...
- 【转】JDBC学习笔记(2)——Statement和ResultSet
转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数 ...
- 【转】JDBC学习笔记(1)——JDBC概述
转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...
- jdbc学习总结
jdbc学习总结: 一.简介: jdbc,直译为java连接数据库.实际为java为很好的操作数据库而提供的一套接口,接口的实现(即驱动)由各个数据库厂商提供. 二.知识要点: 连接5要素,3 ...
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- spring 学习(四): spring 的 jdbcTemplate 操作
spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...
随机推荐
- cadence 机械孔的制作
在平时画PCB的时候,会用到安装孔,好多人就是找个过孔,在原理图中连接GND,这样使用也可以,下面介绍一种正经机械孔的制作方法(自己摸索的),制作一个孔径为3mm的安装孔. 1 打开pad desig ...
- windows下SSH客户端远程访问Linux出现错误
- 20145120 《Java程序设计》第2周学习总结
20145120 <Java程序设计>第2周学习总结 教材学习内容总结 因为前面有学习过C语言以及汇编语言,类型.运算符.流程控制等很多都是之前接触过的,因此在学习第三章的时候感觉并非十分 ...
- SpringMVC+redis整合
在网络上有一个很多人转载的springmvc+redis整合的案例,不过一直不完整,也是被各种人装来转去,现在基本将该框架搭建起来. package com.pudp.bae.base; import ...
- 计划:怎样理解水平集方法 ITK Level set V4 框架介绍
简易解释:在曲面中插入一个平面所形成的轮廓,即是该轮廓的水平集表示,可见,该轮廓的水平集表示有多个.对于图像分割,在图像力的驱动下曲面进行更新. 轮廓的数学表达有隐式和显式两种表达.用曲面演化代替Fr ...
- 一点ASP.NET MVC Html.Helper类的方法
一点ASP.NET MVC Html.Helper类 这里就只写一个Html.ActionLink()和Html.DropdownList(). Html.ActionLink()里有三个参数,第一个 ...
- QQ炫舞官网选项卡效果
这篇博文里需要注意的是当点击事件发生的时候,需要用循环,重置标题的classname和标题底部都设置成隐藏,当点击的时候在加上标题的active属性和显示属性 代码地址:https://github. ...
- (ASP.NET)C#连接Oracle数据库示例(中文乱码问题解决)
接手了一个遗留的ASP.NET系统,数据库用的是Oracle,以前没搞过.NET和Oracle数据库,数据库搞了半天才解决乱码问题,在此做个笔记备忘. 1.下载安装ODAC 1)请去Oracle官网下 ...
- JAVA 获取系统环境变量
分享代码: package com.base.entity; import java.io.Serializable; import java.util.Comparator; /** * 系统环境变 ...
- C#动态多线程实例
在C#中用多线程并不难实现.它有一个命名空间:System.Threading,提供了多线程的支持. 要开启一个新线程,须要以下的初始化: ThreadStart startDownload = ne ...