JDBC存取二进制文件示例
PutFile.java
import java.io.File;
import java.io.FileInputStream;
import java.sql.*; public class PutFile { public static void main(String args[]) { Connection conn = null;
PreparedStatement psmd = null;
String sql = null; try {
conn = ConnUtil.getConn();
File file = new File("F:\\1.jpg");// 要转换的文件
FileInputStream inputStream = new FileInputStream(file);// 将文件按二进制存储在一个字段内
// CREATE TABLE images (imgname text, img bytea);
sql = " insert into images values(?,?)";
psmd = conn.prepareStatement(sql);
psmd.setString(1, file.getName());
psmd.setBinaryStream(2, inputStream, (int) file.length());
int rs = psmd.executeUpdate(); if (rs < 0) {
System.out.println("存入数据失败!!!");
} else {
System.out.println("存入数据成功!!!");
}
} catch (Exception e) {
e.printStackTrace();
}
if (psmd != null) {
try {
psmd.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
GetFile.java
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.*; public class GetFile { public static void main(String args[]) { Connection conn = null;
PreparedStatement psmd = null;
String sql = null;
OutputStream out = null; try {
conn = ConnUtil.getConn();
// CREATE TABLE images (imgname text, img bytea);
sql = " SELECT img FROM images WHERE imgname = ?";
psmd = conn.prepareStatement(sql);
psmd.setString(1, "1.jpg");
ResultSet rs = psmd.executeQuery();
while(rs.next()) {
byte[] imgBytes = rs.getBytes(1);
// 实例化OutputStream对象,在f盘创建一个图片文件
out = new FileOutputStream("f:\\2.jpg");
// 将文件输出,内容则为byte数组里面的数据
out.write(imgBytes);
out.flush();
System.out.println("获取数据成功!!!");
}
} catch (Exception e) {
e.printStackTrace();
} if (psmd != null) {
try {
psmd.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
ConnUtil.java import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class ConnUtil { public static Connection getConn() {
Connection conn = null;
try {
Class.forName("com.scistor.swift.jdbc.Driver"); // 驱动
String url = "jdbc:swift://192.168.8.103:2345/swfit"; // 连接数据库的url
try {
conn = DriverManager.getConnection(url, "super", "111111"); // super 为数据库用户名,111111为密码
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} return conn;
} }
JDBC存取二进制文件示例的更多相关文章
- Spring JDBC常用方法详细示例
Spring JDBC使用简单,代码简洁明了,非常适合快速开发的小型项目.下面对开发中常用的增删改查等方法逐一示例说明使用方法 1 环境准备 启动MySQL, 创建一个名为test的数据库 创建Mav ...
- Spring JDBC SqlUpdate类示例
org.springframework.jdbc.object.SqlUpdate类提供了表示SQL更新的可重用操作对象. 使用到的 Student 表的结构如下 - CREATE TABLE Stu ...
- Spring JDBC StoredProcedure类示例
org.springframework.jdbc.core.StoredProcedure类是RDBMS存储过程的对象抽象的超类.这个类是抽象的,目的是让子类将提供一个用于调用的类型化方法,该方法委托 ...
- Spring JDBC SqlQuery类示例
org.springframework.jdbc.object.SqlQuery类提供了表示SQL查询的可重用操作对象. 使用到的 Student 表的结构如下 - CREATE TABLE Stud ...
- Spring JDBC SimpleJdbcCall类示例
org.springframework.jdbc.core.SimpleJdbcCall类是表示对存储过程或存储函数的调用的多线程,可重用的对象. 它提供元数据处理以简化访问基本存储过程/函数所需的代 ...
- Spring JDBC SimpleJdbcInsert类示例
org.springframework.jdbc.core.SimpleJdbcInsert类是一个多线程,可重用的对象,为将数据插入表提供了易用的功能.它提供元数据处理以简化构建基本insert语句 ...
- Spring JDBC RowMapper接口示例
JdbcTemplate类使用org.springframework.jdbc.core.RowMapper <T>接口在每行的基础上映射ResultSet的行.该接口的实现执行将每行映射 ...
- Spring JDBC ResultSetExtractor接口示例
org.springframework.jdbc.core.ResultSetExtractor接口是JdbcTemplate的查询方法使用的回调接口.此接口的实现执行从ResultSet提取结果的实 ...
- Spring JDBC PreparedStatementSetter接口示例
org.springframework.jdbc.core.PreparedStatementSetter接口充当JdbcTemplate类使用的一般回调接口.该接口在JdbcTemplate类提供的 ...
随机推荐
- 转 Warning:MongoDB Replica Sets配置注意事项
我们知道,MongoDB不提供单机的数据安全性,取而代之的是提供了Replica Sets的高可用方案.官方文档中提到的案例是三个节点组成的Replica Sets,这样在其中任何一个节点宕机后都会自 ...
- gitlab配置邮件通知
配置用户提交评论.添加issue等的邮件通知: Gitlab邮件提醒方便跟踪项目进度,在这里介绍两种方式,一种是用系统的sendmail发送邮件,另一种是GMAIL的stmp来发送邮件 第一种 用系统 ...
- easy_install jinja2 mac linux
error: can't create or remove files in install directory The following error occurred while trying t ...
- Swift - 自动布局库SnapKit的使用详解1(配置、使用方法、样例)
为了适应各种屏幕尺寸,iOS 6后引入了自动布局(Auto Layout)的概念,通过使用各种 Constraint(约束)来实现页面自适应弹性布局. 在 StoryBoard 中使用约束实现自动布局 ...
- NSArray和NSDictionary的混合
- 读取raw文件的方法。
Android开发者有些文件比如音频,视频,.html,.mp3等等这些文件不希望编译器编译而保持原始原貌打包进apk文件(这在游戏开发中很常见和普遍,如游戏用到的游戏音乐.图等资源),那么可以使用A ...
- ajax状态码
1- AJAX状态值与状态码区别 AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤.如:正在发送,正在响应等,由AJAX对象与服务器交互 ...
- Oracle合并函数内容
--MINUS去差集,取第一个集合有的而第二集合没有的,并以第一个字段排序select t.bumenbm from T_HQ_BM t minus select b.bumenbm from t_h ...
- bzoj 1911: [Apio2010]特别行动队
#include<cstdio> #include<iostream> #define M 1000009 #define ll long long using namespa ...
- C++定义构造函数必须使用初始化列表的场合
明其理,而知其然也. 先给理论.1. 初始化 != 赋值. a.初始化代表为变量分配内存. 变量在其定义处被编译器初始化(编译时). 在函数中, 函数参数初始化发生在函数调用时(运行时). b.赋值代 ...