
解决方案:
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类型的一条数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)