`
bestxiaok
  • 浏览: 443538 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java oracle clob string 大字符串存储

阅读更多
这几天在在往数据库里更新一个大字符串,忙了好几天终于试出来一个好方法,现在拿出来分享下:
public class ClobTest {

	static String url = "jdbc:oracle:thin:@10.12.10.18:1521:orcl";
	static String user = "cwbe1_9999";
	static String pwd = "or777";
	static String text = "这是要插入到CLOB里面的数据,更新数据!" + "update";

	private static int clobImport() throws ClassNotFoundException, SQLException {
		DriverManager.registerDriver(new OracleDriver());
		Connection conn = DriverManager.getConnection(url, user, pwd);// 得到连接对象
		String sql = "insert into ETLNEEDPARAM(F_KEY,F_VALUE) values ('defaultpo',?)";// 要执行的SQL语句
		PreparedStatement stmt = conn.prepareStatement(sql);// 加载SQL语句
		// PreparedStatement支持SQL带有问号?,可以动态替换?的内容。
		Reader clobReader = new StringReader(text); // 将 text转成流形式
		stmt.setCharacterStream(1, clobReader, text.length());// 替换sql语句中的?
		int num = stmt.executeUpdate();// 执行SQL
		if (num > 0) {
			System.out.println("ok");
		} else {
			System.out.println("NO");
		}
		stmt.close();
		conn.close();
		return num;
	}

	private static int clobUpdate(String key) throws ClassNotFoundException, SQLException {

		DriverManager.registerDriver(new OracleDriver());
		Connection conn = DriverManager.getConnection(url, user, pwd);// 得到连接对象
		String sql = "update ETLNEEDPARAM set F_VALUE = ? where F_KEY = ? ";// 要执行的SQL语句
		PreparedStatement stmt = conn.prepareStatement(sql);// 加载SQL语句
		// PreparedStatement支持SQL带有问号?,可以动态替换?的内容。
		Reader clobReader = new StringReader(text); // 将 text转成流形式
		stmt.setString(2, key);
		stmt.setCharacterStream(1, clobReader, text.length());// 替换sql语句中的?
		int num = stmt.executeUpdate();// 执行SQL
		if (num > 0) {
			System.out.println("ok");
		} else {
			System.out.println("NO");
		}
		stmt.close();
		conn.close();
		return num;
	}

	private static String clobExport() throws ClassNotFoundException, SQLException, IOException {

		CLOB clob = null;
		String sql = "select F_VALUE from ETLNEEDPARAM where F_KEY ='test1'";
		DriverManager.registerDriver(new OracleDriver());
		Connection conn = DriverManager.getConnection(url, user, pwd);// 得到连接对象
		PreparedStatement stmt = conn.prepareStatement(sql);
		ResultSet rs = stmt.executeQuery();
		String content = "";
		if (rs.next()) {
			clob = (oracle.sql.CLOB) rs.getClob("F_VALUE"); // 获得CLOB字段str
			// 注释: 用 rs.getString("str")无法得到 数据 ,返回的 是 NULL;
			content = ClobToString(clob);
		}
		stmt.close();
		conn.close();
		return content;
	}

	// 将字CLOB转成STRING类型

	public static String ClobToString(CLOB clob) throws SQLException, IOException {
		String reString = "";
		Reader is = clob.getCharacterStream();// 得到流
		BufferedReader br = new BufferedReader(is);
		String s = br.readLine();
		StringBuffer sb = new StringBuffer();
		// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
		while (s != null) {
			sb.append(s);
			s = br.readLine();
		}
		reString = sb.toString();
		return reString;
	}

	public static void main(String[] args) throws IOException,ClassNotFoundException, SQLException {			
		// System.out.println(clobImport());
		System.out.println(clobUpdate("fmo"));
		System.out.println(clobUpdate("epo"));

		// System.out.println(clobExport());

	}
分享到:
评论
2 楼 bestxiaok 2011-05-04  
SetBigStringTryClob
myy 写道
楼主还不知道 10g 的 jdbc 驱动支持 “SetBigStringTryClob”这个东东吧?

没试过,我经验还少,多多指教啊。。。
1 楼 myy 2011-05-04  
楼主还不知道 10g 的 jdbc 驱动支持 “SetBigStringTryClob”这个东东吧?

相关推荐

    ORACLE中CLOB字段转String类型

    ORACLE中CLOB字段转String类型

    CLOB 字段类型报错 ORA-01704: 文字字符串过长的解决

    CLOB字段类型报错 ORA-01704:文字字符串过长的解决

    PHP处理Oracle的CLOB实例

    所以在存clob类型字段时必须使用bindParam()或bindValue()等,并指定字符串长度,例如: 复制代码 代码如下:$pdo -> bindParam(‘:clobData’, $clobData, PDO::PARAM_STR,strlen($clobData)); 2. 读取数据 PDO取出...

    深入浅析mybatis oracle BLOB类型字段保存与读取

     BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写。其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。BLOB通常用来保存...

    MYSQL,SQLSERVER,ORACLE常用的函数

    返回字符串并将字符串的第一个字母变为大写; SQL> select initcap('smith') upp from dual; UPP ----- Smith 5.INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    3.支持任意字符串作为每行分隔符,例如\r,\r\n,或者十六进制字符或任意指定的字符串(例如可实现把整个日志文件装入数据库的单个clob字段). 4.支持任意大小的文本,装入几十GB都试过没问题。 5.明确到每一行的错误信息....

    Oracle正则表达式使用介绍

    REGEXP_SUBSTR REGEXP_SUBSTR 函数使用正则表达式来指定返回串的起点和终点,返回与source_string 字符集中的VARCHAR2 或CLOB 数据相同的字符串。 语法: –1.REGEXP_SUBSTR与SUBSTR函数相同,返回截取的子字符串 ...

    oracle函数大全.doc

    返回字符串并将字符串的第一个字母变为大写; SQL> select initcap('smith') upp from dual; UPP ----- Smith 5.INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 ...

    Oracle解析复杂json的方法实例详解

     1、在PL/SQL中写json串,无需声明json对象,只需直接拼接成格式正确的json字符串即可,因此数据库对象间json串的传递完全可以用varchar2或clob来代替。  2、结构复杂的json串节点元素值基本上可

    Oracle9i的init.ora参数中文说明

    值范围: Oracle8i National Language Support Guide 中指定的任何有效的10 字节字符串。 默认值: 从 NLS_TERRITORY 中获得 nls_date_language: 说明: 指定拼写日期名, 月名和日期缩写词 (AM, PM, AD, BC) 的语言。...

    Oracle P/L SQL实现发送Email、浏览网页等网络操作功能

    as_SourStr in out Clob, --输入字符串A,B,C as_Separator in VarChar2 Default '/' --分拆依据的分隔符, )Return VarChar2; --分拆结果A --将Clob内容写入物理文件 --Exec UTL_INet.p_...

    Oracle事例

    23、如何在字符串里加回车或者tab键 在sqlplus中执行 sql>select \'UserId=1233111\'||chr(10)||\'AccId=13431\'||chr(9)||\'AccId2=11111\' from dual; 24、树形查询 create table zj( bm number(8), bmmc...

Global site tag (gtag.js) - Google Analytics