WebPrint.java
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:57k
源码类别:

OA系统

开发平台:

Java

  1. package com.gforce.currency.web;
  2. /**
  3. 公司:北京方成科技发展有限公司
  4. 作者:梅勇
  5. 日期:2001.08.24
  6. */
  7. import java.net.*;
  8. import java.io.*;
  9. import java.text.*;
  10. import java.util.*;
  11. import javax.servlet.*;
  12. import javax.servlet.http.*;
  13. import java.sql.*;
  14. //import explato.database.*;
  15. import sun.io.ByteToCharConverter;
  16. import org.xml.sax.* ;
  17. import org.apache.xerces.dom.TextImpl;
  18. import org.w3c.dom.Attr;
  19. import org.w3c.dom.Document;
  20. import org.w3c.dom.NamedNodeMap;
  21. import org.w3c.dom.Node;
  22. import org.w3c.dom.NodeList;
  23. //import dom.DOMParserWrapper;
  24. //import dom.wrappers.DOMParser;
  25. //websphere+db2
  26. //import COM.ibm.db2.jdbc.app.*;
  27. public class WebPrint extends HttpServlet {
  28.   private int iPosition=1; //用于fc_select类查询中传位置参数
  29.   //数据源名称,用户名,密码.用于报表查询时连接另外的数据源使用,用于fc_select1,fc_select2
  30.   private String strDataSource="";
  31.   private String strUserName="";
  32.   private String strPassword="";
  33.   private String strXml="";
  34.   private ResultSet rs = null;
  35.   private ResultSet rs1 = null;
  36.   private ResultSet rs2 = null;
  37.   private Connection con = null;
  38.   //private ConnectionManager cm=null;
  39.   private Document document=null;
  40.     public void doPost(HttpServletRequest req,
  41.                       HttpServletResponse res)
  42.         throws IOException, ServletException
  43.     {
  44.     //设置演示版,
  45.       /*
  46.       long Time1=1026000000+23328000;
  47.       long curTime=0;
  48.       curTime=System.currentTimeMillis();
  49.       curTime=curTime/1000;
  50.       //每天的时间为 86400
  51.     if(curTime>Time1){
  52.         System.out.println("演示版已到期,系统将不正常!");
  53.         return ;
  54.     }
  55.     //------------------
  56.   */
  57.         res.setContentType("text/html;charset=UTF-8");
  58.         PrintWriter out = res.getWriter();
  59.     try {
  60.     /*
  61.     采用odbc+jdbc做连接的方法:
  62.       String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  63.       String sConnStr = "jdbc:odbc:ereport";
  64.       Class.forName(sDBDriver);
  65.       con = DriverManager.getConnection(sConnStr,"sa","");
  66.     采用tomcat 用自做的连接池建立连接的方法:
  67.           ServletContext application = getServletContext();
  68.       cm=(ConnectionManager)application.getAttribute ( "fcConPoolManager" );
  69.       //demo是配置文件中逻辑数据库的名字,同时也是连接池的名字
  70.       con = cm.getConnection( "demo" );     //或者  con = cm.getConnection( "demo", 30000 );   //30000是不能马上取到连接时的等待时间(以毫秒计)
  71.     websphere+db2:
  72.       Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
  73.       con=DriverManager.getConnection("jdbc:db2:sample","meiyong","");
  74.     从db.properties文件中读出以下信息:
  75.     drive="sun.jdbc.odbc.JdbcOdbcDriver" / "COM.ibm.db2.jdbc.app.DB2Driver"
  76.     url="jdbc:odbc:webgrid" / "jdbc:db2:sample"
  77.     username=
  78.     password=
  79.     */
  80.       String drive="";
  81.       String url="";
  82.       String username="";
  83.       String password="";
  84.       ServletContext application = getServletContext();
  85.       String sPath=application.getRealPath("fc.properties");
  86.       //System.err.println(sPath);
  87.           InputStream is = null;
  88.           try {
  89.               is = new BufferedInputStream(new FileInputStream(sPath));
  90.           } catch(FileNotFoundException e) {
  91.               System.err.println("fc.properties 文件未找到!");
  92.           }
  93.           Properties dbProps = new Properties();
  94.           try {
  95.               dbProps.load(is);
  96.           } catch (Exception e) {
  97.               System.err.println("不能打开fc.properties 文件.");
  98.               return;
  99.           }
  100.         Enumeration propNames = dbProps.propertyNames();
  101.         while (propNames.hasMoreElements()) {
  102.           String name = (String) propNames.nextElement();
  103.               drive = dbProps.getProperty("drive");
  104.               url = dbProps.getProperty("url");
  105.               username = dbProps.getProperty("username");
  106.               password = dbProps.getProperty("password");
  107.       }
  108.       //String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  109.       //String sConnStr = "jdbc:odbc:webgrid";
  110.       Class.forName(drive);
  111.       //con = DriverManager.getConnection(sConnStr,"sa","");
  112.       con = DriverManager.getConnection(url,username,password);
  113.     } catch (Exception e){
  114.       //out.println("读表发生错误");
  115.     }
  116.     finally {
  117.       //if( con != null ){
  118.       // cm.freeConnection( "demo", con );
  119.       //}
  120.     }
  121. //-------------------------------------------------------
  122. //strKey为?后的值
  123.   String strKey=new String(req.getQueryString());
  124. //计算前台SEND来的XML串 存入strXml中
  125.   BufferedReader in = req.getReader();
  126.   String line = null;
  127.   strXml="";
  128.   while ((line = in.readLine()) != null) {
  129.         strXml=strXml+line;
  130.       }
  131. //parse XML串
  132.     try {
  133.         //DOMParserWrapper parser =
  134.         //(DOMParserWrapper)Class.forName("dom.wrappers.DOMParser").newInstance();
  135.         //document = parser.parseXml(strXml);
  136.       org.apache.xerces.parsers.DOMParser parser =
  137.           new org.apache.xerces.parsers.DOMParser();
  138.      InputSource myStr=new InputSource();
  139.       Reader myStr1=new StringReader(strXml);
  140.       myStr.setCharacterStream(myStr1);
  141.         parser.parse(myStr);
  142.         document = parser.getDocument();
  143.   }
  144.   catch (Exception e) {
  145.     }
  146. //--------------------------------------------------------
  147.   //用一个CASE语句来处理各种方法
  148.   if (strKey.equals("fillcombox")) out.print(fillcombox());
  149.   //用于用SQL语句填充combox
  150.   if (strKey.equals("checksql")) out.print(checksql());
  151.   //用于检查SQL语句是否合法
  152. /*
  153.   当数据库为oracle时应加上此四行
  154.   if (strKey.equals("fc_insertClob")) out.print(fc_insertClob());
  155.   if (strKey.equals("fc_updateClob")) out.print(fc_updateClob());
  156.   if (strKey.equals("fc_loadClob")) out.print(fc_loadClob());
  157.   if (strKey.equals("fc_loadClob1")) out.print(fc_loadClob1());
  158. */
  159.   if (strKey.equals("mytest")) out.print("aaa:"+unescape("%u5E26%u81EA%u5B9A%u4E49%u516C%u5F0F%u7684%u635F%u76CA%u8868"));
  160.   if (strKey.equals("GetReportCell")) out.print(GetReportCell()); //跨表取数
  161.   if (strKey.equals("fc_insert")) out.print(fc_insert());
  162.   if (strKey.equals("fc_insertunescape")) out.print(fc_insertunescape());
  163.   if (strKey.equals("fc_insert1")) out.print(fc_insert1()); //新增主子表
  164.   if (strKey.equals("fc_update1")) out.print(fc_update1()); //新增主子表
  165.   if (strKey.equals("fc_select")) out.print(fc_select());
  166.   if (strKey.equals("fc_FieldToTable")) out.print(fc_FieldToTable());
  167.   if (strKey.equals("GetDB")) out.print(GetDB());
  168.   if (strKey.equals("fc_select1")) out.print(fc_select1()); //多个SQL同时查的查询
  169.   if (strKey.equals("fc_select2")) out.print(fc_select2()); //明细和汇总都要的查询
  170.   if (strKey.equals("twors")) out.print(twors());//两个结果集的测试
  171.   if (strKey.equals("sqltoxml")) out.print(sqltoxml());//两个结果集的测试
  172.   if (strKey.equals("dsnSetSession"))
  173.   {
  174.     Node root = document.getChildNodes().item(0);
  175.         String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  176.         String strValue="";
  177.         try {
  178.           //当此节点值为空时
  179.           strValue=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  180.     }
  181.     catch (Exception e) {   }
  182.     HttpSession session = req.getSession(true);
  183.     session.setAttribute(strName, strValue);
  184.     out.print("");
  185.   }
  186.   if (strKey.equals("dsnGetSession"))
  187.   {
  188.     Node root = document.getChildNodes().item(0);
  189.         String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  190.     HttpSession session = req.getSession(true);
  191.     String strSR=session.getAttribute(strName).toString();;
  192.     out.print(strSR);
  193.   }
  194.       if (strKey.equals("loadprint")) {
  195.         String strX="function%20detachPage%28%29%7B%20htmlToptmp%3DhtmlTop%3B%20htmlBottomtmp%3DhtmlBottom%3B%20var%20iStart%3D0%3B%20var%20iEnd%3D0%3B%20var%20lngEndLine%3Dt.rows.length-tabCauda%3B%20var%20colwidthXML%3DLoadUserData%28%22setcolwidth%22%2C%22ReportColWidth%22+ReportName%29%3B%20effectiveWidth%3DparseInt%28repWidth-tabLeft-tabRight%29%3B%20var%20oXML1%3Dnew%20ActiveXObject%28%22Microsoft.XMLDOM%22%29%3B%20oXML1.async%3D%22false%22%3B%20oXML1.loadXML%28%22%3Croot%3E%22%20+colwidthXML+%22%3C/root%3E%22%29%3B%20sumcol%3D0%3B%20var%20compressRate%3D1%3B%20if%28prnSet.compressWidth%3D%3D1%29%20%7B%20for%20%28var%20j%3D0%3Bj%3CMaxCols%3Bj++%29%7B%20if%20%28oXML1.documentElement.childNodes.item%28j%29.getAttribute%28%22colSelect%22%29%3D%3D%22block%22%29%7B%20sumcol%3Dsumcol+parseInt%28oXML1.documentElement.childNodes.item%28j%29.getAttribute%28%22colWidth%22%29%29%3B%20%7D%20%7D%20compressRate%3DeffectiveWidth/%28sumcol+MaxCols%29%3B%20if%28compressRate%3E%3D1%20%29%20%7B%20compressRate%3D1%3B%20%7D%20compressColWidth%28compressRate%29%3B%20%7D%20var%20hcompressRate%3D1%3B%20var%20t_outerHTMLbak%3Dt.outerHTML%3B%20if%28prnSet.compressHeight%3D%3D1%29%20%7B%20cur1%3D0%3B%20for%20%28var%20i%3DtabHead%3Bi%3ClngEndLine%3Bi++%29%20%7B%20cur1%3Dcur1+parseInt%28t.rows%28i%29.style.height%29%3B%20%7D%20hcompressRate%3D%28repHeight-tabBottom-tabTop-PageHeadHeight-PageCaudaHeight-heightTop-heightBottom%29/%28cur1+lngEndLine-tabHead%29%20%3B%20if%28hcompressRate%3E%3D1%20%29%20%7B%20hcompressRate%3D1%3B%20%7D%20compressRowHeight%28hcompressRate%2CtabHead%2ClngEndLine%29%3B%20%7D%20if%20%28prnSet.compressFont%21%3D1%29%20%7B%20var%20compressFont%3D0%3B%20if%28hcompressRate%3CcompressRate%29%20%7B%20compressFont%3DhcompressRate%3B%20%7D%20else%20%7B%20compressFont%3DcompressRate%3B%20%7D%20if%28compressFont%3C1%29%7B%20t.style.fontSize%3DparseFloat%28t.style.fontSize%29*compressFont%3B%20%7D%20%7D%20setAutoturnRow%28%29%3B%20cur1%3D0%3B%20for%20%28var%20i%3DtabHead%3Bi%3ClngEndLine%3Bi++%29%20%7B%20cur1%3Dcur1+parseInt%28t.rows%28i%29.style.height%29%3B%20if%20%28cur1%3E%3DrepHeight-tabBottom-tabTop-PageHeadHeight-PageCaudaHeight-heightTop-heightBottom%7C%7C%20i%3D%3DlngEndLine-1%29%7B%20if%20%28cur1%3D%3DrepHeight-tabBottom-tabTop-PageHeadHeight-PageCaudaHeight-heightTop-heightBottom%29%20%7B%20cur1%3D0%3B%20%7D%20else%20%7B%20cur1%3DparseInt%28t.rows%28i%29.style.height%29%3B%20%7D%20sumcol%3D0%3B%20var%20bFind%3Dfalse%3B%20iStart%3D0%3B%20iEnd%3D0%3B%20if%20%28i%3D%3DlngEndLine-1%29%7B%20perPageHTML%3DperPageHTML+t.rows%28i%29.outerHTML%20%3B%20%7D%20for%20%28var%20j%3D0%3Bj%3CMaxCols%3Bj++%29%7B%20if%20%28oXML1.documentElement.childNodes.item%28j%29.getAttribute%28%22colSelect%22%29%3D%3D%22block%22%29%7B%20sumcol%3Dsumcol+parseInt%28oXML1.documentElement.childNodes.item%28j%29.getAttribute%28%22colWidth%22%29%29*compressRate%3B%20%7D%20if%20%28sumcol%3E%3DeffectiveWidth%20%7C%7C%20j%3D%3DMaxCols-1%29%7B%20if%20%28sumcol%3C%3DeffectiveWidth%29%7B%20iEnd%3Dj%3B%20sumcol%3D0%3B%20%7D%20else%20%7B%20iEnd%3Dj-1%3B%20sumcol%3DparseInt%28oXML1.documentElement.childNodes.item%28j%29.getAttribute%28%22colWidth%22%29%29*compressRate%3B%20%7D%20var%20s1%3DHideCol%28strCol%2CiStart%2CiEnd%29%3B%20bFind%3Dtrue%3B%20PageDataAdd%28Pages%29%3B%20arrPage%5BPages%5D%3DhtmlTop+htmlBottom+tabstyle+s1%3B%20arrPage%5BPages%5D%3DarrPage%5BPages%5D+PageHeadHTML%3B%20arrPage%5BPages%5D%3DarrPage%5BPages%5D+perPageHTML+PageCaudaHTML+%22%3C/Table%3E%22%20+%22%3Cimg%20%3E%22%3B%20if%20%28i%3D%3DlngEndLine-1%29%7B%20if%28cur1%3ErepHeight-tabBottom-tabTop-PageHeadHeight-PageCaudaHeight-heightTop-heightBottom%29%7B%20PageDataAdd%28Pages+1%29%3B%20arrPage%5BPages+1%5D%3DhtmlTop+htmlBottom+tabstyle+s1%3B%20arrPage%5BPages+1%5D%3DarrPage%5BPages+1%5D+PageHeadHTML+PageCaudaHTML+%22%3C/Table%3E%22+%22%3Cimg%20%3E%22%3B%20biglabel.innerHTML%3Dbiglabel.innerHTML%20+%22%3Cdiv%20class%3DpreviewDiv%20%3E%u6B63%u5728%u8BA1%u7B97...%3C/DIV%3E%22%3B%20Pages%3DPages+1%3B%20%7D%20%7D%20biglabel.innerHTML%3Dbiglabel.innerHTML%20+%22%3Cdiv%20class%3DpreviewDiv%20%3E%u6B63%u5728%u8BA1%u7B97...%3C/DIV%3E%22%3B%20Pages%3DPages+1%3B%20if%20%28%28j%3D%3DMaxCols-1%20%29%20%26%26%20%28iEnd%3D%3Dj-1%29%20%29%7B%20var%20s1%3DHideCol%28strCol%2CMaxCols-1%2CMaxCols-1%29%3B%20bFind%3Dtrue%3B%20PageDataAdd%28Pages%29%3B%20arrPage%5BPages%5D%3DhtmlTop+htmlBottom+tabstyle+s1%3B%20arrPage%5BPages%5D%3DarrPage%5BPages%5D+PageHeadHTML%3B%20arrPage%5BPages%5D%3DarrPage%5BPages%5D+perPageHTML+PageCaudaHTML+%22%3C/Table%3E%22+%22%3Cimg%20%3E%22%3B%20if%20%28i%3D%3DlngEndLine-1%29%7B%20if%28cur1%3ErepHeight-tabBottom-tabTop-PageHeadHeight-PageCaudaHeight-heightTop-heightBottom%29%7B%20PageDataAdd%28Pages+1%29%3B%20arrPage%5BPages+1%5D%3DhtmlTop+htmlBottom+tabstyle+s1%20%3B%20arrPage%5BPages+1%5D%3DarrPage%5BPages+1%5D+PageHeadHTML+PageCaudaHTML+%22%3C/Table%3E%22+%22%3Cimg%20%3E%22%3B%20biglabel.innerHTML%3Dbiglabel.innerHTML%20+%22%3Cdiv%20class%3DpreviewDiv%20%3E%u6B63%u5728%u8BA1%u7B97...%3C/DIV%3E%22%3B%20Pages%3DPages+1%3B%20%7D%20%7D%20biglabel.innerHTML%3Dbiglabel.innerHTML%20+%22%3Cdiv%20class%3DpreviewDiv%20%3E%u6B63%u5728%u8BA1%u7B97...%3C/DIV%3E%22%3B%20Pages%3DPages+1%3B%20%7D%20iStart%3DiEnd+1%3B%20%7D%20%7D%20perPageHTML%3D%22%22%3B%20%7D%20perPageHTML%3DperPageHTML+t.rows%28i%29.outerHTML%20%3B%20%7D%20mdblRate%3D1%3B%20htmlTop%3D%22%22%3B%20htmlBottom%3D%22%22%3B%20t.outerHTML%3Dt_outerHTMLbak%3B%20t.style.display%3D%22none%22%3B%20for%28var%20i%3D0%3Bi%3CPages%3Bi++%29%7B%20arrPage%5Bi%5D%3Dfc_RepStr%28arrPage%5Bi%5D%2C%22%28P%29%22%2CPages+%22%22%29%3B%20%7D%20%7D%20";
  196.         out.println(strX);
  197.       }
  198. }
  199. /*
  200. //下面是自定义的方法
  201. //--------------------------------------
  202. private String fc_insertClob() {
  203.   Node root = document.getChildNodes().item(0);
  204.     String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  205.     String strTable=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  206.     String strTable1=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  207.   String sTmp = "";
  208.   //System.out.println("1:"+strTable) ;
  209.   //java.sql.Blob myBlob     = null;
  210.     java.sql.Clob myClob     = null;
  211.     java.sql.Clob myClob1     = null;
  212.     // set Oracle's Auto Commit feature to false.
  213.     // This is necessary when manipulating Blobs and Clobs.
  214. // CallableStatement cstmt=null;
  215.   try {
  216.       con.setAutoCommit(false);
  217.       Statement stmt = con.createStatement();
  218.         stmt.execute("insert into fccell values ('"+strName+"',EMPTY_CLOB(),EMPTY_CLOB(),null)");
  219.       // ============== Manipulating the Clob column ======================
  220.       // get a reference to the clob column
  221.       stmt.execute("select * from fccell where fstrtablename='"+strName+"'");
  222.       ResultSet crs = stmt.getResultSet();
  223.       while ( crs.next() ) {
  224.           myClob = crs.getClob("fstrtable");
  225.       //oracle用此行
  226.           java.io.OutputStream osss =((weblogic.jdbc.common.OracleClob) myClob).getAsciiOutputStream();
  227.           //java.io.OutputStream osss = myClob.getAsciiOutputStream();
  228.           byte[] bss = strTable.getBytes("ASCII");
  229.           osss.write(bss);
  230.           osss.flush();
  231.           myClob1 = crs.getClob("fstrtable1");
  232.           java.io.OutputStream osss1 =((weblogic.jdbc.common.OracleClob) myClob1).getAsciiOutputStream();
  233.           //java.io.OutputStream osss1 = myClob1.getAsciiOutputStream();
  234.           byte[] bss1 = strTable1.getBytes("ASCII");
  235.           osss1.write(bss);
  236.           osss1.flush();
  237.       }
  238.       con.commit();
  239.       // read back the clob
  240.       //System.out.println("nReading the clob back from the table and displaying:");
  241.   }
  242.   catch (Exception e){
  243.     e.printStackTrace();
  244.     sTmp=e.getMessage() ;
  245.   }
  246.   return sTmp ;
  247. }
  248. //--------------------------------------
  249. private String fc_updateClob() {
  250.   Node root = document.getChildNodes().item(0);
  251.     String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  252.     String strTable=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  253.     String strTable1=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  254.   String sTmp = "";
  255.   //System.out.println("1:"+strSql) ;
  256.   //java.sql.Blob myBlob     = null;
  257.     java.sql.Clob myClob     = null;
  258.     java.sql.Clob myClob1     = null;
  259.     // set Oracle's Auto Commit feature to false.
  260.     // This is necessary when manipulating Blobs and Clobs.
  261. // CallableStatement cstmt=null;
  262.   try {
  263.     //con.setAutoCommit(false);
  264.       Statement stmt = con.createStatement();
  265.       //System.out.println("删除成功!"+strName);
  266.         stmt.executeUpdate("delete from fccell where fstrTableName='"+strName+"'");
  267.     //con.commit();
  268.       //if (1==1){
  269.           //  stmt.close();
  270.           //  return "";
  271.            //}
  272.       con.setAutoCommit(false);
  273.       stmt = con.createStatement();
  274.         //stmt.executeUpdate("delete from fccell where fstrTableName='"+strName+"'");
  275.       //System.out.println("删除成功!");
  276.       stmt.execute("insert into fccell values ('"+strName+"',EMPTY_CLOB(),EMPTY_CLOB(),null)");
  277.       //stmt.execute("update fccell set fstrtablename='"+strName+"',fstrtable=EMPTY_CLOB(),fstrtable1=EMPTY_CLOB() where fstrtableName='"+strName+"'");
  278.       // ============== Manipulating the Clob column ======================
  279.       // get a reference to the clob column
  280.       stmt.execute("select * from fccell where fstrtablename='"+strName+"'");
  281.       ResultSet crs = stmt.getResultSet();
  282.       while ( crs.next() ) {
  283.           myClob = crs.getClob("fstrtable");
  284.       //oracle时用此行
  285.           java.io.OutputStream osss =((weblogic.jdbc.common.OracleClob) myClob).getAsciiOutputStream();
  286.           //java.io.OutputStream osss = myClob.getAsciiOutputStream();
  287.           byte[] bss = strTable.getBytes("ASCII");
  288.           osss.write(bss);
  289.           osss.flush();
  290.           myClob1 = crs.getClob("fstrtable1");
  291.           java.io.OutputStream osss1 =((weblogic.jdbc.common.OracleClob) myClob1).getAsciiOutputStream();
  292.           //java.io.OutputStream osss1 = myClob1.getAsciiOutputStream();
  293.           byte[] bss1 = strTable1.getBytes("ASCII");
  294.           osss1.write(bss1);
  295.           osss1.flush();
  296.       }
  297.       con.commit();
  298.       // read back the clob
  299.       //System.out.println("nReading the clob back from the table and displaying:");
  300.   }
  301.   catch (Exception e){
  302.     e.printStackTrace();
  303.     sTmp=e.getMessage() ;
  304.   }
  305.   return sTmp ;
  306. }
  307. //--------------------------------------
  308. private String fc_loadClob() {
  309.   Node root = document.getChildNodes().item(0);
  310.     String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  311.   String sTmp = "";
  312.   //System.out.println("1:"+strSql) ;
  313.   //java.sql.Blob myBlob     = null;
  314.     java.sql.Clob myClob     = null;
  315.     java.sql.Clob myClob1     = null;
  316.     // set Oracle's Auto Commit feature to false.
  317.     // This is necessary when manipulating Blobs and Clobs.
  318. // CallableStatement cstmt=null;
  319.   try {
  320.       Statement readclob = con.createStatement();
  321.       readclob.execute("select * from fccell where fstrtablename='"+strName+"'");
  322.       ResultSet rsreadclob = readclob.getResultSet();
  323.       // read the clob in as and ASCII stream, write to a character array, and display
  324.       String sTest="";
  325.       while ( rsreadclob.next() ) {
  326.           Clob myReadClob =rsreadclob.getClob("fstrtable");
  327.           int iLen=1;
  328.           iLen=(int)myReadClob.length();
  329.           sTest=myReadClob.getSubString(1,iLen);
  330.               //System.out.println("output " +sTest );
  331.               sTmp=sTest;
  332.       }
  333.   }
  334.   catch (Exception e){
  335.     e.printStackTrace();
  336.     sTmp=e.getMessage() ;
  337.   }
  338.   return sTmp ;
  339. }
  340. //--------------------------------------
  341. private String fc_loadClob1() {
  342. //为了取另外一个备注字段值fstrTable1
  343.   Node root = document.getChildNodes().item(0);
  344.     String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  345.   String sTmp = "";
  346.   //System.out.println("1:"+strSql) ;
  347.   //java.sql.Blob myBlob     = null;
  348.     java.sql.Clob myClob     = null;
  349.     java.sql.Clob myClob1     = null;
  350.     // set Oracle's Auto Commit feature to false.
  351.     // This is necessary when manipulating Blobs and Clobs.
  352. // CallableStatement cstmt=null;
  353.   try {
  354.       Statement readclob = con.createStatement();
  355.       readclob.execute("select * from fccell where fstrtablename='"+strName+"'");
  356.       ResultSet rsreadclob = readclob.getResultSet();
  357.       // read the clob in as and ASCII stream, write to a character array, and display
  358.       String sTest="";
  359.       String sTest1="";
  360.       while ( rsreadclob.next() ) {
  361.           Clob myReadClob =rsreadclob.getClob("fstrtable1");
  362.           int iLen=1;
  363.           iLen=(int)myReadClob.length();
  364.           sTest=myReadClob.getSubString(1,iLen);
  365.       sTmp=sTest;
  366.               //System.out.println("output " +sTest );
  367.       }
  368.   }
  369.   catch (Exception e){
  370.     e.printStackTrace();
  371.     sTmp=e.getMessage() ;
  372.   }
  373.   return sTmp ;
  374. }
  375. */
  376. //--------------------------------------
  377. //两个结果集的示例,第一个用连接池打开,第二个用一般方式打开
  378. private String twors() {
  379. // Node root = document.getChildNodes().item(0);
  380.  //   String sField=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  381.   //  String sTable=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  382. /*
  383.   String strSql="select flngVoucherID,fstrVoucherTypeName from Voucher" ;
  384.   String sTmp="";
  385.   try {
  386.     Statement stmt = con.createStatement();
  387.     rs = stmt.executeQuery(strSql);
  388.     while (rs.next()) {
  389.       String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  390.       String sConnStr = "jdbc:odbc:ereport";
  391.       Class.forName(sDBDriver);
  392.       Connection con1 = DriverManager.getConnection(sConnStr,"sa","");
  393.       String sT=rs.getString(1);
  394.       Statement stmt1 = con1.createStatement();
  395.       rs1 = stmt1.executeQuery("select fstrAccountName from voucherdetail Where flngVoucherId="+sT);
  396.       while (rs1.next()) {
  397.         System.out.println("科目:"+rs1.getString(1));
  398.       }
  399.     }
  400.   }
  401.   catch (Exception e){
  402.     sTmp=e.getMessage() ;
  403.   }
  404.   return sTmp;
  405. */
  406.   return "";
  407. }
  408. //--------------------------------------
  409. private String fc_FieldToTable() {
  410.   Node root = document.getChildNodes().item(0);
  411.     String sField=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  412.     String sTable=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  413.   String strSql="select "+sField+" From "+sTable ;
  414.   String sTmp="";
  415.   try {
  416.     Statement stmt = con.createStatement();
  417.     rs = stmt.executeQuery(strSql);
  418.   }
  419.   catch (Exception e){
  420.     sTmp=e.getMessage() ;
  421.   }
  422.   return sTmp;
  423. }
  424. //--------------------------------------
  425. private String GetDB() {
  426.     Node root = document.getChildNodes().item(0);
  427.         String sConnect=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  428.         String sSql=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  429.         sSql=fcTrans(sSql);
  430.         //System.out.println(sSql);
  431.         String sR="";
  432.         String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; //建立数据库连接
  433.     String sConnStr = "jdbc:odbc:"+sConnect ;
  434.     try {
  435.       Class.forName(sDBDriver);
  436.       con = DriverManager.getConnection(sConnStr,"sa","");
  437.       Statement stmt = con.createStatement();
  438.       rs = stmt.executeQuery(sSql);//执行查询建立结果集
  439.       if (rs.next()) {
  440.         sR=rs.getString(1);
  441.       }
  442.       rs.close();
  443.       stmt.close();
  444.     }
  445.     catch (Exception e){
  446.       sR=e.getMessage();
  447.     }
  448.     return sR;
  449. }
  450. //--------------------------------------
  451. private String fc_select() {
  452.   Node root = document.getChildNodes().item(0);
  453.     String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  454.     String strPageNo=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  455.   int iPageNo=Integer.parseInt(strPageNo,10);//页号
  456.     String strPageSize=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  457.   int iPageSize=Integer.parseInt(strPageSize,10);//页尺寸
  458.   strSql=fcTrans(strSql);
  459.   //System.out.println("fc_select:"+strSql);
  460.   String strX = "<root>";
  461.   String sTmp = "";
  462.   int iField=1;
  463.   int iCount=1;
  464.   int i=1;
  465.   try {
  466.     Statement stmt = con.createStatement();
  467.     rs = stmt.executeQuery(strSql);
  468.         ResultSetMetaData rsmd=rs.getMetaData();
  469.     while (rs.next()) {
  470.       //每页30行
  471.       if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  472.             strX = strX + "<record>";
  473.         iCount=rsmd.getColumnCount();
  474.             for (iField = 1 ; iField<=iCount ;iField++ )
  475.         {
  476.           //当有NULL字段名时,表示此则无需给值.用fcnull标记名区分.
  477.           String colName=rsmd.getColumnName(iField);
  478.           if (colName==null) {
  479.             strX = strX + "<fcnull></fcnull>" ;
  480.           }
  481.           else {
  482.             String sT=rs.getString(iField);
  483.             if (sT==null) sT="";
  484.                   strX = strX + "<fc>" + sT +"</fc>" ;
  485.                 }
  486.         }
  487.             strX = strX + "</record>";
  488.           }
  489.           i = i + 1;
  490.     }
  491.     i=i-1;
  492.     if (i>0) {
  493.       strX = strX + "<pages>"+i+"</pages>";
  494.     }
  495.     strX = strX + "</root>";
  496.     rs.close();
  497.   }
  498.   catch (Exception e){
  499.     sTmp=e.getMessage() ;
  500.     System.out.println(sTmp);
  501.     e.printStackTrace();
  502.   }
  503.   return strX ;
  504. }
  505. //--------------------------------------
  506. private String fc_select1() {
  507. //将页号和页尺寸两个节点从第一个子节点和第二个子节点改为第一个子节点下的第一个子节点和第二个子节点
  508. //将第二个子节点空出来给设置数据源用.
  509. //第二个子节点下将有三个子节点:数据源名称,用户名,密码.
  510.   Node root = document.getChildNodes().item(0);
  511.     String strPageNo=root.getChildNodes().item(0).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  512.   int iPageNo=Integer.parseInt(strPageNo,10);//页号
  513.     String strPageSize=root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  514.   int iPageSize=Integer.parseInt(strPageSize,10);//页尺寸
  515. //数据源
  516.     strDataSource=root.getChildNodes().item(1).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  517.     strUserName=root.getChildNodes().item(1).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  518.     try {
  519.       strPassword=root.getChildNodes().item(1).getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  520.     }
  521.     catch (Exception e){
  522.       strPassword="";
  523.     }
  524. //-------
  525. //多SQL查询
  526.   String strX = "<root>";
  527.   int ii=0;
  528.   int i=1;
  529.   //按顺序取出SQL节点
  530.   for(ii=2;ii<root.getChildNodes().getLength();ii++){
  531.       String strSql=root.getChildNodes().item(ii).getChildNodes().item(0).getNodeValue();
  532.     strX=strX+fc_selectTmp(iPageNo,iPageSize,i,strSql);
  533.     i=iPosition;
  534.   } //For循环结束
  535.   i=i-1;
  536.   if (i>0) {
  537.     strX = strX + "<pages>"+i+"</pages>";
  538.   }
  539.   strX = strX + "</root>";
  540.   return strX ;
  541. }
  542. //--------------------------------------
  543. //计算一个SQL查询,供fc_select1 fc_select2类函数使用
  544. private String fc_selectTmp(int iPageNo,int iPageSize,int iPos,String strSql) {
  545. //iPageNo为起始页号,iPageSize为页尺寸,iPos为所有查询结果的行位置,strSql为要执行的SQL语句
  546. //返回SQL语句的运行结果,结果为以<record>...</record>形式的XML串
  547. //
  548. /*
  549.   try{
  550.     byte [] by = strSql.getBytes("ISO-8859-1"); //
  551.     String ts1 = new String(by,"GB2312");
  552.     String ts2 = new String(by,"UTF-8");
  553.     byte [] by1 = strSql.getBytes("GB2312"); //
  554.     String ts3 = new String(by1,"ISO-8859-1");
  555.     String ts4 = new String(by1,"UTF-8");
  556.     byte [] by2 = strSql.getBytes("UTF-8"); //
  557.     String ts5 = new String(by2,"ISO-8859-1");
  558.     String ts6 = new String(by2,"GB2312");
  559.     System.out.println("ts1:"+ts1+";"+ts2+ts3);
  560.     System.out.println(ts4+ts5+ts6);
  561.     System.out.println("中:"+strSql);
  562.   }catch(Exception e){}
  563.   */
  564.   //System.out.println("中:"+strSql);
  565. //从fc_select2中调用此函数时已经转过码了,不能再转
  566.   if(strSql.indexOf("%20")>0){
  567.     strSql=fcTrans(strSql);
  568.   }
  569.   //System.out.println("后:"+strSql);
  570.   String sTmp = "";
  571.   String strX = "";
  572.   int iField=1;
  573.   int iCount=1;
  574.   int i=iPos;
  575.   try {
  576.     String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  577.     String sConnStr = "jdbc:odbc:"+strDataSource;
  578.     Class.forName(sDBDriver);
  579.     Connection conTmp = DriverManager.getConnection(sConnStr,strUserName,strPassword);
  580.     /**
  581.       注:当改动数据库连接时应将下面这行的conTmp改为con,同时去掉上面四行.
  582.     */
  583.     Statement stmtTmp = conTmp.createStatement();
  584.     ResultSet rsTmp = stmtTmp.executeQuery(strSql);
  585.         ResultSetMetaData rsmdTmp=rsTmp.getMetaData();
  586.     while (rsTmp.next()) {
  587.       //每页30行
  588.       if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  589.             strX = strX + "<record>";
  590.         iCount=rsmdTmp.getColumnCount();
  591.             for (iField = 1 ; iField<=iCount ;iField++ )
  592.         {
  593.           //当有NULL字段名时,表示此则无需给值.用fcnull标记名区分.
  594.           String colName=rsmdTmp.getColumnName(iField);
  595.           if (colName==null) {
  596.             strX = strX + "<fcnull></fcnull>" ;
  597.           }
  598.           else {
  599.             String sT=rsTmp.getString(iField);
  600.             if (sT==null) sT="";
  601.                   strX = strX + "<fc>" + sT +"</fc>" ;
  602.                 }
  603.         }
  604.             strX = strX + "</record>";
  605.           }
  606.           i = i + 1;
  607.     }
  608.     rsTmp.close();
  609.     stmtTmp.close();
  610.     con.close();
  611.   }
  612.   catch (Exception e){
  613.     sTmp=e.getMessage() ;
  614.     System.out.println("0712:"+sTmp);
  615.     System.out.println("0712:"+strSql);
  616.   }
  617.   iPosition=i; //用iPosition全局变量将i值传到调用函数中.
  618.   //System.out.println("strX="+strSql);
  619.   return strX;
  620. }
  621. //--------------------------------------
  622. //带分组小计的多SQL查询
  623. private String fc_select2() {
  624. //sXml的结构:
  625. //1页号 2页尺寸 3主SQL<1SQL语句 2<before... > > 4Group<1SQL语句 2GroupField >
  626.   int i=1;
  627.   String beforeSum="0"; //=0表示合计行在后,=1表示合计行在前。
  628.   String strX = "";
  629.   String strX1 = "";
  630.   String strRetXml = ""; //返回的总的Xml串
  631. //将页号和页尺寸两个节点从第一个子节点和第二个子节点改为第一个子节点下的第一个子节点和第二个子节点
  632. //将第二个子节点空出来给设置数据源用.
  633. //第二个子节点下将有三个子节点:数据源名称,用户名,密码.
  634.   Node root = document.getChildNodes().item(0);
  635.     String strPageNo=root.getChildNodes().item(0).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  636.   int iPageNo=Integer.parseInt(strPageNo,10);//页号
  637.     String strPageSize=root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  638.   int iPageSize=Integer.parseInt(strPageSize,10);//页尺寸
  639. //数据源
  640.     strDataSource=root.getChildNodes().item(1).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  641.     strUserName=root.getChildNodes().item(1).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  642.     try {
  643.       strPassword=root.getChildNodes().item(1).getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  644.     }
  645.     catch (Exception e){
  646.       strPassword="";
  647.     }
  648. //-------
  649. //第3个子节点的第1个子节点的值用如下求法.
  650.     String strSqlBak=root.getChildNodes().item(2).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  651.   String strSql="";
  652.   strSql=fcTrans(strSqlBak);
  653.   //System.out.println(strSql);
  654. //第3个子节点的第2个子节点下的第1个子节点的值用如下求法.
  655.     String strStartXml=""; //首合计行的xml串
  656.     //总计行之类的
  657.     try {
  658.       //如有一个节点表示首合计行,如有二个节点表示第一为首合计行,第二为尾合计行
  659.       String sStartSql=root.getChildNodes().item(2).getChildNodes().item(1).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  660.     //此处现只假定只有一个查询,如有多个,则此处要用循环
  661.     strStartXml=fc_selectTmp(iPageNo,iPageSize,i,sStartSql);
  662.     i=iPosition;
  663.   }
  664.   catch (Exception e){
  665.   }
  666.   //-----------------
  667.   String sGroup1="";
  668.   String sGroup2="";
  669.   //String sGroup3="";
  670. //第一个分组
  671.     sGroup1=root.getChildNodes().item(3).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  672.   sGroup1=fcTrans(sGroup1);
  673.   //分组字段名
  674.     String sGroupField1=root.getChildNodes().item(3).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  675. //第二个分组
  676.     sGroup2=root.getChildNodes().item(4).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  677.   sGroup2=fcTrans(sGroup2);
  678.     String sGroupField2=root.getChildNodes().item(4).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  679.   String sTmp = "";
  680.   int iField=1;
  681.   int iCount=1;
  682.   String sGroupKey1=""; //保存分组字段的值
  683.   String sGroupKey2="";
  684.   String tmpsGroup="";
  685.   try {
  686.     String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  687.     String sConnStr = "jdbc:odbc:"+strDataSource;
  688.     Class.forName(sDBDriver);
  689.     Connection con1 = DriverManager.getConnection(sConnStr,strUserName,strPassword);
  690.     Connection con2 = DriverManager.getConnection(sConnStr,strUserName,strPassword);
  691.     /**
  692.       注:当改动数据库连接时应将下面的con1和con2改为con,同时去掉上面5行.
  693.     */
  694.     Statement stmt1 = con1.createStatement();
  695.     Statement stmt2 = con2.createStatement();
  696.     rs1 = stmt1.executeQuery(sGroup1);
  697.         ResultSetMetaData rsmd1=rs1.getMetaData();
  698.     while (rs1.next()) {
  699.       //strX="";
  700.       //strX1="";
  701.       sGroupKey1=rs1.getString(1);
  702.       //算出第一个分组的合计行值
  703.       //if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  704.             strX = "<recordsum1>"; //设特别tagName用于在前台设底色等属性
  705.         iCount=rsmd1.getColumnCount();
  706.             //第一个字段是分组字段值,所以从2开始
  707.             for (iField = 2 ; iField<=iCount ;iField++ )
  708.         {
  709.           //当有NULL字段名时,表示此则无需给值.用fcnull标记名区分.
  710.           String colName=rsmd1.getColumnName(iField);
  711.           if (colName==null) {
  712.             strX = strX + "<fcnull></fcnull>" ;
  713.           }
  714.           else {
  715.             String sT=rs1.getString(iField);
  716.             if (sT==null) sT="";
  717.             if(iField == 2)
  718.               strX = strX + "<fc>小计 " + sT +"</fc>" ;
  719.             else
  720.                     strX = strX + "<fc>" + sT +"</fc>" ;
  721.                 }
  722.         }
  723.             strX = strX + "</recordsum1>";
  724.           //}
  725.       if(sGroup2.equals("fcnull")){
  726.         //只有一级分组
  727.         //准备下一个的SQL语句
  728.         tmpsGroup=fc_RepStr(strSql,"1999=1999","1999=1999"+" and " +sGroupField1+"='"+sGroupKey1+"'");
  729.         //此处定合计行在明细行的前面还是后面
  730.         if(beforeSum.equals("1")){
  731.           //-------合计行在前
  732.           if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  733.             strRetXml+=strX;
  734.           }
  735.           i++;
  736.           strRetXml+=fc_selectTmp(iPageNo,iPageSize,i,tmpsGroup);
  737.           i=iPosition;
  738.         }
  739.         else {
  740.           //-------合计行在后
  741.           strRetXml+=fc_selectTmp(iPageNo,iPageSize,i,tmpsGroup);
  742.           i=iPosition;
  743.           if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  744.             strRetXml+=strX;
  745.           }
  746.           i++;
  747.         }
  748.       }
  749.       else { //有二级分组
  750.         //准备下一个的SQL语句
  751.         tmpsGroup=fc_RepStr(sGroup2,"1999=1999","1999=1999"+" and " +sGroupField1+"='"+sGroupKey1+"'");
  752.         //System.out.println("my:"+tmpsGroup);
  753.         rs2 = stmt2.executeQuery(tmpsGroup);
  754.             ResultSetMetaData rsmd2=rs2.getMetaData();
  755.         if(beforeSum.equals("1")){
  756.           //-------合计行在前
  757.           if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  758.             strRetXml+=strX;
  759.           }
  760.           i++;
  761.         }
  762.         while (rs2.next()) {
  763.           sGroupKey2=rs2.getString(1);
  764.           //算出第二个分组的合计行值
  765.                 strX1 =  "<recordsum2>";
  766.             iCount=rsmd2.getColumnCount();
  767.                 //第一个字段是分组字段值,所以从2开始
  768.                 for (iField = 2 ; iField<=iCount ;iField++ )
  769.             {
  770.               //当有NULL字段名时,表示此则无需给值.用fcnull标记名区分.
  771.               String colName=rsmd2.getColumnName(iField);
  772.               if (colName==null) {
  773.                 strX1 = strX1 + "<fcnull></fcnull>" ;
  774.               }
  775.               else {
  776.                 String sT=rs2.getString(iField);
  777.                 if (sT==null) sT="";
  778.                 if(iField == 2)
  779.                   strX1 = strX1 + "<fc>小 计 " + sT +"</fc>" ;
  780.                 else
  781.                         strX1 = strX1 + "<fc>" + sT +"</fc>" ;
  782.                     }
  783.             }
  784.                 strX1 = strX1 + "</recordsum2>";
  785.           //-------------------------------
  786.           //准备下一个的SQL语句
  787.           tmpsGroup=fc_RepStr(strSql,"1999=1999","1999=1999"+" and " +sGroupField1+"='"+sGroupKey1+"'"+" and " +sGroupField2+"='"+sGroupKey2+"'");
  788.           //此处定合计行在明细行的前面还是后面
  789.           if(beforeSum.equals("1")){
  790.             //-------合计行在前
  791.             if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  792.               strRetXml+=strX1;
  793.             }
  794.             i++;
  795.             strRetXml+=fc_selectTmp(iPageNo,iPageSize,i,tmpsGroup);
  796.             i=iPosition;
  797.           }
  798.           else {
  799.             //-------合计行在后
  800.             strRetXml+=fc_selectTmp(iPageNo,iPageSize,i,tmpsGroup);
  801.             i=iPosition;
  802.             if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  803.               strRetXml+=strX1;
  804.             }
  805.             i++;
  806.           }
  807.         }//二级分组的循环结束
  808.         if(beforeSum.equals("0")){
  809.           //-------合计行在后
  810.           if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  811.             strRetXml+=strX;
  812.           }
  813.           i++;
  814.         }
  815.       } //判断有无二级分组的IF结束
  816.     }//一级分组的循环结束
  817. //----- loop end
  818.     //第3个子节点(mainsql)的第3个子节点下(end)的第1个子节点(sql)的值用如下求法.
  819.       String strEndXml=""; //首合计行的xml串
  820.       //总计行之类的
  821.       try {
  822.         //如有一个节点表示首合计行,如有二个节点表示第一为首合计行,第二为尾合计行
  823.         String sStartSql=root.getChildNodes().item(2).getChildNodes().item(2).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  824.       //System.out.println("endsql:"+sStartSql);
  825.       //此处现只假定只有一个查询,如有多个,则此处要用循环
  826.       strEndXml=fc_selectTmp(iPageNo,iPageSize,i,sStartSql);
  827.       i=iPosition;
  828.     }
  829.     catch (Exception e){
  830.     }
  831.     //-----------------
  832.     i=i-1;
  833.     if (i>0) {
  834.       strRetXml = strStartXml+strRetXml +strEndXml+ "<pages>"+i+"</pages>";
  835.     }
  836.     strRetXml = "<root>"+strRetXml + "</root>";
  837.     //rs.close();
  838.   }
  839.   catch (Exception e){
  840.     e.printStackTrace() ;
  841.     sTmp=e.getMessage() ;
  842.     System.out.println("071201"+sTmp);
  843.   }
  844.   return strRetXml ;
  845. }
  846. //--------------------------------------
  847. private String fc_insertunescape() {
  848.   Node root = document.getChildNodes().item(0);
  849.     String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  850. // strSql=fcTrans(strSql);
  851.   String sTmp = "";
  852. // CallableStatement cstmt=null;
  853.   try {
  854.     Statement stmt = con.createStatement();
  855. // stmt.executeQuery(strSql);
  856.     stmt.executeUpdate(strSql);
  857. /*
  858.     cstmt=con.prepareCall("{call sp_getID(?)}");
  859.     cstmt.registerOutParameter(1,java.sql.Types.INTEGER,1);
  860.     cstmt.executeUpdate();
  861.     sTmp="<dsnID>"+ cstmt.getInt(1)+"</dsnID>";
  862. */
  863.   }
  864.   catch (Exception e){
  865.     sTmp=e.getMessage() ;
  866.   }
  867.   return sTmp ;
  868. }
  869. //--------------------------------------
  870. private String fc_insert() {
  871.   Node root = document.getChildNodes().item(0);
  872.     String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  873.   strSql=fcTrans(strSql);
  874.   String sTmp = "";
  875. // CallableStatement cstmt=null;
  876.   try {
  877.     Statement stmt = con.createStatement();
  878. // stmt.executeQuery(strSql);
  879.     stmt.executeUpdate(strSql);
  880. /*
  881.     cstmt=con.prepareCall("{call sp_getID(?)}");
  882.     cstmt.registerOutParameter(1,java.sql.Types.INTEGER,1);
  883.     cstmt.executeUpdate();
  884.     sTmp="<dsnID>"+ cstmt.getInt(1)+"</dsnID>";
  885. */
  886.   }
  887.   catch (Exception e){
  888.     sTmp=e.getMessage() ;
  889.   }
  890.   return sTmp ;
  891. }
  892. //--------------------------------------
  893. private String fc_insert1() {
  894. //凭证增加
  895.   Node root = document.getChildNodes().item(0);
  896.   String sTmp = "";
  897.   CallableStatement cstmt=null;
  898.   try {
  899.     Statement stmt = con.createStatement();
  900.     int i;
  901.     //System.out.println(root.getChildNodes().getLength());
  902.       String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  903.     strSql=fcTrans(strSql);
  904.     stmt.executeUpdate(strSql);
  905.     String sID="1"; //存主表新生成的ID
  906.     try {
  907.       //SQL Server 的存储过程,用于计算自动ID
  908.       cstmt=con.prepareCall("{call sp_getID(?)}");
  909.       cstmt.registerOutParameter(1,java.sql.Types.INTEGER,1);
  910.       cstmt.executeUpdate();
  911.       sID=""+cstmt.getInt(1);
  912.     }
  913.     catch (Exception e1){
  914.       try {
  915.         //计算MS Access数据库的主表ID
  916.         String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  917.         String sConnStr = "jdbc:odbc:webprint";
  918.         Class.forName(sDBDriver);
  919.         Connection con1 = DriverManager.getConnection(sConnStr,"sa","");
  920.         Statement stmt1 = con1.createStatement();
  921.         rs1 = stmt1.executeQuery("select max(flngSendOutID) From SendOut");
  922.         if (rs1.next()) {
  923.           sID=rs1.getString(1);
  924.         }
  925.       }
  926.       catch (Exception e2){
  927.       }
  928.     }
  929.     //追加子表内容
  930.     for(i=1;i<root.getChildNodes().getLength();i++) {
  931.         strSql=root.getChildNodes().item(i).getChildNodes().item(0).getNodeValue();
  932.       strSql=fcTrans(strSql);
  933.       strSql=strSql+sID+" )";
  934.       stmt.executeUpdate(strSql);
  935.     }
  936.   }
  937.   catch (Exception e){
  938.     System.out.println(e.getMessage()) ;
  939.   }
  940.   return sTmp ;
  941. }
  942. //--------------------------------------
  943. private String fc_update1() {
  944. //凭证修改
  945.   Node root = document.getChildNodes().item(0);
  946.   String sTmp = "";
  947.   String strSql="";
  948.   try {
  949.     Statement stmt = con.createStatement();
  950.     int i;
  951.     for(i=0;i<root.getChildNodes().getLength();i++) {
  952.         strSql=root.getChildNodes().item(i).getChildNodes().item(0).getNodeValue();
  953.       strSql=fcTrans(strSql);
  954.       stmt.executeUpdate(strSql);
  955.     }
  956.   }
  957.   catch (Exception e){
  958.     System.out.println(e.getMessage()) ;
  959.   }
  960.   return sTmp ;
  961. }
  962. //--------------------------------------
  963. /**
  964. *检查SQL语句是否为合法的SQL语句
  965. *@param sql 要检查的SQL语句.
  966. *@return 是则返回空,否则返回非空
  967. *@date 2002-05-20
  968. **/
  969. private String checksql() {
  970.   Node root = document.getChildNodes().item(0);
  971.     String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  972.   strSql=fcTrans(strSql);
  973.   //System.out.println(strSql);
  974.   String strX = "";
  975.   try {
  976.     Statement stmt = con.createStatement();
  977.     rs = stmt.executeQuery(strSql);
  978.     rs.close();
  979.   }
  980.   catch (Exception e){
  981.     strX=e.getMessage() ;
  982.   }
  983.   return strX ;
  984. }
  985. //--------------------------------------
  986. private String fillcombox() {
  987. //拼成的XML串的节点名为option,可以直接填入combox中
  988. //返回的XML串无根节点.
  989.   Node root = document.getChildNodes().item(0);
  990.     String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  991. /*
  992.     String strPageNo=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  993.   int iPageNo=Integer.parseInt(strPageNo,10);//页号
  994.     String strPageSize=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  995.   int iPageSize=Integer.parseInt(strPageSize,10);//页尺寸
  996. */
  997.   strSql=fcTrans(strSql);
  998.   //System.out.println(strSql);
  999.   String strX = "";
  1000.   String sTmp = "";
  1001.   int iField=1;
  1002.   int iCount=1;
  1003.   int i=1;
  1004.   try {
  1005.     Statement stmt = con.createStatement();
  1006.     rs = stmt.executeQuery(strSql);
  1007.           ResultSetMetaData rsmd=rs.getMetaData();
  1008.     iCount=rsmd.getColumnCount();
  1009.                 String sT="";
  1010.     while (rs.next()) {
  1011.       //每页30行
  1012.       //if ((i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) || iPageSize==-1) {
  1013.             //strX = strX + "<option>";
  1014.       if(iCount>1){
  1015.       //假定两列时,第一列为value,第二列为text
  1016.          sT=rs.getString(1);
  1017.          if (sT==null) sT="";
  1018.          strX+="<option value='" +sT;
  1019.          sT=rs.getString(2);
  1020.          if (sT==null) sT="";
  1021.          strX+="' >"+sT+"</option>";
  1022.       }else {
  1023.       //一列时则value和text相同
  1024.          sT=rs.getString(1);
  1025.          if (sT==null) sT="";
  1026.          strX+="<option value='" +sT;
  1027.          strX+="' >"+sT+"</option>";
  1028.       }
  1029. //                 }
  1030.                   i = i + 1;
  1031.     }
  1032.     //strX = strX + "</root>";
  1033.     rs.close();
  1034.   }
  1035.   catch (Exception e){
  1036.     sTmp=e.getMessage() ;
  1037.     System.out.println(sTmp);
  1038.   }
  1039.   return strX ;
  1040. }
  1041. //--------------------------------------
  1042. private String SqlToField(String strSql) {
  1043. //用一个SQL语句返回一个字段的第一个记录值
  1044.   String strR =  "";
  1045.   try {
  1046.     Statement stmt = con.createStatement();
  1047.     rs = stmt.executeQuery(strSql);
  1048.     if (rs.next()) {
  1049.         strR = rs.getString(1) ;
  1050.     }
  1051.     rs.close();
  1052.     stmt.close();
  1053.   }
  1054.   catch (Exception e){
  1055.       //out.println("读表发生错误");
  1056.     }
  1057.   return strR;
  1058. }
  1059. //--------------------------------------
  1060. //报表增加
  1061. //--------------------------------------
  1062. private String GetReportCell() {
  1063. //找到指定位置的单元的值.
  1064.   Node root = document.getChildNodes().item(0);
  1065.   String sRow = root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  1066.   int iRow=Integer.parseInt(sRow,10);
  1067.   String sCol =root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  1068.   int iCol=Integer.parseInt(sCol,10);
  1069.   String strTableName =root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  1070.   strTableName=fcTrans(strTableName);
  1071.   //int iRow=Integer.parseInt(sRow,10);
  1072.   String strSql="";
  1073.   //String strID=TableNameToID(strTableName);
  1074.   //strSql = "Select fstrDiv1 From cellsheet where flngID=" + strID + " and flngSheetNo=" + strPage  ;
  1075.   strSql = "Select fstrTable1 From fcCell where fstrTableName='" + strTableName+"'"  ;
  1076.   //String sLogCol=ToLogCol(sRow,sCol,"Select fstroCoor From cellsheet where flngID=" + strID + " and flngSheetNo=" + strPage );
  1077.   //int iCol=Integer.parseInt(sLogCol,10);
  1078.   String strR="";
  1079.   String strR1="";
  1080.   int iStart=0;
  1081.   int iStartTmp=0;
  1082.   int iTmp=0;
  1083.   int iEnd=0;
  1084.   try {
  1085.     Statement stmt = con.createStatement();
  1086.     rs = stmt.executeQuery(strSql);
  1087.     if (rs.next()) {
  1088.         strR = rs.getString(1) ;
  1089.     }
  1090.     rs.close();
  1091.     stmt.close();
  1092.     //strR1=strR;
  1093.     //查找定位TR TD
  1094.     //iStart=strR.indexOf("%20id%3Dt%20",0);//查找 id=t
  1095.     for (int i=0;i<=iRow;i++) {
  1096.       iStartTmp=strR.indexOf("%3CTR",iStart+1);//TR开始符
  1097.       if (iStartTmp>0) {
  1098.         iStart=iStartTmp;
  1099.       }
  1100.     }
  1101.     if (iStartTmp>0) {
  1102.       for (int i=0;i<=iCol;i++) {
  1103.         iStartTmp=strR.indexOf("%3CTD",iStart+1); //TD开始符
  1104.         if (iStartTmp>0) {
  1105.           iStart=iStartTmp;
  1106.         }
  1107.       }
  1108.       iStart=strR.indexOf("%3E",iStart);//TD后的第一个>
  1109.       iEnd=strR.indexOf("%3C/TD%3E",iStart);//TD结束符
  1110.       if (iEnd>iStart && iStart>0) {
  1111.         strR=strR.substring(iStart+3,iEnd);
  1112.       }
  1113.     }
  1114.   }
  1115.   catch (Exception e){
  1116.     System.out.println(e.getMessage());
  1117.   }
  1118.   //return Integer.toString(iEnd) ;
  1119.   System.out.println(strR);
  1120.   return "<root>"+strR+"</root>";
  1121. }
  1122. //--------------------------------------
  1123. //--------------------------------------
  1124. //通用函数
  1125. private  String fc_RepStr(String mainStr,String findStr,String replaceStr){
  1126. //多次替代
  1127.   int iStart=0;
  1128.   int iEnd=0;
  1129.   String sRet="";
  1130.   while (iStart<mainStr.length()) {
  1131.     iEnd=mainStr.indexOf(findStr,iStart);
  1132.     if (iEnd<0) {
  1133.       iEnd=mainStr.length();
  1134.       sRet=sRet+mainStr.substring(iStart,iEnd);
  1135.     }
  1136.     else {
  1137.       sRet=sRet+mainStr.substring(iStart,iEnd)+replaceStr;
  1138.     }
  1139.     iStart=iEnd+findStr.length();
  1140.   }
  1141.   return sRet;
  1142. }
  1143. private String rTrim(String str){
  1144.      String rstr = str;
  1145.   if(str == null)
  1146.          {
  1147.     rstr = "";
  1148.   }
  1149.          else
  1150.          {
  1151.     if(str.length() == 0) rstr = "";
  1152.     if(str.length() > 0)
  1153.     {
  1154.       for(int i = str.length() ; i  >  0 ; i--)
  1155.              {
  1156.      if(str.substring(i-1,i).equals(" "))
  1157.        rstr = rstr.substring(0,i-1);
  1158.      else break;
  1159.    }
  1160.      }
  1161.   }
  1162.   return rstr;
  1163. }
  1164. //--------------------------------------------
  1165. private String  XmlOut(ResultSet oRs , String sRowEntityName,long EntFormat )
  1166. {
  1167.   String sSet="";
  1168.   try {
  1169.     //oRs.first();
  1170.     while (oRs.next())
  1171.     {
  1172.         sSet = sSet + RecordToXMLEntity(oRs, sRowEntityName, EntFormat) ;
  1173.     }
  1174.   }
  1175.   catch (Exception e)
  1176.   {
  1177.     return e.getMessage();
  1178.   }
  1179.   return sSet ;
  1180. }
  1181. private String  RecordToXMLEntity(ResultSet oRs , String EntityName,long EntFormat)
  1182. {
  1183.   String sEty ="";
  1184.   int iField=1;
  1185.   int iCount=1;
  1186.     try {
  1187.       ResultSetMetaData rsmd=oRs.getMetaData();
  1188.     iCount=rsmd.getColumnCount();
  1189.     if (EntFormat==1)
  1190.     {
  1191.     //属性
  1192.           sEty = "<" + EntityName ;
  1193.           for (iField = 1 ; iField<=iCount ;iField++ )
  1194.       {
  1195.               sEty = sEty + " " + rsmd.getColumnName(iField) +"='" + oRs.getString(iField) +"'" ;
  1196.       }
  1197.           sEty = sEty + "/>" + "n";
  1198.     }
  1199.     else
  1200.     {
  1201.     //节点
  1202.         sEty = "<" + EntityName +">" +"n" ;
  1203.           for (iField = 1 ; iField<=iCount ; iField++)
  1204.           {
  1205.               sEty = sEty +"<" +  rsmd.getColumnName(iField) +">" + oRs.getString(iField) +"</" + rsmd.getColumnName(iField) +">";
  1206.           }
  1207.           sEty = sEty +"n" +"</" + EntityName +">" +"n";
  1208.     }
  1209.   }
  1210.   catch (Exception e)
  1211.   {
  1212.   }
  1213.   return sEty;
  1214. }
  1215. //-----------------------------------------------------
  1216. private Attr[] sortAttributes(NamedNodeMap attrs) {
  1217.     int len = (attrs != null) ? attrs.getLength() : 0;
  1218.     Attr array[] = new Attr[len];
  1219.     for ( int i = 0; i < len; i++ ) {
  1220.         array[i] = (Attr)attrs.item(i);
  1221.     }
  1222.     for ( int i = 0; i < len - 1; i++ ) {
  1223.         String name  = array[i].getNodeName();
  1224.         int    index = i;
  1225.         for ( int j = i + 1; j < len; j++ ) {
  1226.             String curName = array[j].getNodeName();
  1227.             if ( curName.compareTo(name) < 0 ) {
  1228.                 name  = curName;
  1229.                 index = j;
  1230.             }
  1231.         }
  1232.         if ( index != i ) {
  1233.             Attr temp    = array[i];
  1234.             array[i]     = array[index];
  1235.             array[index] = temp;
  1236.         }
  1237.     }
  1238.     return(array);
  1239. } // sortAttributes(NamedNodeMap):Attr[]
  1240. //--------------------------------------------
  1241. //WebCode中用
  1242. private  String sqltoxml()
  1243. {
  1244.     Node root=document.getChildNodes().item(0);
  1245.     String strpage=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  1246.     String strsql=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  1247.     strsql=fcTrans(strsql);
  1248.     String strsearch=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  1249.     String strrownum=root.getChildNodes().item(3).getChildNodes().item(0).getNodeValue();
  1250.     String showcheckbox=root.getChildNodes().item(4).getChildNodes().item(0).getNodeValue();
  1251.     String blnempty=root.getChildNodes().item(5).getChildNodes().item(0).getNodeValue();
  1252.     //加空行
  1253.     showcheckbox=showcheckbox.toUpperCase();
  1254.     int intpage=Integer.parseInt(strpage);//开始页
  1255.     int intrownum=Integer.parseInt(strrownum);//页尺寸
  1256.     String strX="";
  1257.   try {
  1258. //建立数据库连接
  1259.     /*
  1260.     strDataSource="webgrid";
  1261.     strUserName="sa";
  1262.     strPassword="";
  1263.     String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  1264.     String sConnStr = "jdbc:odbc:"+strDataSource;
  1265.     Class.forName(sDBDriver);
  1266.     Connection con1 = DriverManager.getConnection(sConnStr,strUserName,strPassword);
  1267.     Statement stmt = con1.createStatement();
  1268.     */
  1269.     //原来的
  1270.     Statement stmt = con.createStatement();
  1271. //执行查询建立结果集
  1272. //-----------------
  1273.     //System.out.print(strsearch);
  1274.     int i=1;
  1275.     if (strsearch.compareTo("###")!=0){
  1276.       rs = stmt.executeQuery(strsql);
  1277.       boolean bfind=false;
  1278.       while(rs.next()){
  1279.         String searchone=rs.getString(1);
  1280.           //out.print(searchone);
  1281.         if (searchone.equals(strsearch)){
  1282.           bfind=true;
  1283.           break;
  1284.         }
  1285.         i=i+1;
  1286.       }
  1287.       rs.close();
  1288.       if (bfind==true){
  1289.         if (i<=intrownum){
  1290.           intpage=1;
  1291.         }
  1292.         else {
  1293.           if (i%intrownum>0){
  1294.             intpage=i/intrownum+1;
  1295.           }
  1296.           else {
  1297.             intpage=i/intrownum;
  1298.           }
  1299.         }
  1300.       }
  1301.       //自动定位到当前选择所在值的页
  1302.     }
  1303.     //out.print("intpage="+intpage);
  1304. //-----------------
  1305. // System.out.print(intpage);
  1306.     rs = stmt.executeQuery(strsql);
  1307.     ResultSetMetaData rsmd=rs.getMetaData();
  1308.     strX="<root>";
  1309.     String sLabel="";
  1310.     int k=0;
  1311.     int thisrow=0;
  1312.     int pagenumber=0;//总页数
  1313.     int iFind=0; //控制在开始处插入一个空白行
  1314.     while (rs.next()) {
  1315.       if (blnempty.equals("true") && iFind==0) {
  1316.       //插入一个空白行
  1317.         strX=strX+"<tr height='16'>";
  1318.         for (i=1;i<=rsmd.getColumnCount();i++) {
  1319.               strX = strX + "<td></td>";
  1320.         }
  1321.         strX=strX+"</tr>";
  1322.         iFind=1;
  1323.       }
  1324.       if (k>=(intpage-1)*intrownum && k<(intpage)*intrownum){
  1325.         strX = strX + "<tr>";
  1326.         for (i=1;i<=rsmd.getColumnCount();i++) {
  1327.               sLabel=rsmd.getColumnLabel(i);
  1328.               //System.out.println(rsmd.getColumnTypeName(i));
  1329.           String sT=rs.getString(i);
  1330.           if (sT==null) sT="";
  1331.               strX = strX + "<td>" + sT + "</td>";
  1332.         }
  1333.         if (showcheckbox.equals("TRUE"))
  1334.            strX = strX + "<td width='30'><input type='checkbox'></input></td>"+"</tr>";
  1335.                 else
  1336.                     strX = strX + "</tr>";
  1337.       }
  1338.       k=k+1;
  1339.     }
  1340.     if (k%intrownum>0)
  1341.         pagenumber=k/intrownum+1;
  1342.          else
  1343.              pagenumber=k/intrownum;
  1344.     strX=strX+"<pagenumber>"+pagenumber+"</pagenumber><intpage>"+intpage+"</intpage></root>";
  1345.   } catch (Exception e){
  1346.     strX=e.getMessage();
  1347.   }
  1348.   return strX;
  1349. }
  1350. private  String fcTrans(String sSource)
  1351. {
  1352.   // GB2312
  1353.   //XML节点中的汉字经8859_1==>UTF-8转换后用System.out.println输出正常
  1354.   /*
  1355.   UTF-8 ==> GB2312 1
  1356.   UTF-8 ==> 8859_1 2
  1357.   GB2312 ==> UTF-8 3
  1358.   8859_1 ==> UTF-8 4
  1359.   GB2312 ==> 8859_1 5
  1360.   8859_1 ==> GB2312 6
  1361.   */
  1362.   String unicodesR ="";
  1363.   try {
  1364.     //byte [] by = sSource.getBytes("8859_1"); //
  1365.     //unicodesR = new String(by,"UTF-8");
  1366.     //System.out.println("b:"+sSource);
  1367.     unicodesR=unescape(sSource);
  1368.   }
  1369.   catch (Exception e){
  1370.   }
  1371.   //System.out.println("a:"+unicodesR);
  1372.   return unicodesR;
  1373. // return sSource;
  1374.   ///
  1375. }
  1376.   /**
  1377.    * 将用javascript的escape()函数编码的字符串解码回来 throws Exception
  1378.    */
  1379.   public  String unescape( String src )
  1380.   {
  1381.     if ( src == null ) return src;
  1382.     if ( src.equals( "" ) ) return src;
  1383.     int pos = src.indexOf( "%u" );
  1384.     if ( pos < 0 ) return tmptrans( src );
  1385.     String tmp = src.substring( 0, pos );
  1386.     String result = tmptrans( tmp );
  1387.     String rest = "";
  1388.     if ( pos + 6 < src.length() )
  1389.     {
  1390.       tmp = src.substring( pos, pos + 6 );
  1391.       rest = src.substring( pos + 6 );
  1392.     }
  1393.     else
  1394.     {
  1395.       tmp = src.substring( pos );
  1396.       rest = "";
  1397.     }
  1398.     tmp = tmp.replace( '%', '\' );
  1399.     result += unicode2String( tmp );
  1400.     return result + unescape( rest );
  1401.   }
  1402.   public  String unicode2String( String theString )
  1403.   {
  1404.     char aChar;
  1405.     int len = theString.length();
  1406.     StringBuffer outBuffer = new StringBuffer( len );
  1407.     for( int x=0; x<len; )
  1408.     {
  1409.       aChar = theString.charAt( x++ );
  1410.       if ( aChar == '\' )
  1411.       {
  1412.         aChar = theString.charAt( x++ );
  1413.         if ( aChar == 'u' )
  1414.         {
  1415.           // Read the xxxx
  1416.           int value = 0;
  1417.           for ( int i = 0; i < 4; i++ )
  1418.           {
  1419.             aChar = theString.charAt( x++ );
  1420.             switch ( aChar )
  1421.             {
  1422.               case '0': case '1': case '2': case '3': case '4':
  1423.               case '5': case '6': case '7': case '8': case '9':
  1424.                 value = ( value << 4 ) + aChar - '0';
  1425.                 break;
  1426.               case 'a': case 'b': case 'c':
  1427.               case 'd': case 'e': case 'f':
  1428.                 value = ( value << 4 ) + 10 + aChar - 'a';
  1429.                 break;
  1430.               case 'A': case 'B': case 'C':
  1431.               case 'D': case 'E': case 'F':
  1432.                 value = ( value << 4 ) + 10 + aChar - 'A';
  1433.                 break;
  1434.               default:
  1435.                 throw new IllegalArgumentException( "Malformed \uxxxx encoding.");
  1436.             }
  1437.           }
  1438.           //System.out.println(value);
  1439.           outBuffer.append( (char)value );
  1440.         }
  1441.       }
  1442.       else
  1443.         outBuffer.append( aChar );
  1444.     }
  1445.     return outBuffer.toString();
  1446.   }
  1447.   /**
  1448.   *escape字符转换 %20 ==>空
  1449.   *@date 2003-12-01
  1450.   **/
  1451.   public  String tmptrans( String theString ){
  1452.     char aChar;
  1453.     int len=theString.length();
  1454.     String s1="";
  1455.     String s2="";
  1456.     String s3="";
  1457.     String sRet="";
  1458.     for( int i=0; i<len; ){
  1459.       s1=theString.substring(i,i+1);
  1460.       if(s1.equals("%")){
  1461.         s2=theString.substring(i,i+3);
  1462.         //if(s2.equals("%5C")) s3="";
  1463.         //if(s2.equals("%22")) s3='"';
  1464.         if(s2.equals("%27")) s3="'";
  1465.         if(s2.equals("%21")) s3="!";
  1466.         if(s2.equals("%23")) s3="#";
  1467.         if(s2.equals("%24")) s3="$";
  1468.         if(s2.equals("%25")) s3="%";
  1469.         if(s2.equals("%5E")) s3="^";
  1470.         if(s2.equals("%26")) s3="&";
  1471.         if(s2.equals("%28")) s3="(";
  1472.         if(s2.equals("%29")) s3=")";
  1473.         if(s2.equals("%3D")) s3="=";
  1474.         if(s2.equals("%7B")) s3="{";
  1475.         if(s2.equals("%7D")) s3="}";
  1476.         if(s2.equals("%5B")) s3="[";
  1477.         if(s2.equals("%5D")) s3="]";
  1478.         if(s2.equals("%20")) s3=" ";
  1479.         if(s2.equals("%2C")) s3=",";
  1480.         if(s2.equals("%3F")) s3="?";
  1481.         if(s2.equals("%7C")) s3="|";
  1482.         if(s2.equals("%60")) s3="`";
  1483.         if(s2.equals("%7E")) s3="~";
  1484.         if(s2.equals("%0A")) s3=" ";
  1485.         if(s2.equals("%0D")) s3=" ";
  1486.         if(s2.equals("%09")) s3=" ";
  1487.         sRet=sRet+s3;
  1488.         i=i+3;
  1489.       }else{
  1490.         sRet=sRet+s1 ;
  1491.         i=i+1;
  1492.       }
  1493.     }
  1494.     return sRet;
  1495.   }
  1496. }