`
xfbbsnet
  • 浏览: 93348 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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();

                     }     

              }

       }

}

分享到:
评论

相关推荐

    数据库读取clob字段

    下面是一个Java方法`clobRead()`的具体实现,用于从Oracle数据库中读取CLOB字段的内容。 ```java public static String clobRead() throws Exception { DBlo_db = null; String detailinfo = ""; Connection ...

    java中操作oracle的CLOB字段精解

    Java 中操作 Oracle 的 CLOB 字段是一种常见的操作,在实际开发中,我们经常需要在 Oracle 数据库中存储和读取大型文本数据,这时就需要使用 CLOB(Character Large OBject)类型的字段来存储这些数据。下面我们将...

    读取oracle数据库中clob字段的值

    在Java中,读取Oracle数据库中的CLOB字段可以通过以下步骤实现: 1. **获取CLOB对象**: 首先,通过执行查询语句并从结果集中获取CLOB对象。示例代码中的`lookmail[6]`表示从查询结果的第7个元素(下标为6)获取...

    java读写oracle clob字段

    本教程将介绍如何使用Java来读取和写入Oracle数据库中的CLOB字段。 首先,我们需要引入相关的Java和Oracle JDBC驱动库。在上述代码中,我们看到`import oracle.jdbc.driver.OracleDriver;`,这表示我们将使用Oracle...

    jdbc 处理clob类型字段

    查询CLOB字段时,我们可以使用ResultSet的getClob方法获取Clob对象,然后通过getClob.length()或getSubString方法读取数据。例如: ```java String sql = "SELECT my_clob_column FROM my_table WHERE id = ?"; ...

    java读取oracle数据库中clob字段.txt

    java读取oracle数据库中clob字段 把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来

    sql server中的image类型的数据导出到oracle的clob字段中

    我们使用了 Java 语言和 JDBC 驱动程序来实现数据的导出,并将 Image 类型数据写到文件中,然后将文件中的数据读取出来,并将其设置到 Oracle 的 CLOB 字段中。这种方法可以帮助我们实现不同数据库管理系统之间的...

    运用Java如何存取Oracle中的CLOB类型字段

    本文将深入探讨这一主题,基于给定的代码示例,解析如何在Java环境中读取和写入Oracle数据库的CLOB字段。 ### Java存取Oracle CLOB类型字段 #### 1. 导入必要的包 在Java中处理Oracle的CLOB字段,首先需要导入相关...

    spring+hibernate操作oracle的clob字段

    在Java实体类中,表示CLOB字段的属性应为`String`类型,这样可以直接存储和读取文本内容。在Hibernate的映射文件中,使用`org.springframework.orm.hibernate3.support.ClobStringType`类型来映射这个属性,如下所...

    jsp读取大对象CLOB并生成xml文件示例源代码

    jsp读取大对象CLOB并生成xml文件示例源代码

    kettle通过java代码将数据库blob 字段抽取到本地文件

    kettle通过java代码将数据库blob 字段抽取到本地文件

    CLOB字段处理

    在 Java 中,通过使用 oracle.sql.CLOB 类来处理 CLOB 类型字段的存储和读取。 在 Java 中,连接 Oracle 数据库需要使用 Oracle 的 JDBC 驱动程序。首先,需要使用 Class.forName() 方法加载驱动程序,然后使用 ...

    JAVA对clob的操作

    CLOB操作与BLOB操作类似,但是在获取java.sql.Clob对象后需要强制转换为oracle.sql.CLOB对象,以便使用getCharacterOutputStream()方法将数据写入CLOB字段。 三、出库操作 出库操作可以使用ResultSet.getBlob()或...

    Mybatis 处理 CLOB、BLOB 类型数据

    Mybatis 处理 CLOB、BLOB 类型数据 MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis ...通过使用 MyBatis 处理 CLOB 和 BLOB 类型数据,可以方便地存储和读取大字段类型的数据,提高应用程序的性能和可扩展性。

    oracle数据库中如何处理clob字段方法介绍

    - 大量操作CLOB字段可能导致性能下降,因此应尽量减少不必要的读写操作。 - 如果频繁操作,可以考虑使用BFILE或外部表等其他存储方案,以提高效率。 7. **优化策略**: - 分析业务需求,合理设计表结构,如是否...

    mybatis 对clob类型转换

    当你需要将一个字符串或者Reader对象插入到CLOB字段时,MyBatis默认可能无法正确处理。此时,你需要自定义一个TypeHandler来处理这种转换。创建一个实现`org.apache.ibatis.type.TypeHandler`接口的类,重写`...

    java操作clob

    本教程将详细介绍如何在 Java 中使用 JDBC 和 JNDI 连接访问 Oracle 数据库,对 CLOB 字段进行读写操作。 首先,我们创建两个测试表,一个包含 BLOB 字段,一个包含 CLOB 字段: ```sql CREATE TABLE TESTBLOB ( ...

    oracle数据库的clob大字段在jdbc中的处理方式

    在JDBC中,CLOB对象被表示为`java.sql.Clob`接口的实例,提供了读取和修改CLOB字段的方法。 要读取CLOB字段并转换为String,你需要遵循以下步骤: 1. **建立连接**:使用`DriverManager.getConnection()`方法建立...

Global site tag (gtag.js) - Google Analytics