「java流转clob」java流转字符串

博主:adminadmin 2023-03-21 12:28:09 575

本篇文章给大家谈谈java流转clob,以及java流转字符串对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 大字符串转为二进制流存入CLOB字段 JDBC方法

我以前写程序发现:

oracle的数据库BLOB不能用来存储字符,改用NCLOB就OK了。

BLOB:用来存储无结构的二进制数据

CLOB:存储单字节字符数据。(别用来存中文喔。。。)

NCLOB:用来存储定宽多字节字符数据。

JAVA Clob问题

看clob的实现类SerialClob得构造你就明白了。

CLOB是存放在一个大数组里面的

public SerialClob(char ch[]) throws SerialException, SQLException {

// %%% JMB. Agreed. Add code here to throw a SQLException if no

// support is available for locatorsUpdateCopy=false

// Serializing locators is not supported.

len = ch.length;

buf = new char[(int)len];

for (int i = 0; i len ; i++){

buf[i] = ch[i];

}

origLen = len;

}

java clob

java clob是什么,让我们一起了解一下?

CLOB是内置类型,将字符大对象存储为数据库表某一行中的一个列值。默认情况下,驱动程序使用SQL locator实现Clob对象,这意味着CLOB对象包含一个指向SQL CLOB数据的逻辑指针而不是数据本身。

在JAVA如何使用CLOB进行操作?

在绝大多数情况下,有2种方法使用CLOB。

1、相对比较小的,可以用String进行直接操作,把CLOB看成字符串类型即可。

2、如果比较大,可以用 getAsciiStream 或者 getUnicodeStream 以及对应的 setAsciiStream 和 setUnicodeStream 即可。

(1)读取数据:

ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1"); rs.next(); Reader reader = rs.getCharacterStream(2);

(2)插入数据:

PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)"); pstmt.setInt(1, 1); pstmt.setString(2, htmlStr); pstmt.executeUpdate();

(3)更新数据:

Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM test1"); rs.next(); Clob clob = rs.getClob(2); long pos = clob.position("dog", 1); clob.setString(1, "cat", len, 3); rs.updateClob(2, clob); rs.updateRow();

那么java是如何操作数据库clob字段的?

示例代码如下: package com.test.db.clob; import java.io.BufferedReader; import java.io.IOException; import java.io.Writer; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ClobTest {undefined private static Connection conn; static {undefined try {undefined Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger"); } catch (ClassNotFoundException e) {undefined e.printStackTrace(); } catch (SQLException e) {undefined e.printStackTrace(); } } public static void main(String[] args) throws SQLException, IOException {undefined testInsert(); testUpdate(); testRead(); } private static void testInsert() throws SQLException {undefined String sql = "insert into test_clob values(1, empty_clob())"; Statement stm = conn.createStatement(); stm.execute(sql); } private static void testUpdate() throws SQLException, IOException {undefined String sql = "select content from test_clob where id = 1 for update"; Statement stm = conn.createStatement(); ResultSet rs = stm.executeQuery(sql); while (rs.next()) {undefined Clob c = rs.getClob(1); c.truncate(0);// clear Writer w = c.setCharacterStream(1);//The first position is 1 w.write("abc"); w.close(); c.setString(c.length() + 1, "abc"); conn.commit(); } } private static void testRead() throws SQLException, IOException {undefined String sql = "select content from test_clob where id = 1"; PreparedStatement pstm = conn.prepareStatement(sql); ResultSet rs = pstm.executeQuery(); while (rs.next()) {undefined Clob clob = rs.getClob("content"); System.out.println("clob.getSubString(1, 2) -- " + clob.getSubString(1, 2)); System.out.println("clob.getSubString(1, (int)clob.length()) -- " + clob.getSubString(1, (int)clob.length())); BufferedReader r = new BufferedReader(clob.getCharacterStream()); String s; while ((s = r.readLine()) != null) {undefined System.out.println(s); } r.close(); } } }

提问一个关于Java中操作Oracle里的CLOB类型数据的问题

引用你的话:“我测试的时候执行该语句后clob对象的.length()方法==0,该对象也为空,...”

如果乐的clob对象的length()方法返回0,那么说明clob对象不为null,否则会抛出NullPointerException。

Result的各种get()方法返回的是否为null与方法和数据类型是相关的,如:

String类型getString(),如果Oracle的表中字段为null,则返回null;

int类型的getInt(),如果Oracle的表中字段为null,则返回0;

long类型的getLong(),如果Oracle的表中字段为null,则返回0;

...

这些在JDK的文档中都会有说明的,可以去找一份JDK文件看看。

java 处理 oracle clob类型 字段

猪哥解答:

呵呵,从你的代码里没看出大问题,你遇到的那个问题出现的情况通常是:在事务里的不同地方对同一个表的同一条数据进行update操作。

而解决的方式一般是两条update合并成1条,或者强制设定事务的隔离级别,你这个代码不完整,我也不知道该给你往哪里加东西。

不过有一个小问题你得先调整一下:

Writer outstream = clob.getCharacterOutputStream();

if (content != null) {

// outstream.write(content);

outstream.write(content.toCharArray(),0,content.toCharArray().length);

outstream.flush();

outstream.close();

}

你的这段代理里这句话Writer outstream = clob.getCharacterOutputStream();应该拿到if(content!=null)里面,按照你原来的写法,如果那个if条件不满足,那么这个输出流就不会关闭了,这个也许是引起问题的关键吧。

如果不行的话,你就把完整的代码贴上吧,你这个异常要看整个事务是怎么写的。

java用什么读取和接收 clob字段 用的是 db2 急用,在线等

Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();

String url = "jdbc:db2:sample";

Connection connection = DriverManager.getConnection(url, user, password);

connection.setAutoCommit(false);

PreparedStatement preparedStatement=connection.prepareStatement(sql);

ResultSet rs=preparedStatement.executeQuery();

Clob clob=rs.getClob(colName);

if(clob!=null)

{

Reader reader=((Oracle.sql.CLOB)clob).getCharacterStream();

BufferedReader br=new BufferedReader(reader);

String value="";

String line="";

while((line=br.readLine())!=null)

{

value+=line+" ";

}

}

rs.close();

preparedStatement.close();

value就是Java读取clob的值。

关于java流转clob和java流转字符串的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。