JDBC中CLOB字段类型的示例
来源:互联网 发布:无锡 网络 公司名录 编辑:程序博客网 时间:2024/05/02 00:45
JDBC中CLOB字段类型的示例
测试数据库MYSQL
测试表:
CREATE TABLE `jdbc.clob_test` ( `
id` INTEGER NOT NULL AUTO_INCREMENT,
clob` TEXT NOT NULL,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
示例代码:
package test.jdbc;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* 这是一个CLOB字段类型的示例
*/
public class ClobRW {
public static void main(String[] args) throws Exception {
create();
read();
}
public static void create()
throws Exception {
// TODO Auto-generated method stub
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc", "root", "");
String sql = "insert into clob_test (clob) values (?)";
PreparedStatement stat = conn.prepareStatement(sql);
File file = new File("src/test/jdbc/ClobRW.java");
Reader reader = new BufferedReader(new FileReader(file));
stat.setCharacterStream(1, reader, (int)file.length());
stat.executeUpdate();
reader.close();
stat.close();
conn.close();
}
public static void read() throws Exception {
// TODO Auto-generated method stub
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc", "root", "");
String sql = "select clob from clob_test";
PreparedStatement stat = conn.prepareStatement(sql);
ResultSet rs = stat.executeQuery();
while (rs.next()) {
Clob clob = rs.getClob("clob");
Reader reader = clob.getCharacterStream();
File file = new File("ClobRW.java.bak");
Writer writer = new BufferedWriter(new FileWriter(file));
char[] cbuf = new char[1024];
for (int i = 0; (i = reader.read(cbuf)) > 0;) {
writer.write(cbuf, 0, i);
}
writer.close();
reader.close();
}
rs.close();
stat.close();
conn.close();
}
}
运行结果:
create方法的结果可以用desc clob_test命令看表中插入的文件内容
read方法的结果可以看当前目录下生成的ClobRW.java.bak文件的内容
总结:
在向clob字段类型中插入数据时,要使用javaio的reader,读入文件。
而相反从clob字段中读出数据时,同样使用javaio的reader,再用javaio的writer写入文件。
实践时的发生的问题和原因调查:
如果在设置字符流的地方不加类型转换的话,如下:
stat.setCharacterStream(1, reader, file.length());
则会出现如下错误
Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setCharacterStream(ILjava/io/Reader;J)V
at test.jdbc.ClobRW.create(ClobRW.java:37)
at test.jdbc.ClobRW.main(ClobRW.java:23)
后来看了看java和mysql的jdbc驱动两方面的代码,原因明白,原来是用的jdk1.6的版本中,有长度为long类型的方法。
而对应的mysql的jdbc驱动jar中,还没有实现。
将其进行类型转换后,即可正常运行。
测试数据库MYSQL
测试表:
CREATE TABLE `jdbc.clob_test` ( `
id` INTEGER NOT NULL AUTO_INCREMENT,
clob` TEXT NOT NULL,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
示例代码:
package test.jdbc;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* 这是一个CLOB字段类型的示例
*/
public class ClobRW {
public static void main(String[] args) throws Exception {
create();
read();
}
public static void create()
throws Exception {
// TODO Auto-generated method stub
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc", "root", "");
String sql = "insert into clob_test (clob) values (?)";
PreparedStatement stat = conn.prepareStatement(sql);
File file = new File("src/test/jdbc/ClobRW.java");
Reader reader = new BufferedReader(new FileReader(file));
stat.setCharacterStream(1, reader, (int)file.length());
stat.executeUpdate();
reader.close();
stat.close();
conn.close();
}
public static void read() throws Exception {
// TODO Auto-generated method stub
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc", "root", "");
String sql = "select clob from clob_test";
PreparedStatement stat = conn.prepareStatement(sql);
ResultSet rs = stat.executeQuery();
while (rs.next()) {
Clob clob = rs.getClob("clob");
Reader reader = clob.getCharacterStream();
File file = new File("ClobRW.java.bak");
Writer writer = new BufferedWriter(new FileWriter(file));
char[] cbuf = new char[1024];
for (int i = 0; (i = reader.read(cbuf)) > 0;) {
writer.write(cbuf, 0, i);
}
writer.close();
reader.close();
}
rs.close();
stat.close();
conn.close();
}
}
运行结果:
create方法的结果可以用desc clob_test命令看表中插入的文件内容
read方法的结果可以看当前目录下生成的ClobRW.java.bak文件的内容
总结:
在向clob字段类型中插入数据时,要使用javaio的reader,读入文件。
而相反从clob字段中读出数据时,同样使用javaio的reader,再用javaio的writer写入文件。
实践时的发生的问题和原因调查:
如果在设置字符流的地方不加类型转换的话,如下:
stat.setCharacterStream(1, reader, file.length());
则会出现如下错误
Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setCharacterStream(ILjava/io/Reader;J)V
at test.jdbc.ClobRW.create(ClobRW.java:37)
at test.jdbc.ClobRW.main(ClobRW.java:23)
后来看了看java和mysql的jdbc驱动两方面的代码,原因明白,原来是用的jdk1.6的版本中,有长度为long类型的方法。
而对应的mysql的jdbc驱动jar中,还没有实现。
将其进行类型转换后,即可正常运行。
本文出自 “点点滴滴” 博客,请务必保留此出处http://kin111.blog.51cto.com/738881/168437
本文出自 51CTO.COM技术博客
- JDBC中CLOB字段类型的示例
- 使用JDBC操作基于Oracle的CLOB,BLOB字段类型
- jdbc 存 oracle数据库CLOB 类型字段
- 如何用JSP处理Oracle中CLOB类型的字段
- Oracle中对clob类型字段的操作
- 如何用JSP处理Oracle中CLOB类型的字段
- 如何用jsp处理Oracle中CLOB类型的字段
- Oracle中如何查询CLOB字段类型的内容
- Oracle 11g中CLOB字段类型的数据读取
- jdbc处理oracle的clob字段
- jdbc 修改 数据的clob字段
- JDBC读取clob字段
- JDBC更新CLOB字段
- 通过JDBC 操作 ORACLE BLOB,CLOB字段类型
- (转)通过JDBC 操作 ORACLE BLOB,CLOB字段类型
- J2EE操作Oracle的clob类型字段
- J2EE操作Oracle的clob类型字段
- J2EE操作Oracle的clob类型字段
- OSPF详解(一):ospf与rip的区别
- 判断字符串是否是日期格式
- 转义字符
- 用Enter键完成Tab的功能
- UNION 和UNION ALL 的区别
- JDBC中CLOB字段类型的示例
- 异常捕获的问题
- zend framework php 小结1
- [vc文件]vc所支持的文件类型
- servlet的介绍与学习
- 2008年软件测试行业调查_来自于51testing
- 更新了一下自己的POJO代码生成器
- ASP基础知识
- 学生骨干培训班