jsp如何读取和写入oracle的clob字段

spartak 2002-02-01 04:03:14
...全文
72 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
myfirebird7 2002-02-01
  • 打赏
  • 举报
回复
自行研究一下下面的例子你就会明白了!
/**
* This sample demonstrate basic LOB support.
*/

import java.sql.*;
import java.io.*;
import java.util.*;
import oracle.jdbc.driver.*;

//needed for new CLOB and BLOB classes
import oracle.sql.*;

public class LobExample
{
public static void main (String args [])
throws Exception
{
// Register the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

// Connect to the database
// You can put a database name after the @ sign in the connection URL.
Connection conn =
DriverManager.getConnection ("jdbc:oracle:thin:@firebird:1521:lnroaddb", "system", "manager");

// It's faster when auto commit is off
conn.setAutoCommit (false);

// Create a Statement
Statement stmt = conn.createStatement ();

//try
// {
//stmt.execute ("drop table basic_lob_table");
// }
//catch (SQLException e)
// {
// An exception could be raised here if the table did not exist already.
//}

// Create a table containing a BLOB and a CLOB
//stmt.execute ("create table basic_lob_table (x varchar2 (30), b blob, c clob)");

// Populate the table
//stmt.execute ("insert into basic_lob_table values ('one', '010101010101010101010101010101', '一二三四五六七八九十onetwothreefour')");
//stmt.execute ("insert into basic_lob_table values ('two', '0202020202020202020202020202', '一二三四五六七八九十onetwothreefourfivesix')");

//System.out.println ("Dumping lobs");

// Select the lobs
ResultSet rset = stmt.executeQuery ("select * from basic_lob_table where x='one'");
while (rset.next ())
{
// Get the lobs
BLOB blob = ((OracleResultSet)rset).getBLOB (2);
CLOB clob = ((OracleResultSet)rset).getCLOB (3);

// Print the lob contents
dumpBlob (conn, blob);
dumpClob (conn, clob);

// Change the lob contents
fillClob (conn, clob, 2000);
fillBlob (conn, blob, 4000);
}
/*
System.out.println ("Dumping lobs again");

rset = stmt.executeQuery ("select * from basic_lob_table");
while (rset.next ())
{
// Get the lobs
BLOB blob = ((OracleResultSet)rset).getBLOB (2);
CLOB clob = ((OracleResultSet)rset).getCLOB (3);

// Print the lobs contents
dumpBlob (conn, blob);
dumpClob (conn, clob);
}
*/
// Close all resources
rset.close();
stmt.close();
conn.close();
}

// Utility function to dump Clob contents
static void dumpClob (Connection conn, CLOB clob)
throws Exception
{
// get character stream to retrieve clob data
Reader instream = clob.getCharacterStream();

// create temporary buffer for read
long len=clob.length();
Long ll=new Long(len);
int li=ll.intValue();
char[] buffer = new char[li];

// length of characters read
int length = 0;

// fetch data
while ((length = instream.read(buffer)) != -1)
{
System.out.print("Read " + length + " chars: ");

for (int i=0; i<length; i++)
System.out.print(buffer[i]);
System.out.println();
}
String str=new String(buffer);
System.out.println("result of String is:"+str);
// Close input stream
instream.close();
}

// Utility function to dump Blob contents
static void dumpBlob (Connection conn, BLOB blob)
throws Exception
{
// Get binary output stream to retrieve blob data
InputStream instream = blob.getBinaryStream();

// Create temporary buffer for read
byte[] buffer = new byte[10];

// length of bytes read
int length = 0;

// Fetch data
while ((length = instream.read(buffer)) != -1)
{
System.out.print("Read " + length + " bytes: ");

for (int i=0; i<length; i++)
System.out.print(buffer[i]+" ");
System.out.println();
}

// Close input stream
instream.close();
}

// Utility function to put data in a Clob
static void fillClob (Connection conn, CLOB clob, long length)
throws Exception
{
Writer outstream = clob.getCharacterOutputStream();

int i = 0;
int chunk = 10;

while (i < length)
{
outstream.write(i + "hello world--世界你好!", 0, chunk);

i += chunk;
if (length - i < chunk)
chunk = (int) length - i;
}
outstream.close();
}

// Utility function to put data in a Blob
static void fillBlob (Connection conn, BLOB blob, long length)
throws Exception
{
OutputStream outstream = blob.getBinaryOutputStream();

int i = 0;
int chunk = 10;

byte [] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

while (i < length)
{
data [0] = (byte)i;
outstream.write(data, 0, chunk);

i += chunk;
if (length - i < chunk)
chunk = (int) length - i;
}
outstream.close();
}
}
fiendboy 2002-02-01
  • 打赏
  • 举报
回复
upupup

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