JDBC以及相关技术学习(五)----PreparedStatement特殊参数处理
2013-04-15 21:21
519 查看
PreparedStatement主要有三种特殊的参数,分别为日期类型、大文本流、字节流。
(1)日期类型
先上代码:
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
String sql = "insert into UserInfo(name,birthday,account) values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS) ;//加上参数后,会自动返回主键
ps.setString(1, user.getName());
ps.setDate(2, new java.sql.Date( user.getBirthday().getTime()));//注意这里两个DATE需要转换
ps.setFloat(3, user.getAccount());
int i = ps.executeUpdate();
请看红色部分,ps.setDate参数类型为:java.sql.Date,但实际我们使用日期为java.util.date,两者需要互相转换才能使用,转换的方法也很简单,采用:
new java.sql.Date( java.util.Date对象的getTime() 方法 )
注意:java.sql.Date继承自java.util.Date,但多了两个方法,一个是将字符串转换为DATE,一个是将DATE转换为字符串。
(2)大文本流
注意,大文本流在SQL SERVER里面对应的是text类型
static void create(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = JDBCToolSingleTon.getInstance().getConnection();
String sql = "insert into clob_test(big_text) values(?)";
ps = conn.prepareStatement(sql);
File file = new File("文本文件的所在路径");
Reader reader = new BufferedReader(new FileReader(file));
ps.setCharacterStream(1, reader,(int)file.length());
int i = ps.executeUpdate();
reader.close();
JDBCToolSingleTon.getInstance().freeResource(conn, null, ps);
}
catch(Throwable e){
e.printStackTrace();
}
}
public static void read() throws SQLException, IOException{
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
Statement statement = conn.createStatement();
String sql = "select big_text from clob_test";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
Clob clob = resultSet.getClob(1);//在JAVA里面string没有限制,也可以直接GetString出来,SetString进去
File file = new File("新文件保存路径");//带缓存的IO操作
Writer writer = new BufferedWriter(new FileWriter(file));
Reader reader = clob.getCharacterStream();
char[] buff = new char[1024];
for(int i = 0; (i=reader.read(buff))>0;){
writer.write(buff, 0, i);
}
writer.close();
reader.close();
}
jDBCToolSingleTon.freeResource(conn, resultSet, statement);
}
(3)字节流
注意:字节流在SQL SERVER里面对应的是Image类型
static void create(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = JDBCToolSingleTon.getInstance().getConnection();
String sql = "insert into blob_test(big_bit) values(?)";
ps = conn.prepareStatement(sql);
File file = new File("文件所在路径");
InputStream in = new BufferedInputStream(new FileInputStream(file));
ps.setBinaryStream(1, in, (int)file.length());
int i = ps.executeUpdate();
in.close();
JDBCToolSingleTon.getInstance().freeResource(conn, null, ps);
}
catch(Throwable e){
e.printStackTrace();
}
}
public static void read() throws SQLException, IOException{
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
Statement statement = conn.createStatement();
String sql = "select big_bit from blob_test";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
File file = new File("文件所在路径");
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
InputStream inputStream = resultSet.getBinaryStream(1);
byte[] buff = new byte[1024];
for(int i = 0; (i=inputStream.read(buff))>0;){
outputStream.write(buff, 0, i);
}
outputStream.close();
inputStream.close();
}
jDBCToolSingleTon.freeResource(conn, resultSet, statement);
}
(1)日期类型
先上代码:
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
String sql = "insert into UserInfo(name,birthday,account) values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS) ;//加上参数后,会自动返回主键
ps.setString(1, user.getName());
ps.setDate(2, new java.sql.Date( user.getBirthday().getTime()));//注意这里两个DATE需要转换
ps.setFloat(3, user.getAccount());
int i = ps.executeUpdate();
请看红色部分,ps.setDate参数类型为:java.sql.Date,但实际我们使用日期为java.util.date,两者需要互相转换才能使用,转换的方法也很简单,采用:
new java.sql.Date( java.util.Date对象的getTime() 方法 )
注意:java.sql.Date继承自java.util.Date,但多了两个方法,一个是将字符串转换为DATE,一个是将DATE转换为字符串。
(2)大文本流
注意,大文本流在SQL SERVER里面对应的是text类型
static void create(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = JDBCToolSingleTon.getInstance().getConnection();
String sql = "insert into clob_test(big_text) values(?)";
ps = conn.prepareStatement(sql);
File file = new File("文本文件的所在路径");
Reader reader = new BufferedReader(new FileReader(file));
ps.setCharacterStream(1, reader,(int)file.length());
int i = ps.executeUpdate();
reader.close();
JDBCToolSingleTon.getInstance().freeResource(conn, null, ps);
}
catch(Throwable e){
e.printStackTrace();
}
}
public static void read() throws SQLException, IOException{
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
Statement statement = conn.createStatement();
String sql = "select big_text from clob_test";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
Clob clob = resultSet.getClob(1);//在JAVA里面string没有限制,也可以直接GetString出来,SetString进去
File file = new File("新文件保存路径");//带缓存的IO操作
Writer writer = new BufferedWriter(new FileWriter(file));
Reader reader = clob.getCharacterStream();
char[] buff = new char[1024];
for(int i = 0; (i=reader.read(buff))>0;){
writer.write(buff, 0, i);
}
writer.close();
reader.close();
}
jDBCToolSingleTon.freeResource(conn, resultSet, statement);
}
(3)字节流
注意:字节流在SQL SERVER里面对应的是Image类型
static void create(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = JDBCToolSingleTon.getInstance().getConnection();
String sql = "insert into blob_test(big_bit) values(?)";
ps = conn.prepareStatement(sql);
File file = new File("文件所在路径");
InputStream in = new BufferedInputStream(new FileInputStream(file));
ps.setBinaryStream(1, in, (int)file.length());
int i = ps.executeUpdate();
in.close();
JDBCToolSingleTon.getInstance().freeResource(conn, null, ps);
}
catch(Throwable e){
e.printStackTrace();
}
}
public static void read() throws SQLException, IOException{
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
Statement statement = conn.createStatement();
String sql = "select big_bit from blob_test";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
File file = new File("文件所在路径");
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
InputStream inputStream = resultSet.getBinaryStream(1);
byte[] buff = new byte[1024];
for(int i = 0; (i=inputStream.read(buff))>0;){
outputStream.write(buff, 0, i);
}
outputStream.close();
inputStream.close();
}
jDBCToolSingleTon.freeResource(conn, resultSet, statement);
}
相关文章推荐
- JDBC以及相关技术学习(六)----批量SQL处理
- 尽管关于Java中文问题的讨论已经相当多了,但由于Java的相关技术标准繁多,面向Java的Web服务器、应用服务器以及JDBC数据库驱动等都没有官方的标准,所以Java应用在处理中文时所存在的问
- JDBC以及相关技术学习(七)----事务机制与保存点
- JDBC以及相关技术学习(三)----运载查询结果的利器ResultSet
- JDBC以及相关技术学习(一)----第一个JDBC程序
- JDBC以及相关技术学习(四)----运载SQL进行查询交通工具Statement
- JDBC以及相关技术学习(九)----简单的连接池实现
- JDBC以及相关技术学习(二)----把JDBC获取连接封装成一个工具类
- JDBC以及相关技术学习(十)----拦截Connection的close方法
- JDBC以及相关技术学习(八)----JDBC元数据
- cesium 学习笔记(二) 初始化Viewer以及相关参数
- extjs 循环执行多个异步请求时,参数和后台以及相关问题和衍生问题的处理
- 【学习摘记】马士兵JDBC技术_课时14_JDBC处理可滚动的结果集
- [学习整理] VNC相关命令,配置gnome,以及常见错误处理
- 【IOS移动开发技术】iOS软件开发中关于屏幕旋转处理相关的学习笔记
- 【学习摘记】马士兵bbs改良版_课时32_删除帖子_1——删除的递归以及相关处理,依旧是难点
- 使用<a>标签调用struts2的action、传递动态参数、以及参数中出现加号等特殊字符的处理方法
- Docker+ K8S 学习(一):Docker 介绍以及其相关术语、底层原理和技术
- JDBC 学习笔记(三)—— 数据源(数据库连接池):DBCP数据源、C3P0 数据源以及自定义数据源技术
- 【学习摘记】马士兵JDBC技术_课时15_JDBC处理可更新的结果集