JDBC操作MySQL Lob字段记实
NAME varchar(24) DEFAULT NULL,
TXT text,
IMG blob
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
import java.sql.*;
import java.io.*;
/**
* JDBC 读取MySQL lob字段测试
* File: TestLob4MySQL.java
* User: leizhimin
* Date: 2008-3-3 14:44:30
*/
public class TestLob4MySQL {
public static final String url = "jdbc:mysql://localhost/testdb";
public static final String username = "root";
public static final String password = "leizhimin";
public static final String driverClassName = "com.mysql.jdbc.Driver";
/**
* 数据库连接获取器
*
* @return 数据库连接
*/
public static Connection makeConnection() {
Connection conn = null;
try {
Class.forName(driverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 测试数据库连接
*/
public static void testConnection() {
Connection conn = makeConnection();
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM mysql.user");
while (rs.next()) {
String s1 = rs.getString(1);
System.out.println(s1);
}
rs.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 插入Lob字段
*/
public static void testInsertlob() {
Connection conn = makeConnection();
try {
conn.setAutoCommit(false);
File txtFile = new File("C:\\txt.txt");
File imgFile = new File("C:\\img.png");
int txt_len = (int) txtFile.length();
int img_len = (int) imgFile.length();
try {
InputStream fis1 = new FileInputStream(txtFile);
InputStream fis2 = new FileInputStream(imgFile);
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO T_LOB(NAME,TXT,IMG) VALUES('G',?,?)");
pstmt.setAsciiStream(1, fis1, txt_len);
pstmt.setBinaryStream(2, fis2, img_len);
pstmt.executeUpdate();
conn.commit();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 读取lob字段
*/
public static void testQueryLob() {
Connection conn = makeConnection();
try {
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT TXT,IMG FROM T_LOB");
int i = 1;
while (rs.next()) {
Clob clob = rs.getClob("TXT");
Blob blob = rs.getBlob("IMG");
InputStream txtIs = rs.getAsciiStream("TXT");
InputStream imgIs = rs.getBinaryStream("IMG");
InputStreamReader txtIsr = new InputStreamReader(txtIs);
InputStreamReader imgIsr = new InputStreamReader(imgIs);
BufferedReader buff_txtIsr = new BufferedReader(txtIsr);
BufferedReader buff_imgIsr = new BufferedReader(imgIsr);
String line = null;
while (null != (line = buff_txtIsr.readLine())) {
System.out.println(line); //将其输出至屏幕,实际你可以按照需要处理
}
File fileOutput = new File("c:\\img_x" + i + ".png");
FileOutputStream fo = new FileOutputStream(fileOutput);
int c;
while ((c = imgIs.read()) != -1)
fo.write(c);
fo.close();
System.out.println("img " + i + " retrieved!");
i++;
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 读取lob字段
*/
public static void testQueryLob1() {
Connection conn = makeConnection();
try {
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT TXT,IMG FROM T_LOB");
while (rs.next()) {
Clob clob = rs.getClob("TXT");
Blob blob = rs.getBlob("IMG");
InputStream txtIs = clob.getAsciiStream();
InputStream imgIs = blob.getBinaryStream();
InputStreamReader txtIsr = new InputStreamReader(txtIs);
InputStreamReader imgIsr = new InputStreamReader(imgIs);
BufferedReader buff_txtIsr = new BufferedReader(txtIsr);
BufferedReader buff_imgIsr = new BufferedReader(imgIsr);
String line = null;
while (null != (line = buff_txtIsr.readLine())) {
System.out.println(line); //将其输出至屏幕,实际你可以按照需要处理
}
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 删除lob字段
*/
public static void testDeleteLob() {
Connection conn = makeConnection();
try {
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
int row = stmt.executeUpdate("DELETE FROM T_LOB");
conn.commit();
System.out.println("删除 " + row + " 行数据!");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 读取lob字段
*/
public static void testUpdateLob() {
Connection conn = makeConnection();
try {
String in_str="HAHAHAHAHAHA!!!";
File in_file=new File("c:\\img_haha.png");
InputStream txt_is = string2InputStream(in_str);
InputStream img_is =new FileInputStream(in_file);
conn.setAutoCommit(false);
PreparedStatement pstmt = conn.prepareStatement("UPDATE T_LOB SET TXT=?, IMG=? WHERE NAME='G'");
pstmt.setAsciiStream(1,txt_is,in_str.getBytes().length);
pstmt.setBinaryStream(2,img_is,(int)in_file.length());
int row = pstmt.executeUpdate();
conn.commit();
txt_is.close();
img_is.close();
// System.out.println("更新 " + row + " 行数据!");
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) {
// testInsertlob();
// testQueryLob();
// testQueryLob1();
// testDeleteLob();
testUpdateLob();
}
public static InputStream string2InputStream(String str) {
if (str == null) return null;
return new ByteArrayInputStream(str.getBytes());
}
public static String inputStream2String(InputStream is) {
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String inputLine;
try {
while ((inputLine = br.readLine()) != null) {
sb.append(inputLine).append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}
相关文章:

placeholder
打开一个那边发过来的页面,里面全是placeholder。没见过,一时气愤全部ko,用传统的方法都能搞定的东西,为啥要标新立异! 后来发现如果想在input password里显示个把汉字,还真是不容易,总不能让我…

【直播】李祖贤:集成学习答疑直播之五 -- 常用集成思路
集成学习答疑直播之五 – 常用集成思路 集成学习 是首个横跨3个周期的长期组队学习,在 第24期组队学习 中进行到“第二期-模型集成思路”阶段。组队学习期间,课程设计者每周针对学习任务的重难点和学员的学习情况进行集中直播答疑,目前已经进…

参加Python培训班能找到工作吗?
参加Python培训班能找到工作吗?很多人都比较关心这个问题,尤其是正在参加Python培训的同学,想要了解这个问题,我们必须从Python就业市场、Python就业班优劣以及个人学习效果三个大的方面进行分析。来看看下面的详细介绍。 参加Python培训班能…

HTTP协议Etag详解
HTTP协议规格说明定义ETag为“被请求变量的实体值”。另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单独负责判断记号是什么及其含义,并在HTT…

【第13周复盘】小朋友们也开始卷了
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…
原生ajax+php上传图片的简单实现
前端 <input type"file" onclick"updown" accept"image/png,image/gif">//accept限制上传的类型<script> function upload1(obj){ var files obj.files ; var formData new FormData();$.ajax({url: download.php,type: "POS…

参加软件测试培训前景怎么样
软件测试在近几年的发展前景还是非常不错的,很多人都开始参加软件测试培训班学习技术,要想具体了解参加软件测试培训前景怎么样?来看看下面的详细介绍就知道了。 参加软件测试培训前景怎么样?各大招聘平台上,都能看到测试的影子,…

如果你喜欢一个程序员小伙
程序员向来是善于幽默自嘲的群体,但从某种程度上影响了咱程序员在广大女同胞心中的印象啊~~于是写下此篇(有从别处看到的3句加进来的), 就算是为咱程序员做个广告~~要是觉得有点过的…

遇到大容量磁盘你该怎么办?
GPT 磁盘分区:首先,你得有一块 GPT 分区的硬盘。小于 2 TB 的磁盘也可以转为 MBR 磁盘,但是大于 2 TB 的磁盘则需要使用 GPT 分区,否则大于 2 TB 的部分将被你封印。 挂载硬盘后,打开系统并以 root 身份登陆。这里博主…

如何解决Python3写入CSV出现‘gbk‘ codec can‘t encode的错误
今天,我在 Windows 上用 Python3 爬取知乎上有关中医的问答,但是在把爬取的内容写进CSV文件的时候,出现了以下异常。 UnicodeEncodeError: gbk codec cant encode character \u2630 in position 3969: illegal multibyte sequence经过上网查…

ui设计怎样做出有效果的视觉层级?
作为一名UI设计师,大家应该清楚的了解到每一款产品都有不同的风格和设计,但是每一款UI设计元素都是有通风之处的,如何能够做出有效的视觉层级,对用户的体验有着十分积极的影响。本期UI设计培训教程就为大家详细的介绍一下ui设计怎…

Java RandomAccessFile的使用
Java的RandomAccessFile提供对文件的读写功能,与普通的输入输出流不一样的是RamdomAccessFile可以任意的访问文件的任何地方。这就是“Random”的意义所在。 RandomAccessFile的对象包含一个记录指针,用于标识当前流的读写位置,这个位置可以向…
【组队学习】【24期】集成学习(中)
集成学习(中) 开源内容: https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning 基本信息 贡献人员:李祖贤、薛传雨、赵可、杨毅远、陈琰钰、李嘉骐学习周期:12天学习形式&a…

Android发布项目到外部仓库
为什么80%的码农都做不了架构师?>>> 关于android发布仓库到外部项目的文章,目前大概为分两类: 一种是发布到bintray、jcenter上,一种是将项目上传到github,然后利用jitpack自动打包,下面简单说…

Java零基础学习难吗
java编程是入行互联网的小伙伴们大多数的选择,那么对于零基础的小伙伴来说Java零基础学习难吗?如果你是初学者,你可以很好的理解java编程语言。并不困难。如果你的学习能力比较高,那么你对Java的理解会更快。而如果你恰巧已经掌握了c或c语言…

玩转“网上邻居”之网络配置(二)
接上篇二、混合系统网络目前实际应用中单一系统的对等网络已不是主流,主要是由于这种网络性能较低,缺乏很好看安全及网络管理能力。目前在各企事业单位中普遍应用的还是基于多系统的域结构混合网络。但因目前主流应用的系统比较多,所以各种网…

UVa 10180 - Rope Crisis in Ropeland!
题目链接:http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category41&pageshow_problem&problem1121 题意:给出两点坐标,用一条最短的线(曲线或者直线)连接起来,坐…
【组队学习】【24期】河北邀请赛(二手车价格预测)
河北邀请赛(二手车价格预测) 开源内容: https://github.com/datawhalechina/team-learning-data-mining/tree/master/SecondHandCarPriceForecast 数据挖掘实践(二手车价格预测)的内容来自 Datawhale与天池联合发起…

什么样的人合适学习Python?
什么样的人合适学习Python?近几年,关注Python技术的小伙伴越来越多,很多人都想知道Python培训好不好学?难不难学?哪些人适合学?来看看下面的详细介绍。 Python培训分享:什么样的人合适学习Python?想学好python,关键还是看三点…
Table doesn't have a primary key
从数据库取出来的数据,一般会放在一个DataTable中。但是,Insus.NET想实现一个小功能,就是在这个DataTable能快速找到某一行记录,来显示于asp.net页面上。这时我们可以使用DataTable的Find()成員函式來檢查資料是否已存在。但当Ins…
【组队学习】【24期】数据挖掘实践(智慧海洋)
数据挖掘实践(智慧海洋) 开源内容: https://github.com/datawhalechina/team-learning-data-mining/tree/master/wisdomOcean 基本信息 贡献人员:李运佳、李万业、赵信达、张晋、刘羽中、王贺、肖明远学习周期:12天…

vim 输入中文
收藏一些有关vim输入中文的链接为了以后方便查看 http://vimim.googlecode.com/svn/vimim/vimim.html http://www.wang3feng.com/2010/07/03/e5-ad-a6vim-e4-ba-8c-e5-a6-82-e4-bd-95-e5-9c-a8vim-e4-b8-ad-e6-9b-b4-e5-a5-bd-e7-9a-84-e8-be-93-e5-85-a5-e4-b8-ad-e6-96-87/ 本…

Web前端工程师的一些常见误区
想要作为一名合格的web前端工程师,那么掌握基本的开发技术是远远不够的,在职场中还要少犯一些错误,本期小编为大家分享的web前端培训教程主要是介绍一些web前端工程师常见的误区,希望对大家有所帮助。 web前端培训分享:…

WPF关闭应用程序,释放Window窗口资源方法
WindowsForm里一个Application.Exit();方法就可以关闭应用程序,释放掉资源。 WPF里Application类没有该方法,但是有一个Exit的事件驱动,在WPF应用程序里面关闭程序讲究很多: 在WPF应用程序的关闭是有ShutdownMode属性设置…

《Cisco/H3C交换机配置与管理完全手册(第2版)》终稿封面和目录
无数网友一直殷切期待和关注的《Cisco/H3C交换机配置与管理完全手册》(第2版)一书即将于本月底正式上市了。到时对于真实读者,写书评后可以参加全额返款的抽奖活动,加入我的微博(本博客首页中有),留意我发布的最新资讯…
【组队学习】【24期】Docker教程
Docker教程 开源内容: https://github.com/datawhalechina/team-learning-program/tree/master/Docker 基本信息 贡献人员:苏鹏、陈安东,于鸿飞,陈长沙,丁一超,乔石,刘雯静学习周期…

网站ui的配色有哪些需要注意的?
作为一名UI设计师,那么关于配色的问题是非常注重的,尤其是做一款网站设计,配色方面要非常注意,本期小编为大家介绍的UI设计培训教程就是关于网站ui的配色有哪些需要注意的?来看看下面的详细介绍。 UI设计培训分享:网站…

2、安装Lync Server 2013
一、实验环境拓扑的准备工作 二、开始安装Lync Server 2013 安装Lync Server系统主要包含以下的内容:安装本地配置存储、安装Lync Server 组件、请求并分配Lync证书、启动服务。 运行Lync Server 2013的安装程序,选择“安装或更新Lync Server系统”&…

!! 机器学习常用工具
http://fuliang.iteye.com/blog/955023 机器学习 Support Vector Machine SVMlightAn implementation of Vapniks Support Vector Machine LIBSVMA Library for Support Vector Machines Decision Tree C4.5The "classic" decision-tree tool, developed by J. R. Qu…

Datawhale组队学习周报(第010周)
本周(04月19日~04月25日),第 24 期组队学习正在如火如荼的进行中。本期组队学习,一共有 5 门开源课程,共组建了 6 个学习群,参与的学习者有 788 人。另外,第 25 期组队学习也蓄势待发准备与大家…