<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

    CowNew開(kāi)源團(tuán)隊(duì)

    http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks

    今天做了個(gè)executeBatch的例子,可是輸?shù)慕Y(jié)果卻出乎我的意料,如下

    begintime:2006-05-25 09:58:11.0
    endtime:2006-05-25 09:58:11.14
    sqlType:executeBatch
    sql:insert into tmm_bill (billname, billdesc) values (?, ?);insert into tmm_bill (billname, billdesc) values (?, ?);
    paramters:[1, 2]

    為什么輸出的是兩個(gè)語(yǔ)句,而只有一組參數(shù)呢,于是我決定一探究竟.

    下面是我的例子

    ?? conn = DriverManager
    ???? .getConnection("listenerconfig=/com/cownew/JDBMonitor/demo/oracleconfig.xml:url=jdbc:oracle:thin:@zbw:1521:xinem8gg", "m8connect", "m8connect");
    ?? //for (int i = 0; i < 10; i++)
    ?? //{

    ??? ps = conn
    ????? .prepareStatement("insert into tmm_bill (billname, billdesc) values (?, ?)");
    ???
    ??? ps.setString(1,"songzho");
    ??? ps.setString(2, "yufn");
    ???
    ??? ps.addBatch();
    ???
    ??? ps.setString(1, "2");
    ??? ps.setString(2, "3");
    ???
    ??? ps.addBatch();
    ???
    ???
    ??? ps.executeBatch();
    ??? ps.close();

    原來(lái)我們輸出的內(nèi)容封裝在SQLInfo這個(gè)類(lèi)中

    這個(gè)類(lèi)中有一個(gè)get和set方法用來(lái)取值和付值,這個(gè)我就不多介紹了,主要說(shuō)一下其中一個(gè)方法

    private List parameters = new ArrayList();

    ?public List getParameters()
    ?{
    ? return parameters;
    ?}

    public String toString()
    ?{
    ? StringBuffer sb = new StringBuffer();
    ? sb.append("begintime:").append(beginTime).append("\n");//設(shè)置開(kāi)始執(zhí)行語(yǔ)句的時(shí)間
    ? sb.append("endtime:").append(endTime).append("\n");//設(shè)置結(jié)束執(zhí)行語(yǔ)句的時(shí)間
    ? sb.append("sqlType:").append(sqlType).append("\n");//設(shè)置語(yǔ)句的類(lèi)型
    ? sb.append("sql:").append(sql).append("\n");//設(shè)置語(yǔ)句
    ? if(parameters.size()>0)
    ? {
    ????? sb.append("paramters:").append(parameters).append("\n");//設(shè)置參數(shù),就是這里有點(diǎn)問(wèn)題
    ? }
    ? return sb.toString();
    ?}

    在這里大家可以看出來(lái)parameters就是用來(lái)傳入?yún)?shù)的arrayList,可是這里只能存一組參數(shù);

    我們?cè)倏匆幌?DBPreparedStatement 這個(gè)類(lèi),這個(gè)類(lèi)的意義也不用多說(shuō)了吧,主要看看兩個(gè)方法

    ?public int[] executeBatch() throws SQLException
    ?{
    ? SQLInfo info = new SQLInfo();
    ? info.setSqlType(SQLTypeEnum.executeBatch);//SQLInfo類(lèi)設(shè)置SqlType的方法
    ? info.setBeginTime(JdbcUtils.getTimeStamp());//SQLInfo類(lèi)設(shè)置BeginTime的方法
    ? info.setSql(sbAddBatch.toString());//SQLInfo類(lèi)設(shè)置Sql的方法,sbAddBatch是一個(gè)StringBuffer

    ? int[] ret = stmt.executeBatch();

    ? info.setEndTime(JdbcUtils.getTimeStamp()); ());//SQLInfo類(lèi)設(shè)置EndTime的方法
    ?
    ? if (params != null && paramCount != 0)//這里是設(shè)置參數(shù)的地方,就是這里出了一點(diǎn)問(wèn)題,params只是保存一組參數(shù),也就是最后一組
    ????????? //對(duì)于只有一組參數(shù)是沒(méi)有問(wèn)題的,可是如果有多組參數(shù)就會(huì)出現(xiàn)上面我說(shuō)的那個(gè)現(xiàn)象了
    ? {
    ?? int i = 0;
    ?? for (int size = paramCount; i < size; i++)
    ??? info.getParameters().add(params[i]);
    ? }
    ? logSql(info);
    ? sbAddBatch.setLength(0);
    ? return ret;
    ?}

    我改動(dòng)的方法是這樣的
    private ArrayList paramsList = new ArrayList();
    public class DBPreparedStatement extends DBStatement implements
    ??PreparedStatement
    {
    ?.
    ?.
    ?.
    ?public void addBatch() throws SQLException
    ?{
    ??//sbAddBatch.append(sql).append(";");
    ???? ArrayList pListTemp = new ArrayList();
    ???? for (int i = 0; i < paramCount; i ++)
    ???? {
    ???????? pListTemp.add(params[i]);//把每一組參數(shù)存到一個(gè)ArrayList里面
    ???? }
    ????
    ???? paramsList.add(pListTemp);//再把那個(gè)臨時(shí)的TempList存到一個(gè)ArrayList里面

    ??
    ??((PreparedStatement) stmt).addBatch();

    ?}

    ?.
    ?public int[] executeBatch() throws SQLException
    ?{
    ??
    ???? sbAddBatch.append(sql);
    ????
    ???? SQLInfo info = new SQLInfo();
    ??info.setSqlType(SQLTypeEnum.executeBatch);
    ??info.setBeginTime(JdbcUtils.getTimeStamp());
    ??info.setSql(sbAddBatch.toString());

    ??int[] ret = stmt.executeBatch();

    ??info.setEndTime(JdbcUtils.getTimeStamp());??
    ??
    ??if (paramsList != null && paramsList.size() != 0)
    ??{
    ???for (int i = 0; i < paramsList.size(); i ++)
    ???{
    ?????? info.getParameters().add(paramsList.get(i));//取到每一個(gè)TempList
    ???}

    ?????
    ??}
    ??logSql(info);
    ??sbAddBatch.setLength(0);
    ??return ret;
    ?}
    ?.
    ?.
    ?.
    }
    public class SQLInfo implements Serializable
    {
    ?.
    ?.
    ?.
    ?public String toString()
    ?{
    ??StringBuffer sb = new StringBuffer();
    ??sb.append("begintime:").append(beginTime).append("\n");
    ??sb.append("endtime:").append(endTime).append("\n");
    ??sb.append("sqlType:").append(sqlType).append("\n");
    ??sb.append("sql:").append(sql).append("\n");
    ??if(parameters.size()>0)
    ??{
    ????? for (int i = 0; i < parameters.size(); i ++)
    ????? {
    ????????? sb.append("paramters:").append((ArrayList)parameters.get(i)).append("\n");//循環(huán)取TempList里的參數(shù)
    ????? }

    ??}
    ??return sb.toString();
    ?}
    }
    得到的結(jié)果為
    begintime:2006-05-25 13:16:00.218
    endtime:2006-05-25 13:16:00.234
    sqlType:executeBatch
    sql:insert into tmm_bill (billname, billdesc) values (?, ?)
    paramters:[songzho, yufn]
    paramters:[2, 3]

    也不知道各位看官看明白了沒(méi)有,其實(shí)不懂也沒(méi)什么關(guān)系,我只是想在這里給大家說(shuō)一下我們輸出方式,總結(jié)一下就是我們做了自己的DBConnect,DBStatetment,
    DBPrepareStatement....,都是繼承了JDBC的原型,在實(shí)現(xiàn)這些功能的之前,先把信息記錄在SqlInfo里,再跟據(jù)配置的寫(xiě)日志方式進(jìn)行寫(xiě)日志.
    作者月光光是CowNew開(kāi)源團(tuán)隊(duì)(http://www.cownew.com)JDBMonitor開(kāi)發(fā)組的核心開(kāi)發(fā)人員,在J2EE開(kāi)發(fā)方面頗有造詣。

    posted on 2006-05-27 01:46 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(1256) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产亚洲成AV人片在线观黄桃| 亚洲精品乱码久久久久久蜜桃不卡| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 久久精品国产99国产精品亚洲| 夭天干天天做天天免费看| 一级中文字幕免费乱码专区| 亚洲精品高清国产一久久| 成人免费无码大片A毛片抽搐| 一本岛v免费不卡一二三区| 亚洲第一二三四区| 内射无码专区久久亚洲| 最近2019免费中文字幕视频三| 亚洲AV无码国产剧情| 久久精品国产精品亚洲艾草网| 无码高潮少妇毛多水多水免费| free哆拍拍免费永久视频| 亚洲AV一二三区成人影片| 亚洲伊人久久精品影院| 毛片a级三毛片免费播放| 精品国产污污免费网站| 处破女第一次亚洲18分钟| 亚洲精品**中文毛片| 亚洲色婷婷综合开心网| 国产成在线观看免费视频| a级片在线免费看| 日韩成人毛片高清视频免费看| 亚洲无线一二三四区| 国产国拍亚洲精品福利| 免费无码又爽又高潮视频| 无码人妻一区二区三区免费看| 免费看黄福利app导航看一下黄色录像 | 无码视频免费一区二三区| 免费观看久久精彩视频| 男女污污污超污视频免费在线看| 久久精品国产亚洲AV蜜臀色欲| 亚洲精品成人片在线播放| 亚洲国产日韩成人综合天堂| 国产精品久久久久免费a∨| 久久精品视频免费看| 国产成人无码免费看片软件| 亚洲av第一网站久章草|