- 浏览: 93345 次
- 性别:
- 来自: 上海
文章分类
最新评论
JAVA读取CLOB字段
1、将数据库某字段的内容导出到指定的文件
数据库表结构如下:
表MAXPRESENTATION
APP
VARCHAR2(10)
PRESENTATION
CLOB
MAXPRESENTATIONID
NUMBER
ROWSTAMP
VARCHAR2(40)
[注]:以APP字段的内容做为导出的文件名,PRESENTATION字段的内容做为该文件的内容,该字段的编码格式为:UTF-8
程序清单如下:
数据库表结构如下:
表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(); } } } }
相关推荐
下面是一个Java方法`clobRead()`的具体实现,用于从Oracle数据库中读取CLOB字段的内容。 ```java public static String clobRead() throws Exception { DBlo_db = null; String detailinfo = ""; Connection ...
Java 中操作 Oracle 的 CLOB 字段是一种常见的操作,在实际开发中,我们经常需要在 Oracle 数据库中存储和读取大型文本数据,这时就需要使用 CLOB(Character Large OBject)类型的字段来存储这些数据。下面我们将...
在Java中,读取Oracle数据库中的CLOB字段可以通过以下步骤实现: 1. **获取CLOB对象**: 首先,通过执行查询语句并从结果集中获取CLOB对象。示例代码中的`lookmail[6]`表示从查询结果的第7个元素(下标为6)获取...
本教程将介绍如何使用Java来读取和写入Oracle数据库中的CLOB字段。 首先,我们需要引入相关的Java和Oracle JDBC驱动库。在上述代码中,我们看到`import oracle.jdbc.driver.OracleDriver;`,这表示我们将使用Oracle...
查询CLOB字段时,我们可以使用ResultSet的getClob方法获取Clob对象,然后通过getClob.length()或getSubString方法读取数据。例如: ```java String sql = "SELECT my_clob_column FROM my_table WHERE id = ?"; ...
java读取oracle数据库中clob字段 把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来
我们使用了 Java 语言和 JDBC 驱动程序来实现数据的导出,并将 Image 类型数据写到文件中,然后将文件中的数据读取出来,并将其设置到 Oracle 的 CLOB 字段中。这种方法可以帮助我们实现不同数据库管理系统之间的...
本文将深入探讨这一主题,基于给定的代码示例,解析如何在Java环境中读取和写入Oracle数据库的CLOB字段。 ### Java存取Oracle CLOB类型字段 #### 1. 导入必要的包 在Java中处理Oracle的CLOB字段,首先需要导入相关...
在Java实体类中,表示CLOB字段的属性应为`String`类型,这样可以直接存储和读取文本内容。在Hibernate的映射文件中,使用`org.springframework.orm.hibernate3.support.ClobStringType`类型来映射这个属性,如下所...
jsp读取大对象CLOB并生成xml文件示例源代码
kettle通过java代码将数据库blob 字段抽取到本地文件
在 Java 中,通过使用 oracle.sql.CLOB 类来处理 CLOB 类型字段的存储和读取。 在 Java 中,连接 Oracle 数据库需要使用 Oracle 的 JDBC 驱动程序。首先,需要使用 Class.forName() 方法加载驱动程序,然后使用 ...
CLOB操作与BLOB操作类似,但是在获取java.sql.Clob对象后需要强制转换为oracle.sql.CLOB对象,以便使用getCharacterOutputStream()方法将数据写入CLOB字段。 三、出库操作 出库操作可以使用ResultSet.getBlob()或...
Mybatis 处理 CLOB、BLOB 类型数据 MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis ...通过使用 MyBatis 处理 CLOB 和 BLOB 类型数据,可以方便地存储和读取大字段类型的数据,提高应用程序的性能和可扩展性。
- 大量操作CLOB字段可能导致性能下降,因此应尽量减少不必要的读写操作。 - 如果频繁操作,可以考虑使用BFILE或外部表等其他存储方案,以提高效率。 7. **优化策略**: - 分析业务需求,合理设计表结构,如是否...
当你需要将一个字符串或者Reader对象插入到CLOB字段时,MyBatis默认可能无法正确处理。此时,你需要自定义一个TypeHandler来处理这种转换。创建一个实现`org.apache.ibatis.type.TypeHandler`接口的类,重写`...
本教程将详细介绍如何在 Java 中使用 JDBC 和 JNDI 连接访问 Oracle 数据库,对 CLOB 字段进行读写操作。 首先,我们创建两个测试表,一个包含 BLOB 字段,一个包含 CLOB 字段: ```sql CREATE TABLE TESTBLOB ( ...
在JDBC中,CLOB对象被表示为`java.sql.Clob`接口的实例,提供了读取和修改CLOB字段的方法。 要读取CLOB字段并转换为String,你需要遵循以下步骤: 1. **建立连接**:使用`DriverManager.getConnection()`方法建立...