oracle+jsp中blob类型存储大文本问题解决方法


oracle+jsp中blob类型存储大文本问题解决方法
oracle 存储大文本一直是一个棘手的问题。
一、存数据库:

1@page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" 
 1   
 2//定义变量   
 3java.sql.Connection conn; //数据库连接对象   
 4String sql;   
 5long id;   
 6ResultSet rs;   
 7Statement stmt,stmt1; 
 8
 9java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //装载JDBC驱动程序   
10conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.2:1521:lqxm","lqxm","lqxm"); //连接数据库 
11
12request.setCharacterEncoding("GBK");   
13String title = request.getParameter("title");   
14String content = request.getParameter("content");   
15String sort = request.getParameter("sort");   
16String type = request.getParameter("type");   
17String rq = request.getParameter("rq");   
18String qy = request.getParameter("qy");   
19//插入数据,此时blob字段中插入的是空值   
20sql="insert into t_flfg (xlh,title,content,rq,sort,type,qy) ";   
21sql=sql+"Values(FLFG_SEQ.NEXTVAL,'" + title + "',empty_clob(),'" + rq + "','" + sort + "','" + type + "','" + qy + "')";   
22stmt=conn.createStatement();   
23stmt.executeUpdate(sql);   
24conn.commit(); 
25
26conn.setAutoCommit(false);   
27stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);   
28//取得刚才插入的ID   
29sql="select max(xlh) as xlh from t_flfg ";   
30rs=stmt.executeQuery(sql);   
31if(rs.next()) {   
32id=rs.getInt("xlh");   
33}   
34rs.close(); 
35
36sql = "select content from t_flfg where xlh="+id+" for update";   
37rs = stmt.executeQuery(sql);   
38if (rs.next()) {   
39oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);   
40clob.putString(1, content);   
41sql = "update t_flfg set content=? where xlh=" + id + ""; //将大文本更新进去,呵呵   
42PreparedStatement pstmt = conn.prepareStatement(sql);   
43pstmt.setClob(1, clob);   
44pstmt.executeUpdate();   
45} 
46
47conn.commit();   
48stmt.close();   
49conn.close();   

二、检索显示数据:

 1   
 2ResultSet rs = flfgSave.searchOneInfo(request.getParameter("xlh")); //查询数据库获取记录集   
 3rs.next(); 
 4
 5int y;   
 6String content = "";   
 7oracle.sql.CLOB clob1;   
 8char ac[] = new char[299]; 
 9
10String title = rs.getString("title"); 
11
12clob1 = (oracle.sql.CLOB)rs.getObject("content");   
13Reader reader = clob1.getCharacterStream();   
14while((y = reader.read(ac, 0, 299)) != -1)   
15content += new String(ac, 0, y); //这就是取出来的大文本   
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus