Java 对Oracle Clob(大字符串)格式的操作 增改查

java

package com.study.db;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.Reader;

import java.io.Writer;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

/*

连接数据库和常用数据库操作的类

*/

import oracle.sql.CLOB;

/**

连接数据库的类

最基础的类

*/

public class DBOracle {

/**

连接数据库常用的属性

*/

public String sDBDriver = "oracle.jdbc.driver.OracleDriver";// 设置驱动

public String url = "jdbc:oracle:thin:@192.168.1.0:1521:HPO";// 设置数据库信息

public String sHint = "";

public ResultSet rs = null;

public Connection conn = null;

public Statement stmt = null;

public String user = "study";

public String pwd = "ok";

/**

加载配置文件读取信息

*/

public DBOracle() throws IOException {

String userpath = System.getProperty("user.dir");

String filesparator = System.getProperty("file.separator");

String dbconfig = userpath + filesparator + "dbconfig.properties";

FileInputStream in;

in = new FileInputStream(dbconfig);

Properties dbp = new Properties();

dbp.load(in);

in.close();

this.url = dbp.getProperty("URL");

this.user = dbp.getProperty("USER");

this.pwd = dbp.getProperty("PASSWORD");

System.out.println("地址=" + dbconfig);

// System.out.println("真实="+this.url);

}

public String getSHint() {

return sHint;

}

public void setSDBDriver(String dbDriver) {

sDBDriver = dbDriver;

}

public String getSDBDriver() {

return sDBDriver;

}

public String getUrl() {

return url;

}

public void setUrl(String s) {

url = s;

}

public ResultSet getResultSet() {

return rs;

}

public boolean initialize(String url, String user, String pwd) {

this.url = url;

this.user = user;

this.pwd = pwd;

return initialize();

}

public boolean initialize() {// 默认构造方法

try {

Class.forName(sDBDriver);

sHint = "Initialization sucessfully";

return true;

} catch (ClassNotFoundException e) {

sHint = "Initialization Exception:" + e.getMessage();

return false;

}

}

/**

关闭数据库对象

*/

public boolean close() {// 关闭数据库连接

try {

if (rs != null)

{ rs.close();}

if (stmt != null)

{stmt.close();}

if (conn != null)

{conn.close();}

return true;

} catch (SQLException ex) {

sHint = "Close Exception:" + ex.getMessage();

return false;

}

}

/**

插入大字段方法

*/

public String insertClob(int userid, int courseware_Id, int Progress,

String CourseClob) {// 插入数据库clob字段

try {

// int testid = 77;

// System.out.println("113用户ID" + userid + "课件ID" + courseware_Id+

// "进度" + Progress + "value=" + CourseClob);

Class.forName(this.sDBDriver);

Connection conn = DriverManager.getConnection(this.url, this.user,

this.pwd);

conn.setAutoCommit(false);

/* 以下表User_CourseWare中的Report字段时CLOB类型的 */

// 插入一条数据,注意CLOB字段,需要先插入一个空的clob类型 empty_clob(),然后再单独更新clob字段

// String sql = "insert into

// User_CourseWare(User_Id,Courseware_Id,Progress,Report,Id)values(

// ?,?,?,empty_clob(),?)";

String sql = "insert into User_CourseWare(User_Id,Courseware_Id,Progress,Report ,id)values( ?,?,?,empty_clob(), user_courseware_sq.nextval )";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, userid);

pstmt.setInt(2, courseware_Id);

pstmt.setInt(3, Progress);

// System.out.println("sql insert=" + sql);

// pstmt.setInt(4, testid);

int i1 = pstmt.executeUpdate();

conn.commit();

pstmt = null;

if (i1 > 0) {

// System.out.println("用户ID" + userid + "插入" + courseware_Id+

// "课件成功");

}

ResultSet rs = null;

CLOB clob = null;

String sql1 = "select Report from User_CourseWare where User_Id=? and Courseware_Id=? for update";

pstmt = conn.prepareStatement(sql1);

/*

* pstmt.setInt(1, testid); pstmt.setInt(2, userid); pstmt.setInt(3,

* courseware_Id);

*/

// System.out.println("sql1 select=" + sql1);

pstmt.setInt(1, userid);

pstmt.setInt(2, courseware_Id);

rs = pstmt.executeQuery();

if (rs.next()) {

clob = (CLOB) rs.getClob(1);

}

Writer writer = clob.getCharacterOutputStream();

writer.write(CourseClob);

writer.flush();

writer.close();

rs.close();

conn.commit();

pstmt.close();

conn.close();

} catch (Exception e) {

e.printStackTrace();

return "error";

}

return "success";

}

/* 获得大字段XML

获得大字符串格式

@param user_id

用户ID

@param courseware_id

课件ID

@return 大字符串

*/

