首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

在运用ibatis时返回ResultSet

2012-10-09 
在使用ibatis时返回ResultSet?????? 在操作数据库的时候,我发现很多时候返回ResultSet比返回List或对象方

在使用ibatis时返回ResultSet

?????? 在操作数据库的时候,我发现很多时候返回ResultSet比返回List或对象方便的多,可是在直接利用ibatis操作数据层的时候,ibatis封装的类里却无法返回ResultSet,通常只能返回一个List或一个对象,但是返回ResultSet也不是无法实现的!曾记得JDBC是最基本也是最通用的连接数据库的方式!!O(∩_∩)O~简单又强大,何乐而不为呢??

所以要实现在ibatis中得到ResultSet数据集:

在数据层:

首先,得到DataSource:DataSource? dataSource = this.getDataSource();

其次,得到Connection conn = dataSource.getConnection();

再次,创建statement? st = conn.cerateStatement();

最后,得到ResultSet rs = st.executeQuery("select * from t_user");

完全就是在ibatis中利用JDBC的到ResultSet!!

在查资料的时候,网上很多朋友说是通过修改ibatis的源代码可以实现,可是对于我们赶时间的话,还是不是最可取的!我用JDBC这种方式实现了返回ResultSet数据集,暂时解决了前几天遇到的问题,也还没有测试出这种用法还存在什么问题,忘偶看此文的朋友赐教!!

?

??? 在此时写小结的时候,还想起一点点JDBC的其他东西,使用JDBC怎样加快数据层的执行效率呢?无疑,此时容易想到Qracle的批处理,还有就是在statement和PrepareStatement中选择一个和批处理配合执行,当然此时PrepareStatement是最佳的选择,所以在使用JDBC 的时候,需要提高执行效率:Oracle的批处理执行+PrepareStatement是不错的选择!!!

?

对CLOB字段的操作:(实例)

//插入一条带大字段的记录

public void saveCLOB(String? queryId,String baseSql) {
??Connection conn = null;
??PreparedStatement ps =null;
??try {
???String mainSql = "insert into User(id,basesql)?values(?,?)";
???conn = this.getDataSource().getConnection();
???ps = conn.prepareStatement(mainSql);
???ps.setString(1,queryId);
???ps.setClob(2,oracle.sql.CLOB.getEmptyCLOB());
???ps.executeUpdate();
???this.updateClobSql(conn,queryId,baseSql);?
??} catch (SQLException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}finally{
???try {
????ps.close();
????conn.close();
???} catch (SQLException e) {
????// TODO Auto-generated catch block
????e.printStackTrace();
???}
??}
?}
?
/*
? * 此方法用于更新大字段的内容
? */
?public void updateClobSql(Connection conn,String queryId, String baseSql) {
??

? ??String getClobSql = "select BASESQL from?User where id ='"+queryId+"' "+"FOR UPDATE";
??try {
???conn.setAutoCommit(false);
???Statement st = conn.createStatement();
???ResultSet rs_clob = st.executeQuery(getClobSql);
???Clob baseSQL = null;
???while(rs_clob.next()){
????baseSQL = (oracle.sql.CLOB)rs_clob.getClob(1);
???}
???Writer out = baseSQL.setCharacterStream(0);
???????? out.write(baseSql);
???????? out.flush();
???????? out.close();
???????? st.close();
???????? conn.commit();
???????? conn.setAutoCommit(true);
??}catch (Exception e) {
??????e.printStackTrace();
??}
?}

在读取CLOB字段的时候以string的形式返回即可!!!

?

热点排行