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 层. ...
随机推荐
- linux终端io笔记
简介 终端的两种工作模式:以行为单位的工作模式,以字符数或时间为单位自定义模式 终端判断函数: int isatty(int fd) 终端属性的获取与设置: int tcgetattr(int fd, ...
- cdev_系列函数
内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct cdev { struct kobject ...
- matlab实现雅可比、高斯塞德尔、后项误差计算
稀疏矩阵生成: function [a, b] = aparsesetup(n) e = ones(n, 1); n2 = n / 2; a = spdiags([-e 3*e -e], -1:1, ...
- kruskal --- c++ (2)
#include <cstdio> #include <algorithm> using namespace std; struct aaa{ int l,r,w; bool ...
- LoadRunner 学习笔记(2)VuGen运行时设置Run-Time Setting
定义:在Vugen中Run-Time Setting是用来设置脚本运行时所需要的相关选项
- 【转】 java自定义注解
java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能. 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annot ...
- Ubuntu 下为 Idea 创建启动图标.
默认情况下,ubuntu将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,需要在该目录下创建一个名为“Idea.desktop”的文件.通 ...
- UI控件tag属性和魔法数字的处理
说明:tag属性有很大的用处,它就好像每个UI控件的id,当多个按钮指向同一个监听方法时,可以给方法带参数UIButton,然后根据不同的tag值 来判断执行哪个按钮的监听事件: - (IBActio ...
- [转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测
Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较. 图像的边缘检测的原理是检测出图像中所有灰度值变化较大 ...
- 【转载】Spring加载resource时classpath*:与classpath:的区别
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:kyfxbl 原文地址: spring配置中classpath和cla ...