如何在map类型的list里面取出CLOB数据

如何在map类型的list里面取出CLOB数据,第1张

解决方案:

Map集合中提供了两种取出方式:

<1> 返回值类型Set<k> 方法是: keySet() :返回此映射中包含的键的 Set 视图

将map中所有的键存入到Set集合,因为set具备迭代器,所有迭代方式取出所有的键

再根据get()方法 ,获取每一个键对应的值

<2> 返回值类型:Set<MapEntry<K,V>>方法是:entrySet()

取出的是关系,关系中包含key和value,其中MapEntry<k,V>来表示这种数据类型

即:将map集合中的映射关系存入到set集合中,这个关系的数据类型为:MapEntry

MapEntry接口

此接口在javautil包中,其实Entry也是一个接口,它是Map接口中的一个内部接口 ,getKey()和getValue是接口MapEntry<K,V>中的方法,返回对应的键和对应的值

Map集合中是没有迭代器 的 ,Map集合取出键值的原理:将map集合转成set集合,再通过迭代器取出 。

1:首先:写个连接数据库的类,里面有返回mysq, oracle连接的方法

public Connection getConn(String flag){

Connection con=null;

try

{

if(flagequals("1"))

{

ClassforName(“oraclejdbcdriverOracleDriver”);

con = DriverManagergetConnection(“jdbc:oracle:thin:@IP:1521:数据库名字”,"name","password");

}

if(flagequals("2"))

{

ClassforName("orggjtmmmysqlDriver");

con = DriverManagergetConnection("jdbc:mysql://localhost/数据库名user=用户名&password=密码&useUnicode=true&characterEncoding=GBK");

}

}

catch(Exception e)

{

eprintStackTrace();

}

return con;

}

2:执行插入 *** 作

public void setData() {

conn = new Conn();

try {

String sqlfrom = "select pid,pcontent from table p order by pid ";

String sqlinsert = "insert into table values(,)";

con = conngetConn("2");

stmt = concreateStatement(); //从mysql取出大字段

rs = stmtexecuteQuery(sqlfrom);

con = conngetConn("1");

PreparedStatement pstmt = conprepareStatement(sqlinsert); //向oracle中插入大字段

int i = 0;

while (rsnext()) {

pstmtsetInt(1, rsgetInt(1));

pstmtsetClob(2, oraclesqlCLOBempty_lob());

pstmtexecuteUpdate(); //插入时将大字段设为空

thisupdateOne(con,rsgetInt(1),rsgetString(2)); // 这里调用然后更新这个大字段

}

rsclose(); //关闭相关连接

pstmtclose();

stmtclose();

conclose();

} catch (Exception e) {

eprintStackTrace();

try

{

conrollback();

} catch (Exception e1) {

Systemoutprintln("回滚出现异常!");

e1printStackTrace();

}

}

}

3:该方法实现对应大字段记录的更新

public void updateOne(Connection con,int id, String content) {

String str = "select tcontent from table t where tid=" + id+ " for update";

try {

// 注意:存取 *** 作开始前,必须用setAutoCommit(false)取消自动提交,否则Oracle将抛出“读取违反顺序”的错误。

consetAutoCommit(false);

stmt = concreateStatement();

ResultSet rs_clob = stmtexecuteQuery(str);

while ( rs_clob next()) {

/ 取出clob数据/

oraclesqlCLOB clob = (oraclesqlCLOB) rs_clob getClob(1);

/ 向clob中写入数据/

clobputString(1, content);

}

stmtclose();

concommit();

consetAutoCommit(true);

conclose();

} catch (Exception e) {

eprintStackTrace();

try

{

conrollback();

} catch (Exception e1) {

Systemoutprintln("回滚出现异常!");

e1printStackTrace();

}

}

}

现在就完成了一行记录的更新。

4:读clob字段以String 的形式返回(当然也可以将读到的内容写入文件,大家改一下就可以了)

/

读clob字段

@param con

@param id

@return

/

public String readClob(Connection con,int id)

{

String content="";

try

{

consetAutoCommit(false);

stmt=concreateStatement();

ResultSet rs_clob=stmtexecuteQuery("select tcontent from table t where tid="+id);

oraclesqlCLOB contents=null;

while (rs_clobnext())

{ // 取出CLOB对象

contents= (oraclesqlCLOB) rs_clobgetClob(1);

}

BufferedReader a = new BufferedReader(contentsgetCharacterStream()); //以字符流的方式读入BufferedReader

String str = "";

while ((str = areadLine()) != null) {

content = contentconcat(str); //最后以String的形式得到

}

concommit();

/

BufferedWriter out = new BufferedWriter(new FileWriter("e:/testtxt"));

outwrite(content); //写入文件

outclose(); /

consetAutoCommit(true);

conclose();

}catch(Exception e)

{

Systemoutprintln("出现异常");

eprintStackTrace();

try

{

conrollback();

}

catch (Exception e1)

{

Systemoutprintln("回滚出现异常!");

e1printStackTrace();

}

}

return content;

}

怎么读取orcl数据库,表中字段是clob类型的一条数据

写入clob数据

import javaioWriter;

import javasqlConnection;

import javasqlDriverManager;

import javasqlResultSet;

import javasqlStatement;

public class TestClobIn {

public static void main(String args[]){

String data="this is a long passage!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";

Writer outStream = null;

//通过JDBC获得数据库连接

try {

ClassforName("OraclejdbcdriverOracleDriver");

Connection con = DriverManagergetConnection("jdbc:oracle:thin:@localhost:1521:ewins", "scott", "tiger");

consetAutoCommit(false);

Statement st = concreateStatement();

//插入一个空对象empty_clob(),这个是必须的

stexecuteUpdate("insert into TESTCLOB(ID, NAME, CLOBATTR)values(2,'thename', empty_clob())");

//锁定数据行进行更新,注意“for update”语句,这里不用for update锁定不可以插入clob

ResultSet rs = stexecuteQuery("select CLOBATTR from TESTCLOB where ID=1 for update");

if (rsnext())

{

//得到javasqlClob对象后强制转换为oraclesqlCLOB

oraclesqlCLOB clob = (oraclesqlCLOB) rsgetClob("CLOBATTR");

outStream = clobgetCharacterOutputStream();

//data是传入的字符串,定义:String data

char[] c = datatoCharArray();

outStreamwrite(c, 0, clength);

}

outStreamflush();

outStreamclose();

concommit();

conclose();

} catch (Exception e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

读取clob数据

import javaioInputStream;

import javaioReader;

import javasqlConnection;

import javasqlResultSet;

import javasqlStatement;

public class TestClobOut {

public static void main(String args[]){

String data;

Reader inStream=null;

//获得数据库连接

Connection con = ConnectionFactorygetConnection();//ConnectionFactory类是另外定义的,不必纠结

consetAutoCommit(false);

Statement st = concreateStatement();

//不需要“for update”

ResultSet rs = stexecuteQuery("select CLOBATTR from TESTCLOB where ID=1");

if (rsnext())

{

javasqlClob clob = rsgetClob("CLOBATTR");

inStream = clobgetCharacterStream();

char[] c = new char[(int) cloblength()];

inStreamread(c);

//data是读出并需要返回的数据,类型是String

data = new String(c);

inStreamclose();

}

inStreamclose();

concommit();

conclose();

}

}

以上就是关于如何在map类型的list里面取出CLOB数据全部的内容,包括:如何在map类型的list里面取出CLOB数据、java将string插入到类型为clob的ORACLE库中、怎么读取orcl数据库,表中字段是clob类型的一条数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9300751.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存