oracle如何导出Blob和clob大字段
来源:互联网 发布:淘宝当当网是正品吗 编辑:程序博客网 时间:2024/04/28 03:07
需要一个ExportBlobJianrong .java和config.xml,文件在下面提供:
package thinkinjava;
import java.io.BufferedWriter;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class ExportBlobJianrong {
private static String CONNSTRING = "jdbc:oracle:thin:@198.167.14.13:1593:kkt";
private static String USERNAME = "user";
private static String PASSWORD = "oracle";
private static String TABLE = "t_new";
private static String WHERE = "1=1 and id in ('nihao')";
private static String ID = "ID";
private static String OUTPUT = "kkt.sql";
static {
try {
File file = new File("config.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder buider = factory.newDocumentBuilder();
Document parse = buider.parse(file);
NodeList root = parse.getElementsByTagName("resource");
if(root != null & root.getLength() >0){
CONNSTRING = parse.getElementsByTagName("connectstr").item(0).getFirstChild().getNodeValue();
USERNAME = parse.getElementsByTagName("username").item(0).getFirstChild().getNodeValue();
PASSWORD = parse.getElementsByTagName("password").item(0).getFirstChild().getNodeValue();
TABLE = parse.getElementsByTagName("table").item(0).getFirstChild().getNodeValue();
WHERE = parse.getElementsByTagName("filtersql").item(0).getFirstChild().getNodeValue();
ID = parse.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
OUTPUT = parse.getElementsByTagName("output").item(0).getFirstChild().getNodeValue();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(CONNSTRING, USERNAME, PASSWORD);
String sql = "select * from " + TABLE + " t where " + WHERE;
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
StringBuffer dump = new StringBuffer("-- export from sql\r\n-- ").append(sql).append("\r\n");
dump.append("declare\r\n");
dump.append("v_blob blob;\r\n");
dump.append("v_clob clob;\r\n");
dump.append("v_lang varchar(50);\r\n");
dump.append("v_terr varchar(50);\r\n");
dump.append("v_schar varchar(50);\r\n");
dump.append("v_dchar varchar(50);\r\n");
dump.append("begin\r\n");
dump.append("delete from "+TABLE+" t where "+ WHERE+";\r\n");
dump.append("v_schar := 'AMERICAN_AMERICA.AL16UTF16';\r\n");
dump.append("select value into v_lang from nls_database_parameters where Parameter in ('NLS_LANGUAGE');\r\n");
dump.append("select value into v_terr from nls_database_parameters where Parameter in ('NLS_TERRITORY');\r\n");
dump.append("select value into v_dchar from nls_database_parameters where Parameter in ('NLS_NCHAR_CHARACTERSET');\r\n");
dump.append("v_dchar := v_lang || '_' || v_terr || '.' || v_dchar;\r\n");
while(rs.next()) {
String insert = "insert into " + TABLE;
String cols = " (";
String vals = " values (";
ResultSetMetaData md = rs.getMetaData();
String idString[] = ID.split(",");
StringBuffer lobDump = new StringBuffer();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
for(int i = 0; i < md.getColumnCount(); i ++) {
String c = md.getColumnName(i + 1);
Object v = rs.getObject(c);
String v1 = null;
if(v instanceof java.sql.Blob) {
v1 = "empty_blob()";
lobDump.append(createBlobDump(TABLE, WHERE, idString,rs, c, (Blob)v));
}
else if (v instanceof java.sql.Date){
v1 = v == null ? "null" : "to_date('"+sdf.format(v)+"','yyyy-MM-dd hh24:mi:ss')";
}
else if(v instanceof java.sql.Clob) {
v1 = "empty_clob()";
lobDump.append(createClobDump(TABLE, WHERE, idString,rs, c, (Clob)v));
} else {
v1 = v == null ? "null" : "'" + v.toString() + "'";
}
cols += c + (i + 1 < md.getColumnCount() ? ", " : ")");
vals += v1 + (i + 1 < md.getColumnCount() ? ", " : ")");
}
insert += cols + vals + ";";
dump.append(insert).append("\r\n");
dump.append(lobDump).append("\r\n");
}
dump.append("commit;\r\nend;\r\n/\r\n");
System.out.println(dump);
File out = new File(OUTPUT);
if(!out.exists()){
out.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new FileWriter(out));
bw.write(dump.toString());
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static String createClobDump(String table, String where,String[] idString,ResultSet rs, String col, Clob v) throws SQLException, IOException {
StringBuffer sb = new StringBuffer();
String tiaojian ="1=1 ";
String kg ;
for(String ik:idString){
kg = rs.getString(ik);
if(kg==null){
tiaojian = tiaojian +" and "+ik+" is null";
}else{
tiaojian =tiaojian +" and "+ ik+"='"+kg+"'";
}
}
String updateSql = "select " + col + " into v_clob from " + table + " where "+tiaojian +" for update;";
sb.append(updateSql).append("\r\n");
Reader r = v.getCharacterStream();
char[] cs = new char[50];
int len = 0;
while((len = r.read(cs)) > 0) {
String str = new String(Arrays.copyOf(cs, len));
sb.append("dbms_lob.append(v_clob, utl_raw.cast_to_nvarchar2(utl_raw.convert('");
for (int i = 0; i < str.length(); i ++) {
String ncs = Integer.toHexString(str.codePointAt(i) & 0xffff);
for(int j = ncs.length(); j < 4; j ++) {
ncs = "0" + ncs;
}
sb.append(ncs);
}
sb.append("', v_dchar, v_schar)));\r\n");
}
return sb.toString();
}
private static String createBlobDump(String table, String where, String[] idString,ResultSet rs, String col, Blob v) throws SQLException, IOException {
StringBuffer sb = new StringBuffer();
String tiaojian ="1=1";
String kg ;
for(String ik:idString){
kg = rs.getString(ik);
if(kg==null){
tiaojian = tiaojian +" and "+ik+" is null";
}else{
tiaojian =tiaojian +" and "+ ik+"='"+kg+"'";
}
}
String vId = rs.getString(ID);
String []vidStrings = vId.split(",");
String updateSql = "select " + col + " into v_blob from " + table + " where "+tiaojian +" for update;";
sb.append(updateSql).append("\r\n");
InputStream r = v.getBinaryStream();
byte[] bs = new byte[50];
int len = 0;
while((len = r.read(bs)) > 0) {
sb.append("dbms_lob.append(v_blob, utl_raw.cast_to_raw(utl_raw.cast_to_varchar2('");
for (int i = 0; i < len; i ++) {
byte b = bs[i];
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex);
}
sb.append("')));\r\n");
}
return sb.toString();
}
}
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<resource>
<connectstr>jdbc:oracle:thin:@198.167.14.13:1593:kkt</connectstr>
<username>user</username>
<password>oracle</password>
<table>t_new</table>
<filtersql>1=1 and id in ('kk')</filtersql>
<id>ID,TwoId</id>
<output>a.sql</output>
</resource>
config.xml文件配置说明:
1.connectstr配置数据源
2.username数据库用户名
3.password数据库密码
4.table要导出的表名
5.filtersql过滤的条件
6.id导出表的主键,如果要联合主键的话,要将两个主键都加上去
7.output导出的sql会写在那个文件下面。
0 0
- oracle如何导出Blob和clob大字段
- oracle中的大字段clob和blob操作
- Oracle中的大字段 Blob/Clob
- Oracle中的大字段 Blob/Clob
- Oracle中的大字段 Blob/Clob
- Oracle中的大字段 Blob/Clob
- Oracle数据库导出大字段(CLOB)数据
- Oracle数据库导出大字段(CLOB)数据
- Oracle9i客户端EXP导出高版本数据库中BLOB和CLOB大字段的问题
- Oracle9i客户端EXP导出高版本数据库中BLOB和CLOB大字段的问题
- Oracle9i客户端EXP导出高版本数据库中BLOB和CLOB大字段的问题
- db2的大字段CLOB,BLOB,DBCLOB
- db2的大字段CLOB,BLOB,DBCLOB
- Spring 方式处理 Clob、Blob 大字段
- oracle 读取blob大字段
- imp/exp 导出导入含有CLOB,BLOB大字段的表出现问题解决办法
- Spring+Hibernate中处理Oracle的大字段(clob二进制\blob大字符串)
- 从 Oracle 大字段(blob,clob)的读、写认识 Java JDBC操作全攻略
- 微信公众号开发(一)——开发模式接入,消息的接收与响应
- 通过ricequant监测雪球舆情数据
- LeetCode Weekly Contest 30
- Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
- 配好caffe后,编译MATLAB接口
- oracle如何导出Blob和clob大字段
- Thinking in Java (Java 编程思想)
- 浅谈Java比较器comparable/comparator
- 复习----常见的排序算法
- Push rejected: Push to origin/master was rejected
- BZOJ 1430: 小猴打架 树的prufer编码
- 关于ISE调用modelsim缺少仿真文件
- [摘抄-学习中] Java中String 的妙用
- 基于Kinect v2+PCL的模型奶牛重建(中)——地面去除与法向量计算