「java流转clob」java流转字符串
本篇文章给大家谈谈java流转clob,以及java流转字符串对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 大字符串转为二进制流存入CLOB字段 JDBC方法
- 2、JAVA Clob问题
- 3、java clob
- 4、提问一个关于Java中操作Oracle里的CLOB类型数据的问题
- 5、java 处理 oracle clob类型 字段
- 6、java用什么读取和接收 clob字段 用的是 db2 急用,在线等
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流转字符串的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。