public String getCourseClob(int user_id, int courseware_id) {// 根据课件ID和人ID查询课程ID

String content = "null";

try {

Class.forName(this.sDBDriver);

Connection conn = DriverManager.getConnection(this.url, this.user,

this.pwd);

conn.setAutoCommit(false);

ResultSet rs = null;

CLOB clob = null;

String sql = "";

sql = "select Report from User_CourseWare where user_id=? and courseware_id=? ";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, user_id);

pstmt.setInt(2, courseware_id);

rs = pstmt.executeQuery();

if (rs.next()) {

clob = (CLOB) rs.getClob(1);

if (clob != null && clob.length() != 0) {

content = clob.getSubString((long) 1, (int) clob.length());

content = this.Clob2String(clob);

}

}

rs.close();

conn.commit();

pstmt.close();

conn.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

// return "null";

content = "error";

} catch (SQLException e) {

e.printStackTrace();

// return "null";

content = "error";

}

return content;

}

/*

clob to string

大字符串格式转换STRING

@param clob

@return 大字符串

*/

public String Clob2String(CLOB clob) {// Clob转换成String 的方法

String content = null;

StringBuffer stringBuf = new StringBuffer();

try {

int length = 0;

Reader inStream = clob.getCharacterStream(); // 取得大字侧段对象数据输出流

char[] buffer = new char[10];

while ((length = inStream.read(buffer)) != -1) // 读取数据库 //每10个10个读取

{

for (int i = 0; i < length; i++) {

stringBuf.append(buffer[i]);

}

}

inStream.close();

content = stringBuf.toString();

} catch (Exception ex) {

System.out.println("ClobUtil.Clob2String:" + ex.getMessage());

}

return content;

}

/*

更新Clob(大字符串格式)内容

*/

public String updateClob(int userid, int courseware_Id, int Progress,

String CourseClob) {

this.updateUser_Course(userid, courseware_Id, Progress);// 调用更新进度

try {

Class.forName(this.sDBDriver);

Connection conn = DriverManager.getConnection(this.url, this.user,

this.pwd);

String sql = "update User_CourseWare set Report=empty_clob() , Progress=? where User_Id = ? and Courseware_Id =? ";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, Progress);

pstmt.setInt(2, userid);

pstmt.setInt(3, courseware_Id);

int i1 = pstmt.executeUpdate();

conn.commit();

// System.out.println("update sql="+sql);

pstmt = null;

if (i1 > 0) {

}

ResultSet rs = null;

CLOB clob = null;

String sql1 = "select Report from User_CourseWare where User_id=? and Courseware_id=? for update";

pstmt = conn.prepareStatement(sql1);

// System.out.println("select sql="+sql1);

pstmt.setInt(1, userid);

pstmt.setInt(2, courseware_Id);

rs = pstmt.executeQuery();

if (rs.next()) {

clob = (CLOB) rs.getClob(1);

}

Writer writer = clob.getCharacterOutputStream();

writer.write(CourseClob);

writer.flush();

writer.close();

rs.close();

conn.commit();

pstmt.close();

conn.close();

} catch (Exception e) {

e.printStackTrace();

return "error";

}

return "success";

}

/*

参数:userid 用户ID courseware_Id 课件ID Progress 课件进度 返回值 课件进度不到100时不更新 到100时

更新 状态为2(已学)

*/

public String updateUser_Course(int userid, int courseware_Id, int Progress) {

String caseTest = "default";

if (Progress == 100) {

String sql = "update User_Course set Status =2 where USER_ID =? and COURSE_ID =? ";

try {

Class.forName(this.sDBDriver);

Connection conn = DriverManager.getConnection(this.url,

this.user, this.pwd);

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, userid);

pstmt.setInt(2, courseware_Id);

int i1 = pstmt.executeUpdate();

conn.commit();

pstmt = null;

if (i1 > 0) {

// System.out.println("更新成功!");

}

caseTest = "success";

} catch (Exception e) {

caseTest = "error";

e.printStackTrace();

}

}

return caseTest;

}

/*

@param sql

要执行的查询语句

@return 结果集

*/

public ResultSet executeQuery(String sql) {

rs = null;

try {

Class.forName(this.sDBDriver);

conn = DriverManager.getConnection(this.url, this.user, this.pwd);

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

} catch (Exception ex) {

sHint = "Query Exception:" + ex.getMessage();

}

return rs;

}

/* 执行 更新删除等语句

@return 返回执行结果的boolean值

*/

public boolean executeUpdate(String sql) {

try {

Class.forName(this.sDBDriver);

conn = DriverManager.getConnection(this.url, this.user, this.pwd);

stmt = conn.createStatement();

stmt.executeUpdate(sql);

conn.commit();

return true;

} catch (Exception ex) {

sHint = "Update Exception :" + ex.getMessage();

return false;

}

}

}

 转载自:http://hi.baidu.com/576699909/blog/item/686c80964f7a757855fb9698.html

以上是 Java 对Oracle Clob(大字符串)格式的操作 增改查 的全部内容, 来源链接: utcz.com/z/394689.html

回到顶部