JAVA读取CLOB字段

1、将数据库某字段的内容导出到指定的文件

数据库表结构如下:

表MAXPRESENTATION

APP
VARCHAR2(10)

PRESENTATION
CLOB


MAXPRESENTATIONID
NUMBER

ROWSTAMP
VARCHAR2(40)



[注]:以APP字段的内容做为导出的文件名,PRESENTATION字段的内容做为该文件的内容,该字段的编码格式为:UTF-8

程序清单如下:


package file;
import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.sql.Clob;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

* 文件导出


*


* @author songl

* @version 1.0 2005.12.2

*/

public class ExpFile {



public static void main(String args[]) throws ClassNotFoundException, IOException {

Connection con = null;

Statement stmt = null;

ResultSet rs = null;

try{

String url = "jdbc:oracle:thin:@IP:1521:system";

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

con = DriverManager.getConnection(url,"maximo","maximo");

stmt = con.createStatement();



System.out.println("请指定导入的文件名:");

InputStreamReader irFile = new InputStreamReader(System.in);

BufferedReader inFile = new BufferedReader(irFile);

String sFile = inFile.readLine();

sFile = sFile.toUpperCase();

if(sFile!=null && !sFile.equalsIgnoreCase("")){

rs = stmt.executeQuery("select * from MAXPRESENTATION

where APP='"+sFile+"'");

}else{

rs = stmt.executeQuery("select * from MAXPRESENTATION");

}

while(rs.next()){

//新建文件

System.out.println(rs.getString(1));

String strName = rs.getString(1);

strName = strName+".xml";

File f1= new File("/epmxes/epmxes/res/presentation",strName);

if(f1.isFile()==false){

try {

f1.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

String strNR = null;

//读取文件内容

Clob clob = rs.getClob(2);


strNR = clob.getSubString( (long) 1, (int) clob.length());


//写入文件,此处要用字节流来读取,还要指定编码格式,以免乱码

OutputStreamWriter isw = new OutputStreamWriter(new


FileOutputStream(f1),"UTF-8");


BufferedWriter bw = new BufferedWriter(isw);

bw.write(strNR,0,strNR.length());

bw.close();

}else{

System.out.println("文件:"+strName+"已经存在!是否覆盖?y/n");

InputStreamReader ir;

BufferedReader in;

ir=new InputStreamReader(System.in);

in=new BufferedReader(ir);

String s=in.readLine();

if(s.equalsIgnoreCase("y")){

System.out.println("文件:"+strName+"被覆盖!");

String strNR = null;

Clob clob = rs.getClob(2);

//读取文件内容

strNR = clob.getSubString( (long) 1, (int) clob.length());

System.out.println("文件内容如下:");

System.out.println(strNR);

//写入文件

OutputStreamWriter isw = new OutputStreamWriter(new

FileOutputStream(f1),"UTF-8");

System.out.println(isw.getEncoding());

BufferedWriter bw = new BufferedWriter(isw);

bw.write(strNR,0,strNR.length());

bw.close();

}else if(s.equalsIgnoreCase("n")){

System.out.println("文件:"+strName+"没有被覆盖!");

}else{

System.out.println("输入的字符有误!请重新运行程序!");

}

}

}

}catch(SQLException ex){

ex.printStackTrace();

}finally{

try{

rs.close();

stmt.close();

con.close();

}catch(SQLException ex){

ex.printStackTrace();

}

}

}

}


2、将文件内容存入数据库的表中相应的字段

程序清单如下:

package file;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.io.Writer;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

* 导入数据库


*


* @author songl

* @version 1.0 2005.12.2

*/

public class ImpDb {

public static void main(String args[]) {

Connection con = null;

ResultSet resultset = null;

Statement statement = null;

Statement pstmt = null;

try{

System.out.println("请指定导入数据库的文件名:");

InputStreamReader irFile = new InputStreamReader(System.in);

BufferedReader inFile = new BufferedReader(irFile);

String sFile = inFile.readLine();

if(sFile!=null && !sFile.equalsIgnoreCase("")){

File f1= new File("/epmxes/epmxes/res/presentation/",sFile+".xml");

if(f1.isFile()==true){

//读取文件内容

InputStreamReader isr = new InputStreamReader(new


FileInputStream(f1),"UTF-8");


BufferedReader br = new BufferedReader(isr);

String strNR = "";

while (true) {

//按行读取

String temp = br.readLine();

if (temp == null){

break;

}

strNR += temp + "\n";

}

br.close();

System.out.println("文件内容如下:");

System.out.println(strNR);

String url = "jdbc:oracle:thin:@IP:1521:system";

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

con = DriverManager.getConnection(url,"maximo","maximo");

//将文件导入数据库

sFile = sFile.toUpperCase();

con.setAutoCommit(false);

String sql = "update MAXPRESENTATION set PRESENTATION =

empty_clob() where APP='" + sFile + "'";

pstmt = con.createStatement();

pstmt.executeUpdate(sql);

statement = con.createStatement();

String sql2="select PRESENTATION from MAXPRESENTATION

where APP='"+sFile+"'";

resultset = statement.executeQuery(sql2);

oracle.sql.CLOB contents = null;

while(resultset.next()) {

//要使用oracle中的resultset对象

contents = (oracle.sql.CLOB)resultset.getClob(


"PRESENTATION");


}

Writer out = contents.getCharacterOutputStream();


out.write(strNR);

out.flush();

out.close();

con.commit();

con.setAutoCommit(true);


System.out.println("导入数据库成功!");

}else{

System.out.println("不存在该文件!");

}

}else{

System.out.println("请输入文件名!");

}

}catch(Exception ex){

try{

if(con!=null){

con.rollback();

}

}catch(SQLException e){

e.printStackTrace();

}

}finally{

try{

if(resultset!=null){

resultset.close();

}

if(statement!=null){

statement.close();

}

if(pstmt!=null){

pstmt.close();

}

if(con!=null){

con.close();

}

}catch(SQLException ex){

ex.printStackTrace();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值