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

OA系统

开发平台:

Java

  1. /**
  2. 公司:北京方成科技发展有限公司
  3. 作者:梅勇
  4. 日期:2001.08.24
  5. */
  6. import java.io.*;
  7. import java.text.*;
  8. import java.util.*;
  9. import javax.servlet.*;
  10. import javax.servlet.http.*;
  11. import java.sql.*;
  12. //import explato.database.*;
  13. import sun.io.ByteToCharConverter; 
  14. import org.xml.sax.* ;
  15. import org.apache.xerces.dom.TextImpl;
  16. import org.w3c.dom.Attr;
  17. import org.w3c.dom.Document;
  18. import org.w3c.dom.NamedNodeMap;
  19. import org.w3c.dom.Node;
  20. import org.w3c.dom.NodeList;
  21. import dom.DOMParserWrapper;
  22. import dom.wrappers.DOMParser;
  23. import javax.naming.Context;
  24. import javax.naming.InitialContext;
  25. import javax.naming.NamingException;
  26. import javax.sql.DataSource;
  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.   /*
  41.    * This method is called when the servlet is first initialized.
  42.    * Note here that both the initial lookup into the WebLogic JNDI
  43.    * naming context and the location of a DataSource object from it
  44.    * are placed here.  This ensures that the operations are only done
  45.    * once instead of every time that the servlet is accessed.  This is
  46.    * very important for efficiency.
  47.    */
  48.   public void init() {
  49.     try  {
  50.       /* Create a connection to the WebLogic JNDI Naming Service:
  51.        */
  52.       ctx = new InitialContext();
  53.       /*  Create a new DataSource by Locating It in the Naming Service:
  54.           OracleThinPool is the name of the connection pool name configed in the WebLogic server container.
  55.           WebLogic data connection pool configration:
  56.           {
  57.            URL:                     jdbc:oracle:thin:@pyds:1521:toptais  //"toptais" is database name in our RDBMS. "pyds" is DB server name.
  58.             Driver Classname:        oracle.jdbc.driver.OracleDriver
  59.             Properties (key=value):  user=scott
  60.                                      password=tiger
  61.                                      dll=ocijdbc8
  62.                                      protocol=thin
  63.           }
  64.        */
  65.       ds = (javax.sql.DataSource) 
  66.         ctx.lookup ("OracleThinPool");
  67.     } catch (Exception E) {
  68.       /* 
  69.          Handle exception here. 
  70.       */
  71.       System.out.println("Init Error: " + E);
  72.     }
  73.   }
  74.     public void doPost(HttpServletRequest req,
  75.                       HttpServletResponse res)
  76.         throws IOException, ServletException
  77.     {
  78. //设置演示版,
  79.      /*
  80.      long Time1=1026000000+23328000;
  81.      long curTime=0;
  82.      curTime=System.currentTimeMillis();
  83.      curTime=curTime/1000;
  84.     
  85.      //每天的时间为 86400
  86. if(curTime>Time1){ 
  87.      System.out.println("演示版已到期,系统将不正常!"); 
  88.      return ;
  89. }
  90. //------------------
  91. */
  92.         res.setContentType("text/html;charset=UTF-8");
  93.         PrintWriter out = res.getWriter();
  94. try {
  95.        //ServletContext application = getServletContext();
  96. //ConnectionManager cm= (ConnectionManager)application.getAttribute("fcConPoolManager");
  97. //cm=(ConnectionManager)application.getAttribute ( "fcConPoolManager" );
  98. //demo是配置文件中逻辑数据库的名字,同时也是连接池的名字
  99. // String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
  100. // String sConnStr = "jdbc:odbc:ereport"; 
  101. // Class.forName(sDBDriver);
  102. // con = DriverManager.getConnection(sConnStr,"sa",""); 
  103. //con = cm.getConnection( "demo" );     //或者  con = cm.getConnection( "demo", 30000 );   //30000是不能马上取到连接时的等待时间(以毫秒计)
  104. con = ds.getConnection();
  105. //-----------------------
  106. /*
  107. Statement stmt = con.createStatement();
  108. //rs = stmt.executeQuery("SELECT * FROM test");
  109. con.setAutoCommit(false);
  110. stmt.executeUpdate("insert into test values('aaa','adfsdfsd')");
  111. int tran1=stmt.getUpdateCount();
  112. if (tran1>0){
  113. con.commit();
  114. }else{
  115. con.rollback();
  116. }
  117. // out.println("tran1="+tran1);
  118. /*String tt;
  119. while (rs.next()) {
  120. tt = rs.getString("fstr1");
  121. out.print("<LI>" + rs.getString("fstr2") + "</LI>");
  122. out.print("<pre>" + tt + "</pre>");
  123. }
  124. rs.close();*/
  125. //----------------------
  126. } catch (Exception e){
  127. //out.println("读表发生错误");
  128. System.out.println("Service Error: " + e);
  129. }
  130. //finally {
  131. //if( con != null ){
  132. // cm.freeConnection( "demo", con );
  133. //}
  134. //}
  135. //-------------------------------------------------------
  136. //strKey为?后的值
  137. String strKey=new String(req.getQueryString());
  138. //计算前台SEND来的XML串 存入strXml中
  139. BufferedReader in = req.getReader();
  140. String line = null;
  141. strXml="";
  142. while ((line = in.readLine()) != null) {
  143.       strXml=strXml+line;
  144.     }        
  145. //parse XML串
  146.     try {
  147.         DOMParserWrapper parser =
  148.         (DOMParserWrapper)Class.forName("dom.wrappers.DOMParser").newInstance();
  149.         document = parser.parseXml(strXml);
  150. }
  151. catch (Exception e) {
  152.     }
  153. //--------------------------------------------------------
  154. //用一个CASE语句来处理各种方法
  155. //if (strKey.equals("GetReportCell")) out.print(GetReportCell()); //跨表取数
  156. if (strKey.equals("fc_insert")) out.print(fc_insert());
  157. if (strKey.equals("fc_insertClob")) out.print(fc_insertClob());
  158. if (strKey.equals("fc_updateClob")) out.print(fc_updateClob());
  159. if (strKey.equals("fc_loadClob")) out.print(fc_loadClob());
  160. if (strKey.equals("fc_loadClob1")) out.print(fc_loadClob1());
  161. if (strKey.equals("fc_insert1")) out.print(fc_insert1()); //新增主子表
  162. if (strKey.equals("fc_update1")) out.print(fc_update1()); //新增主子表
  163. if (strKey.equals("fc_select")) out.print(fc_select());
  164. if (strKey.equals("fc_FieldToTable")) out.print(fc_FieldToTable());
  165. if (strKey.equals("GetDB")) out.print(GetDB());
  166. if (strKey.equals("fc_select1")) out.print(fc_select1()); //多个SQL同时查的查询
  167. if (strKey.equals("fc_select2")) out.print(fc_select2()); //明细和汇总都要的查询
  168. if (strKey.equals("twors")) out.print(twors());//两个结果集的测试
  169. if (strKey.equals("sqltoxml")) out.print(sqltoxml());//两个结果集的测试
  170. if (strKey.equals("dsnSetSession")) 
  171. {
  172. Node root = document.getChildNodes().item(0);
  173.         String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  174.         String strValue="";
  175.         try {
  176.          //当此节点值为空时
  177.          strValue=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  178. }
  179. catch (Exception e) {   }
  180. HttpSession session = req.getSession(true);
  181. session.setAttribute(strName, strValue);
  182. out.print("");
  183. }
  184. if (strKey.equals("dsnGetSession")) 
  185. {
  186. Node root = document.getChildNodes().item(0);
  187.         String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  188. HttpSession session = req.getSession(true);
  189. String strSR=session.getAttribute(strName).toString();;
  190. out.print(strSR);
  191. }
  192. if (strKey.equals("loadprint")) { 
  193. 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";
  194. out.println(strX);
  195. }
  196. try {
  197. con.close();
  198. }
  199. catch (Exception e) {   }
  200. }
  201. //下面是自定义的方法
  202. //--------------------------------------
  203. //两个结果集的示例,第一个用连接池打开,第二个用一般方式打开
  204. private String twors() {
  205. // Node root = document.getChildNodes().item(0);
  206.  //   String sField=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  207.   //  String sTable=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  208. String strSql="select flngVoucherID,fstrVoucherTypeName from Voucher" ;
  209. String sTmp="";
  210. try {
  211. Statement stmt = con.createStatement();
  212. rs = stmt.executeQuery(strSql);
  213. while (rs.next()) {
  214. String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
  215. String sConnStr = "jdbc:odbc:ereport"; 
  216. Class.forName(sDBDriver);
  217. Connection con1 = DriverManager.getConnection(sConnStr,"sa",""); 
  218. String sT=rs.getString(1);
  219. Statement stmt1 = con1.createStatement();
  220. rs1 = stmt1.executeQuery("select fstrAccountName from voucherdetail Where flngVoucherId="+sT);
  221. while (rs1.next()) {
  222. System.out.println("科目:"+rs1.getString(1));
  223. }
  224. }
  225. }
  226. catch (Exception e){
  227. sTmp=e.getMessage() ;
  228. }
  229. return sTmp;
  230. }
  231. //--------------------------------------
  232. private String fc_FieldToTable() {
  233. Node root = document.getChildNodes().item(0);
  234.     String sField=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  235.     String sTable=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  236. String strSql="select "+sField+" From "+sTable ;
  237. String sTmp="";
  238. try {
  239. Statement stmt = con.createStatement();
  240. rs = stmt.executeQuery(strSql);
  241. }
  242. catch (Exception e){
  243. sTmp=e.getMessage() ;
  244. }
  245. return sTmp;
  246. }
  247. //--------------------------------------
  248. private String GetDB() {
  249. Node root = document.getChildNodes().item(0);
  250.         String sConnect=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  251.         String sSql=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  252.         String sR="";
  253.         String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; //建立数据库连接
  254. String sConnStr = "jdbc:odbc:"+sConnect ; 
  255. try {
  256. Class.forName(sDBDriver);
  257. con = DriverManager.getConnection(sConnStr,"sa",""); 
  258. Statement stmt = con.createStatement();
  259. rs = stmt.executeQuery(sSql);//执行查询建立结果集
  260. if (rs.next()) {
  261. sR=rs.getString(1);
  262. }
  263. rs.close();
  264. stmt.close();
  265. }
  266. catch (Exception e){
  267. sR=e.getMessage();
  268. }
  269. return sR;
  270. }
  271. //--------------------------------------
  272. private String fc_select() {
  273. Node root = document.getChildNodes().item(0);
  274.     String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  275.     String strPageNo=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  276. int iPageNo=Integer.parseInt(strPageNo,10);//页号
  277.     String strPageSize=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  278. int iPageSize=Integer.parseInt(strPageSize,10);//页尺寸
  279. strSql=fcTrans(strSql);
  280. //System.out.println(strSql);
  281. String strX = "<root>";
  282. String sTmp = "";
  283. int iField=1;
  284. int iCount=1;
  285. int i=1;
  286. try {
  287. Statement stmt = con.createStatement();
  288. rs = stmt.executeQuery(strSql);
  289.         ResultSetMetaData rsmd=rs.getMetaData();
  290. while (rs.next()) {
  291. //每页30行
  292. if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  293.         strX = strX + "<record>";
  294. iCount=rsmd.getColumnCount();
  295.         for (iField = 1 ; iField<=iCount ;iField++ ) 
  296. {
  297. //当有NULL字段名时,表示此则无需给值.用fcnull标记名区分.
  298. String colName=rsmd.getColumnName(iField);
  299. if (colName==null) {
  300. strX = strX + "<fcnull></fcnull>" ;
  301. }
  302. else {
  303. String sT=rs.getString(iField);
  304. if (sT==null) sT="";
  305.             strX = strX + "<fc>" + sT +"</fc>" ;
  306.             }
  307. }
  308.         strX = strX + "</record>";
  309.         }
  310.         i = i + 1;
  311. }
  312. i=i-1;
  313. if (i>0) {
  314. strX = strX + "<pages>"+i+"</pages>";
  315. }
  316. strX = strX + "</root>";
  317. rs.close();
  318. }
  319. catch (Exception e){
  320. sTmp=e.getMessage() ;
  321. System.out.println(sTmp);
  322. e.printStackTrace();
  323. }
  324. return strX ;
  325. }
  326. //--------------------------------------
  327. private String fc_select1() {
  328. //将页号和页尺寸两个节点从第一个子节点和第二个子节点改为第一个子节点下的第一个子节点和第二个子节点
  329. //将第二个子节点空出来给设置数据源用.
  330. //第二个子节点下将有三个子节点:数据源名称,用户名,密码.
  331. Node root = document.getChildNodes().item(0);
  332.     String strPageNo=root.getChildNodes().item(0).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  333. int iPageNo=Integer.parseInt(strPageNo,10);//页号
  334.     String strPageSize=root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  335. int iPageSize=Integer.parseInt(strPageSize,10);//页尺寸
  336. //数据源
  337.     strDataSource=root.getChildNodes().item(1).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  338.     strUserName=root.getChildNodes().item(1).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  339.     try {
  340.      strPassword=root.getChildNodes().item(1).getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  341.     }
  342.     catch (Exception e){
  343.      strPassword="";
  344.     }
  345. //-------
  346. //多SQL查询
  347. String strX = "<root>";
  348. int ii=0;
  349. int i=1;
  350. //按顺序取出SQL节点
  351. for(ii=2;ii<root.getChildNodes().getLength();ii++){
  352.     String strSql=root.getChildNodes().item(ii).getChildNodes().item(0).getNodeValue();
  353. strX=strX+fc_selectTmp(iPageNo,iPageSize,i,strSql);
  354. i=iPosition;
  355. } //For循环结束
  356. i=i-1;
  357. if (i>0) {
  358. strX = strX + "<pages>"+i+"</pages>";
  359. }
  360. strX = strX + "</root>";
  361. return strX ;
  362. }
  363. //--------------------------------------
  364. //计算一个SQL查询,供fc_select1 fc_select2类函数使用
  365. private String fc_selectTmp(int iPageNo,int iPageSize,int iPos,String strSql) {
  366. //iPageNo为起始页号,iPageSize为页尺寸,iPos为所有查询结果的行位置,strSql为要执行的SQL语句
  367. //返回SQL语句的运行结果,结果为以<record>...</record>形式的XML串
  368. //
  369. strSql=fcTrans(strSql);
  370. String sTmp = "";
  371. String strX = "";
  372. int iField=1;
  373. int iCount=1;
  374. int i=iPos;
  375. try {
  376. /*
  377. String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
  378. String sConnStr = "jdbc:odbc:"+strDataSource; 
  379. Class.forName(sDBDriver);
  380. Connection conTmp = DriverManager.getConnection(sConnStr,strUserName,strPassword); 
  381. */
  382. Connection conTmp =ds.getConnection();
  383. Statement stmtTmp = conTmp.createStatement();
  384. ResultSet rsTmp = stmtTmp.executeQuery(strSql);
  385.         ResultSetMetaData rsmdTmp=rsTmp.getMetaData();
  386. while (rsTmp.next()) {
  387. //每页30行
  388. if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  389.         strX = strX + "<record>";
  390. iCount=rsmdTmp.getColumnCount();
  391.         for (iField = 1 ; iField<=iCount ;iField++ ) 
  392. {
  393. //当有NULL字段名时,表示此则无需给值.用fcnull标记名区分.
  394. String colName=rsmdTmp.getColumnName(iField);
  395. if (colName==null) {
  396. strX = strX + "<fcnull></fcnull>" ;
  397. }
  398. else {
  399. String sT=rsTmp.getString(iField);
  400. if (sT==null) sT="";
  401.             strX = strX + "<fc>" + sT +"</fc>" ;
  402.             }
  403. }
  404.         strX = strX + "</record>";
  405.         }
  406.         i = i + 1;
  407. }
  408. rsTmp.close();
  409. stmtTmp.close();
  410. conTmp.close();
  411. }
  412. catch (Exception e){
  413. sTmp=e.getMessage() ;
  414. System.out.println("0712:"+sTmp);
  415. System.out.println("0712:"+strSql);
  416. }
  417. iPosition=i; //用iPosition全局变量将i值传到调用函数中.
  418. //System.out.println("strX="+strSql);
  419. return strX;
  420. }
  421. //--------------------------------------
  422. //带分组小计的多SQL查询
  423. private String fc_select2() {
  424. //sXml的结构:
  425. //1页号 2页尺寸 3主SQL<1SQL语句 2<before... > > 4Group<1SQL语句 2GroupField >
  426. int i=1;
  427. String beforeSum="0"; //=0表示合计行在后,=1表示合计行在前。
  428. String strX = "";
  429. String strX1 = "";
  430. String strRetXml = ""; //返回的总的Xml串
  431. //将页号和页尺寸两个节点从第一个子节点和第二个子节点改为第一个子节点下的第一个子节点和第二个子节点
  432. //将第二个子节点空出来给设置数据源用.
  433. //第二个子节点下将有三个子节点:数据源名称,用户名,密码.
  434. Node root = document.getChildNodes().item(0);
  435.     String strPageNo=root.getChildNodes().item(0).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  436. int iPageNo=Integer.parseInt(strPageNo,10);//页号
  437.     String strPageSize=root.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  438. int iPageSize=Integer.parseInt(strPageSize,10);//页尺寸
  439. //数据源
  440.     strDataSource=root.getChildNodes().item(1).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  441.     strUserName=root.getChildNodes().item(1).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  442.     try {
  443.      strPassword=root.getChildNodes().item(1).getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  444.     }
  445.     catch (Exception e){
  446.      strPassword="";
  447.     }
  448. //-------
  449. //第3个子节点的第1个子节点的值用如下求法.
  450.     String strSql=root.getChildNodes().item(2).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  451. //strSql=fcTrans(strSql);
  452. //System.out.println(strSql);
  453. //第3个子节点的第2个子节点下的第1个子节点的值用如下求法.
  454.     String strStartXml=""; //首合计行的xml串
  455.     //总计行之类的
  456.     try {
  457.      //如有一个节点表示首合计行,如有二个节点表示第一为首合计行,第二为尾合计行
  458.     String sStartSql=root.getChildNodes().item(2).getChildNodes().item(1).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  459. //此处现只假定只有一个查询,如有多个,则此处要用循环
  460. strStartXml=fc_selectTmp(iPageNo,iPageSize,i,sStartSql);
  461. i=iPosition;
  462. }
  463. catch (Exception e){
  464. }
  465. //-----------------
  466. String sGroup1="";
  467. String sGroup2="";
  468. //String sGroup3="";
  469. //第一个分组
  470.     sGroup1=root.getChildNodes().item(3).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  471. sGroup1=fcTrans(sGroup1);
  472. //分组字段名
  473.     String sGroupField1=root.getChildNodes().item(3).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  474. //第二个分组
  475.     sGroup2=root.getChildNodes().item(4).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  476. sGroup2=fcTrans(sGroup2);
  477.     String sGroupField2=root.getChildNodes().item(4).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  478. String sTmp = "";
  479. int iField=1;
  480. int iCount=1;
  481. String sGroupKey1=""; //保存分组字段的值
  482. String sGroupKey2="";
  483. String tmpsGroup="";
  484. try {
  485. /*
  486. String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
  487. String sConnStr = "jdbc:odbc:"+strDataSource; 
  488. Class.forName(sDBDriver);
  489. Connection con1 = DriverManager.getConnection(sConnStr,strUserName,strPassword); 
  490. */
  491. Connection con1 = ds.getConnection();
  492. Statement stmt1 = con1.createStatement();
  493. //Connection con2 = DriverManager.getConnection(sConnStr,strUserName,strPassword); 
  494. Connection con2 = ds.getConnection();
  495. Statement stmt2 = con2.createStatement();
  496. rs1 = stmt1.executeQuery(sGroup1);
  497.         ResultSetMetaData rsmd1=rs1.getMetaData();
  498. while (rs1.next()) {
  499. //strX="";
  500. //strX1="";
  501. sGroupKey1=rs1.getString(1);
  502. //算出第一个分组的合计行值
  503. //if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  504.         strX = "<recordsum1>"; //设特别tagName用于在前台设底色等属性
  505. iCount=rsmd1.getColumnCount();
  506.         //第一个字段是分组字段值,所以从2开始
  507.         for (iField = 2 ; iField<=iCount ;iField++ ) 
  508. {
  509. //当有NULL字段名时,表示此则无需给值.用fcnull标记名区分.
  510. String colName=rsmd1.getColumnName(iField);
  511. if (colName==null) {
  512. strX = strX + "<fcnull></fcnull>" ;
  513. }
  514. else {
  515. String sT=rs1.getString(iField);
  516. if (sT==null) sT="";
  517. if(iField == 2)
  518. strX = strX + "<fc>小计 " + sT +"</fc>" ;
  519. else 
  520.              strX = strX + "<fc>" + sT +"</fc>" ;
  521.             }
  522. }
  523.         strX = strX + "</recordsum1>";
  524.         //}
  525.         
  526. if(sGroup2.equals("fcnull")){
  527. //只有一级分组
  528. //准备下一个的SQL语句
  529. tmpsGroup=fc_RepStr(strSql,"1999=1999","1999=1999"+" and " +sGroupField1+"='"+sGroupKey1+"'");
  530. //此处定合计行在明细行的前面还是后面
  531. if(beforeSum.equals("1")){
  532. //-------合计行在前
  533. if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  534. strRetXml+=strX;
  535. }
  536. i++;
  537. strRetXml+=fc_selectTmp(iPageNo,iPageSize,i,tmpsGroup);
  538. i=iPosition;
  539. }
  540. else {
  541. //-------合计行在后
  542. strRetXml+=fc_selectTmp(iPageNo,iPageSize,i,tmpsGroup);
  543. i=iPosition;
  544. if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  545. strRetXml+=strX;
  546. }
  547. i++;
  548. }
  549. }
  550. else { //有二级分组
  551. //准备下一个的SQL语句
  552. tmpsGroup=fc_RepStr(sGroup2,"1999=1999","1999=1999"+" and " +sGroupField1+"='"+sGroupKey1+"'");
  553. //System.out.println("my:"+tmpsGroup);
  554. rs2 = stmt2.executeQuery(tmpsGroup);
  555.         ResultSetMetaData rsmd2=rs2.getMetaData();
  556. if(beforeSum.equals("1")){
  557. //-------合计行在前
  558. if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  559. strRetXml+=strX;
  560. }
  561. i++;
  562. }
  563. while (rs2.next()) {
  564. sGroupKey2=rs2.getString(1);
  565. //算出第二个分组的合计行值
  566.         strX1 =  "<recordsum2>";
  567. iCount=rsmd2.getColumnCount();
  568.         //第一个字段是分组字段值,所以从2开始
  569.         for (iField = 2 ; iField<=iCount ;iField++ ) 
  570. {
  571. //当有NULL字段名时,表示此则无需给值.用fcnull标记名区分.
  572. String colName=rsmd2.getColumnName(iField);
  573. if (colName==null) {
  574. strX1 = strX1 + "<fcnull></fcnull>" ;
  575. }
  576. else {
  577. String sT=rs2.getString(iField);
  578. if (sT==null) sT="";
  579. if(iField == 2)
  580. strX1 = strX1 + "<fc>小 计 " + sT +"</fc>" ;
  581. else 
  582.             strX1 = strX1 + "<fc>" + sT +"</fc>" ;
  583.             }
  584. }
  585.         strX1 = strX1 + "</recordsum2>";
  586. //-------------------------------
  587. //准备下一个的SQL语句
  588. tmpsGroup=fc_RepStr(strSql,"1999=1999","1999=1999"+" and " +sGroupField1+"='"+sGroupKey1+"'"+" and " +sGroupField2+"='"+sGroupKey2+"'");
  589. //此处定合计行在明细行的前面还是后面
  590. if(beforeSum.equals("1")){
  591. //-------合计行在前
  592. if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  593. strRetXml+=strX1;
  594. }
  595. i++;
  596. strRetXml+=fc_selectTmp(iPageNo,iPageSize,i,tmpsGroup);
  597. i=iPosition;
  598. }
  599. else {
  600. //-------合计行在后
  601. strRetXml+=fc_selectTmp(iPageNo,iPageSize,i,tmpsGroup);
  602. i=iPosition;
  603. if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  604. strRetXml+=strX1;
  605. }
  606. i++;
  607. }
  608. }//二级分组的循环结束
  609. if(beforeSum.equals("0")){
  610. //-------合计行在后
  611. if (i>(iPageNo-1)*iPageSize && i<=iPageNo*iPageSize) {
  612. strRetXml+=strX;
  613. }
  614. i++;
  615. }
  616. } //判断有无二级分组的IF结束
  617. }//一级分组的循环结束
  618. //----- loop end
  619. //第3个子节点(mainsql)的第3个子节点下(end)的第1个子节点(sql)的值用如下求法.
  620.     String strEndXml=""; //首合计行的xml串
  621.     //总计行之类的
  622.     try {
  623.      //如有一个节点表示首合计行,如有二个节点表示第一为首合计行,第二为尾合计行
  624.     String sStartSql=root.getChildNodes().item(2).getChildNodes().item(2).getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  625. //System.out.println("endsql:"+sStartSql);
  626. //此处现只假定只有一个查询,如有多个,则此处要用循环
  627. strEndXml=fc_selectTmp(iPageNo,iPageSize,i,sStartSql);
  628. i=iPosition;
  629. }
  630. catch (Exception e){
  631. }
  632. //-----------------
  633. i=i-1;
  634. if (i>0) {
  635. strRetXml = strStartXml+strRetXml +strEndXml+ "<pages>"+i+"</pages>";
  636. }
  637. strRetXml = "<root>"+strRetXml + "</root>";
  638. rs1.close();
  639. stmt1.close();
  640. stmt2.close();
  641. con1.close();
  642. con2.close();
  643. }
  644. catch (Exception e){
  645. e.printStackTrace() ;
  646. sTmp=e.getMessage() ;
  647. System.out.println("071201"+sTmp);
  648. }
  649. return strRetXml ;
  650. }
  651. //--------------------------------------
  652. private String fc_insertClob() {
  653. Node root = document.getChildNodes().item(0);
  654.     String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  655.     String strTable=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  656.     String strTable1=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  657. String sTmp = "";
  658. //System.out.println("1:"+strTable) ;
  659. //java.sql.Blob myBlob     = null;
  660.     java.sql.Clob myClob     = null;
  661.     java.sql.Clob myClob1     = null;
  662.   // set Oracle's Auto Commit feature to false. 
  663.   // This is necessary when manipulating Blobs and Clobs.
  664. // CallableStatement cstmt=null;
  665. try {
  666.   con.setAutoCommit(false);
  667.   Statement stmt = con.createStatement();
  668.       stmt.execute("insert into fccell values ('"+strName+"',EMPTY_CLOB(),EMPTY_CLOB(),null)");
  669.       // ============== Manipulating the Clob column ======================
  670.       // get a reference to the clob column
  671.       stmt.execute("select * from fccell where fstrtablename='"+strName+"'");
  672.       ResultSet crs = stmt.getResultSet();
  673.       while ( crs.next() ) {
  674.           myClob = crs.getClob("fstrtable");
  675.           java.io.OutputStream osss =
  676.               ((weblogic.jdbc.common.OracleClob) myClob).getAsciiOutputStream();
  677.           byte[] bss = strTable.getBytes("ASCII");
  678.           osss.write(bss);
  679.           osss.flush();
  680.           myClob1 = crs.getClob("fstrtable1");
  681.           
  682.           java.io.OutputStream osss1 =
  683.               ((weblogic.jdbc.common.OracleClob) myClob1).getAsciiOutputStream();
  684.           byte[] bss1 = strTable1.getBytes("ASCII");
  685.           osss1.write(bss);
  686.           osss1.flush();
  687.       }
  688.       con.commit();
  689.       
  690.       // read back the clob
  691.       //System.out.println("nReading the clob back from the table and displaying:");
  692. }
  693. catch (Exception e){
  694. e.printStackTrace();
  695. sTmp=e.getMessage() ;
  696. }
  697. return sTmp ;
  698. }
  699. //--------------------------------------
  700. private String fc_updateClob() {
  701. Node root = document.getChildNodes().item(0);
  702.     String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  703.     String strTable=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  704.     String strTable1=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  705. String sTmp = "";
  706. //System.out.println("1:"+strSql) ;
  707. //java.sql.Blob myBlob     = null;
  708.     java.sql.Clob myClob     = null;
  709.     java.sql.Clob myClob1     = null;
  710.   // set Oracle's Auto Commit feature to false. 
  711.   // This is necessary when manipulating Blobs and Clobs.
  712. // CallableStatement cstmt=null;
  713. try {
  714. //con.setAutoCommit(false);
  715.   Statement stmt = con.createStatement();
  716.   //System.out.println("删除成功!"+strName);
  717.       stmt.executeUpdate("delete from fccell where fstrTableName='"+strName+"'");
  718. //con.commit();
  719.   //if (1==1){
  720.           //  stmt.close();
  721.           //  return "";
  722.            //}
  723.   
  724.   con.setAutoCommit(false);
  725.   stmt = con.createStatement();
  726.       //stmt.executeUpdate("delete from fccell where fstrTableName='"+strName+"'");
  727.   //System.out.println("删除成功!");
  728.           
  729.   stmt.execute("insert into fccell values ('"+strName+"',EMPTY_CLOB(),EMPTY_CLOB(),null)");
  730.   //stmt.execute("update fccell set fstrtablename='"+strName+"',fstrtable=EMPTY_CLOB(),fstrtable1=EMPTY_CLOB() where fstrtableName='"+strName+"'");
  731.       // ============== Manipulating the Clob column ======================
  732.       // get a reference to the clob column
  733.       stmt.execute("select * from fccell where fstrtablename='"+strName+"'");
  734.       ResultSet crs = stmt.getResultSet();
  735.       while ( crs.next() ) {
  736.           myClob = crs.getClob("fstrtable");
  737.           java.io.OutputStream osss =
  738.               ((weblogic.jdbc.common.OracleClob) myClob).getAsciiOutputStream();
  739.           byte[] bss = strTable.getBytes("ASCII");
  740.           osss.write(bss);
  741.           osss.flush();
  742.           myClob1 = crs.getClob("fstrtable1");
  743.           
  744.           java.io.OutputStream osss1 =
  745.               ((weblogic.jdbc.common.OracleClob) myClob1).getAsciiOutputStream();
  746.           byte[] bss1 = strTable1.getBytes("ASCII");
  747.           osss1.write(bss1);
  748.           osss1.flush();
  749.       }
  750.       con.commit();
  751.       
  752.       // read back the clob
  753.       //System.out.println("nReading the clob back from the table and displaying:");
  754. }
  755. catch (Exception e){
  756. e.printStackTrace();
  757. sTmp=e.getMessage() ;
  758. }
  759. return sTmp ;
  760. }
  761. //--------------------------------------
  762. private String fc_loadClob() {
  763. Node root = document.getChildNodes().item(0);
  764.     String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  765. String sTmp = "";
  766. //System.out.println("1:"+strSql) ;
  767. //java.sql.Blob myBlob     = null;
  768.     java.sql.Clob myClob     = null;
  769.     java.sql.Clob myClob1     = null;
  770.   // set Oracle's Auto Commit feature to false. 
  771.   // This is necessary when manipulating Blobs and Clobs.
  772. // CallableStatement cstmt=null;
  773. try {
  774.       Statement readclob = con.createStatement();
  775.       readclob.execute("select * from fccell where fstrtablename='"+strName+"'");
  776.       ResultSet rsreadclob = readclob.getResultSet();
  777.             
  778.       // read the clob in as and ASCII stream, write to a character array, and display
  779.       String sTest="";
  780.       while ( rsreadclob.next() ) { 
  781.           Clob myReadClob =rsreadclob.getClob("fstrtable");    
  782.           /*
  783.           //java.io.InputStream readClobis = myReadClob.getAsciiStream();
  784.           java.io.InputStream readClobis = myReadClob.getCharacterStream();
  785.           //sTest=(char)readClobis.read();
  786.           //char[] c = new char[260];
  787.           System.out.println("123:") ;
  788.           int iTmp=0;
  789.           while (iTmp!=-1) {
  790.                 iTmp=readClobis.read();
  791.             // sTest+= (char) iTmp;
  792.            sTest+=iTmp;
  793.           }
  794.           */
  795.           int iLen=1;
  796.           iLen=(int)myReadClob.length();
  797.           sTest=myReadClob.getSubString(1,iLen);
  798.               //System.out.println("output " +sTest );
  799.               sTmp=sTest;
  800.       }        
  801. }
  802. catch (Exception e){
  803. e.printStackTrace();
  804. sTmp=e.getMessage() ;
  805. }
  806. return sTmp ;
  807. }
  808. //--------------------------------------
  809. private String fc_loadClob1() {
  810. //为了取另外一个备注字段值fstrTable1
  811. Node root = document.getChildNodes().item(0);
  812.     String strName=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  813. String sTmp = "";
  814. //System.out.println("1:"+strSql) ;
  815. //java.sql.Blob myBlob     = null;
  816.     java.sql.Clob myClob     = null;
  817.     java.sql.Clob myClob1     = null;
  818.   // set Oracle's Auto Commit feature to false. 
  819.   // This is necessary when manipulating Blobs and Clobs.
  820. // CallableStatement cstmt=null;
  821. try {
  822.       Statement readclob = con.createStatement();
  823.       readclob.execute("select * from fccell where fstrtablename='"+strName+"'");
  824.       ResultSet rsreadclob = readclob.getResultSet();
  825.             
  826.       // read the clob in as and ASCII stream, write to a character array, and display
  827.       String sTest="";
  828.       String sTest1="";
  829.       while ( rsreadclob.next() ) { 
  830.           Clob myReadClob =rsreadclob.getClob("fstrtable1");    
  831.           /*
  832.           //java.io.InputStream readClobis = myReadClob.getAsciiStream();
  833.           java.io.InputStream readClobis = myReadClob.getCharacterStream();
  834.           //sTest=(char)readClobis.read();
  835.           //char[] c = new char[260];
  836.           System.out.println("123:") ;
  837.           int iTmp=0;
  838.           while (iTmp!=-1) {
  839.                 iTmp=readClobis.read();
  840.             // sTest+= (char) iTmp;
  841.            sTest+=iTmp;
  842.           }
  843.           */
  844.           int iLen=1;
  845.           iLen=(int)myReadClob.length();
  846.           sTest=myReadClob.getSubString(1,iLen);
  847.   sTmp=sTest;
  848.               //System.out.println("output " +sTest );
  849.           /*
  850.           Clob myReadClob1 =rsreadclob.getClob("fstrtable1");    
  851.           iLen=(int)myReadClob1.length();
  852.           sTest1=myReadClob1.getSubString(1,iLen);
  853.           sTmp="<no>"+sTest+"</no><no1>"+sTest1+"</no1>";
  854. */
  855.       }        
  856. }
  857. catch (Exception e){
  858. e.printStackTrace();
  859. sTmp=e.getMessage() ;
  860. }
  861. return sTmp ;
  862. }
  863. //--------------------------------------
  864. private String fc_insert() {
  865. Node root = document.getChildNodes().item(0);
  866.     String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  867. strSql=fcTrans(strSql);
  868. String sTmp = "";
  869. // CallableStatement cstmt=null;
  870. try {
  871. Statement stmt = con.createStatement();
  872. // stmt.executeQuery(strSql);
  873. stmt.executeUpdate(strSql);
  874. /*
  875. cstmt=con.prepareCall("{call sp_getID(?)}");
  876. cstmt.registerOutParameter(1,java.sql.Types.INTEGER,1);
  877. cstmt.executeUpdate();
  878. sTmp="<dsnID>"+ cstmt.getInt(1)+"</dsnID>";
  879. */
  880. }
  881. catch (Exception e){
  882. e.printStackTrace();
  883. sTmp=e.getMessage() ;
  884. }
  885. return sTmp ;
  886. }
  887. //--------------------------------------
  888. private String fc_insert1() {
  889. //凭证增加
  890. Node root = document.getChildNodes().item(0);
  891. String sTmp = "";
  892. CallableStatement cstmt=null;
  893. try {
  894. Statement stmt = con.createStatement();
  895. int i;
  896. //System.out.println(root.getChildNodes().getLength());
  897.     String strSql=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  898. strSql=fcTrans(strSql);
  899. stmt.executeUpdate(strSql);
  900. String sID="1"; //存主表新生成的ID
  901. try {
  902. //SQL Server 的存储过程,用于计算自动ID
  903. cstmt=con.prepareCall("{call sp_getID(?)}");
  904. cstmt.registerOutParameter(1,java.sql.Types.INTEGER,1);
  905. cstmt.executeUpdate();
  906. sID=""+cstmt.getInt(1);
  907. }
  908. catch (Exception e1){
  909. try {
  910. //计算MS Access数据库的主表ID
  911. String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
  912. String sConnStr = "jdbc:odbc:webprint"; 
  913. Class.forName(sDBDriver);
  914. Connection con1 = DriverManager.getConnection(sConnStr,"sa",""); 
  915. Statement stmt1 = con1.createStatement();
  916. rs1 = stmt1.executeQuery("select max(flngSendOutID) From SendOut");
  917. if (rs1.next()) {
  918. sID=rs1.getString(1);
  919. }
  920. }
  921. catch (Exception e2){
  922. }
  923. }
  924. //追加子表内容
  925. for(i=1;i<root.getChildNodes().getLength();i++) {
  926.     strSql=root.getChildNodes().item(i).getChildNodes().item(0).getNodeValue();
  927. strSql=fcTrans(strSql);
  928. strSql=strSql+sID+" )";
  929. stmt.executeUpdate(strSql);
  930. }
  931. }
  932. catch (Exception e){
  933. System.out.println(e.getMessage()) ;
  934. }
  935. return sTmp ;
  936. }
  937. //--------------------------------------
  938. private String fc_update1() {
  939. //凭证修改
  940. Node root = document.getChildNodes().item(0);
  941. String sTmp = "";
  942. String strSql="";
  943. try {
  944. Statement stmt = con.createStatement();
  945. int i;
  946. for(i=0;i<root.getChildNodes().getLength();i++) {
  947.     strSql=root.getChildNodes().item(i).getChildNodes().item(0).getNodeValue();
  948. strSql=fcTrans(strSql);
  949. stmt.executeUpdate(strSql);
  950. }
  951. }
  952. catch (Exception e){
  953. System.out.println(e.getMessage()) ;
  954. }
  955. return sTmp ;
  956. }
  957. //--------------------------------------
  958. private String SqlToField(String strSql) {
  959. //用一个SQL语句返回一个字段的第一个记录值
  960. String strR =  "";
  961. try {
  962. Statement stmt = con.createStatement();
  963. rs = stmt.executeQuery(strSql);
  964. if (rs.next()) {
  965.     strR = rs.getString(1) ;
  966. }
  967. rs.close();
  968. stmt.close();
  969. }
  970. catch (Exception e){
  971. //out.println("读表发生错误");
  972. }
  973. return strR;
  974. }
  975. //--------------------------------------
  976. //报表增加
  977. //--------------------------------------
  978. private String GetReportCell() {
  979. //找到指定位置的单元的值.
  980. Node root = document.getChildNodes().item(0);
  981. String sRow = root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  982. int iRow=Integer.parseInt(sRow,10);
  983. String sCol =root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  984. int iCol=Integer.parseInt(sCol,10);
  985. String strTableName =root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  986. strTableName=fcTrans(strTableName);
  987. //int iRow=Integer.parseInt(sRow,10);
  988. String strSql="";
  989. //String strID=TableNameToID(strTableName);
  990. //strSql = "Select fstrDiv1 From cellsheet where flngID=" + strID + " and flngSheetNo=" + strPage  ;
  991. strSql = "Select fstrTable1 From fcCell where fstrTableName='" + strTableName+"'"  ;
  992. //String sLogCol=ToLogCol(sRow,sCol,"Select fstroCoor From cellsheet where flngID=" + strID + " and flngSheetNo=" + strPage );
  993. //int iCol=Integer.parseInt(sLogCol,10);
  994. String strR="";
  995. String strR1="";
  996. int iStart=0;
  997. int iStartTmp=0;
  998. int iTmp=0;
  999. int iEnd=0;
  1000. try {
  1001. Statement stmt = con.createStatement();
  1002. rs = stmt.executeQuery(strSql);
  1003. if (rs.next()) {
  1004.     strR = rs.getString(1) ;
  1005. }
  1006. rs.close();
  1007. stmt.close();
  1008. //strR1=strR;
  1009. //查找定位TR TD
  1010. //iStart=strR.indexOf("%20id%3Dt%20",0);//查找 id=t 
  1011. for (int i=0;i<=iRow;i++) {
  1012. iStartTmp=strR.indexOf("%3CTR",iStart+1);//TR开始符
  1013. if (iStartTmp>0) {
  1014. iStart=iStartTmp;
  1015. }
  1016. }
  1017. if (iStartTmp>0) {
  1018. for (int i=0;i<=iCol;i++) {
  1019. iStartTmp=strR.indexOf("%3CTD",iStart+1); //TD开始符
  1020. if (iStartTmp>0) {
  1021. iStart=iStartTmp;
  1022. }
  1023. }
  1024. iStart=strR.indexOf("%3E",iStart);//TD后的第一个>
  1025. iEnd=strR.indexOf("%3C/TD%3E",iStart);//TD结束符
  1026. if (iEnd>iStart && iStart>0) {
  1027. strR=strR.substring(iStart+3,iEnd);
  1028. }
  1029. }
  1030. }
  1031. catch (Exception e){
  1032. System.out.println(e.getMessage());
  1033. }
  1034. //return Integer.toString(iEnd) ;
  1035. System.out.println(strR);
  1036. return "<root>"+strR+"</root>";
  1037. }
  1038. //--------------------------------------
  1039. //--------------------------------------
  1040. //通用函数
  1041. private  String fc_RepStr(String mainStr,String findStr,String replaceStr){
  1042. //多次替代
  1043. int iStart=0;
  1044. int iEnd=0;
  1045. String sRet="";
  1046. while (iStart<mainStr.length()) {
  1047. iEnd=mainStr.indexOf(findStr,iStart);
  1048. if (iEnd<0) {
  1049. iEnd=mainStr.length();
  1050. sRet=sRet+mainStr.substring(iStart,iEnd);
  1051. }
  1052. else {
  1053. sRet=sRet+mainStr.substring(iStart,iEnd)+replaceStr;
  1054. }
  1055. iStart=iEnd+findStr.length();
  1056. }
  1057. return sRet;
  1058. }
  1059. private String rTrim(String str){
  1060.      String rstr = str;
  1061.   if(str == null)
  1062.          {
  1063.     rstr = "";
  1064.   }
  1065.          else
  1066.          {
  1067.     if(str.length() == 0) rstr = "";
  1068.     if(str.length() > 0)
  1069.     {
  1070.       for(int i = str.length() ; i  >  0 ; i--)
  1071.              {
  1072.      if(str.substring(i-1,i).equals(" "))  
  1073.        rstr = rstr.substring(0,i-1);
  1074.      else break;
  1075.    }
  1076.      } 
  1077.        
  1078.   }
  1079.   return rstr;
  1080. //--------------------------------------------
  1081. private String  XmlOut(ResultSet oRs , String sRowEntityName,long EntFormat ) 
  1082. {
  1083. String sSet="";
  1084. try {
  1085. //oRs.first();
  1086. while (oRs.next())
  1087. {
  1088.     sSet = sSet + RecordToXMLEntity(oRs, sRowEntityName, EntFormat) ;
  1089. }
  1090. }
  1091. catch (Exception e)
  1092. {
  1093. return e.getMessage();
  1094. }
  1095. return sSet ;
  1096. }
  1097. private String  RecordToXMLEntity(ResultSet oRs , String EntityName,long EntFormat)
  1098. {
  1099. String sEty ="";
  1100. int iField=1;
  1101. int iCount=1;
  1102.     try {
  1103.     ResultSetMetaData rsmd=oRs.getMetaData();
  1104. iCount=rsmd.getColumnCount();
  1105. if (EntFormat==1) 
  1106. {
  1107. //属性
  1108.         sEty = "<" + EntityName ;
  1109.         for (iField = 1 ; iField<=iCount ;iField++ ) 
  1110. {
  1111.             sEty = sEty + " " + rsmd.getColumnName(iField) +"='" + oRs.getString(iField) +"'" ;
  1112. }
  1113.         sEty = sEty + "/>" + "n";
  1114. }
  1115. else
  1116. {
  1117. //节点
  1118.     sEty = "<" + EntityName +">" +"n" ;
  1119.         for (iField = 1 ; iField<=iCount ; iField++) 
  1120.         {
  1121.             sEty = sEty +"<" +  rsmd.getColumnName(iField) +">" + oRs.getString(iField) +"</" + rsmd.getColumnName(iField) +">";
  1122.         }
  1123.         sEty = sEty +"n" +"</" + EntityName +">" +"n";
  1124. }
  1125. }
  1126. catch (Exception e)
  1127. {
  1128. }
  1129. return sEty;
  1130. }
  1131. //-----------------------------------------------------
  1132. private Attr[] sortAttributes(NamedNodeMap attrs) {
  1133.     int len = (attrs != null) ? attrs.getLength() : 0;
  1134.     Attr array[] = new Attr[len];
  1135.     for ( int i = 0; i < len; i++ ) {
  1136.         array[i] = (Attr)attrs.item(i);
  1137.     }
  1138.     for ( int i = 0; i < len - 1; i++ ) {
  1139.         String name  = array[i].getNodeName();
  1140.         int    index = i;
  1141.         for ( int j = i + 1; j < len; j++ ) {
  1142.             String curName = array[j].getNodeName();
  1143.             if ( curName.compareTo(name) < 0 ) {
  1144.                 name  = curName;
  1145.                 index = j;
  1146.             }
  1147.         }
  1148.         if ( index != i ) {
  1149.             Attr temp    = array[i];
  1150.             array[i]     = array[index];
  1151.             array[index] = temp;
  1152.         }
  1153.     }
  1154.     return(array);
  1155. } // sortAttributes(NamedNodeMap):Attr[]
  1156. private  String fcTrans(String sSource) 
  1157. {
  1158. //
  1159. //XML节点中的汉字经8859_1==>UTF-8转换后用System.out.println输出正常
  1160. String unicodesR ="";
  1161. try {
  1162. byte [] by = sSource.getBytes("8859_1"); //GB2312
  1163. unicodesR = new String(by,"UTF-8");
  1164. }
  1165. catch (Exception e)
  1166. {
  1167. }
  1168. //System.out.println(unicodesR);
  1169. return unicodesR;
  1170. ///
  1171. }
  1172. //--------------------------------------------
  1173. //WebCode中用
  1174. private  String sqltoxml() 
  1175. {
  1176. Node root=document.getChildNodes().item(0);
  1177. String strpage=root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
  1178. String strsql=root.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
  1179. strsql=fcTrans(strsql);
  1180. String strsearch=root.getChildNodes().item(2).getChildNodes().item(0).getNodeValue();
  1181. String strrownum=root.getChildNodes().item(3).getChildNodes().item(0).getNodeValue();
  1182. String showcheckbox=root.getChildNodes().item(4).getChildNodes().item(0).getNodeValue();
  1183. String blnempty=root.getChildNodes().item(5).getChildNodes().item(0).getNodeValue();
  1184. //加空行
  1185. showcheckbox=showcheckbox.toUpperCase();
  1186. int intpage=Integer.parseInt(strpage);//开始页
  1187. int intrownum=Integer.parseInt(strrownum);//页尺寸
  1188. String strX="";
  1189. try {
  1190. //建立数据库连接
  1191. /*
  1192. strDataSource="webgrid";
  1193. strUserName="sa";
  1194. strPassword="";
  1195. String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
  1196. String sConnStr = "jdbc:odbc:"+strDataSource; 
  1197. Class.forName(sDBDriver);
  1198. Connection con1 = DriverManager.getConnection(sConnStr,strUserName,strPassword); 
  1199. */
  1200. Connection con1 = ds.getConnection();
  1201. Statement stmt = con1.createStatement();
  1202. //原来的
  1203. //Statement stmt = con.createStatement();
  1204. //执行查询建立结果集
  1205. //-----------------
  1206. //System.out.print(strsearch);
  1207. int i=1;
  1208. if (strsearch.compareTo("###")!=0){
  1209. rs = stmt.executeQuery(strsql);
  1210. boolean bfind=false;
  1211. while(rs.next()){
  1212. String searchone=rs.getString(1);
  1213. //out.print(searchone);
  1214. if (searchone.equals(strsearch)){
  1215. bfind=true;
  1216. break;
  1217. }
  1218. i=i+1;
  1219. }
  1220. rs.close();
  1221. if (bfind==true){
  1222. if (i<=intrownum){
  1223. intpage=1;
  1224. }
  1225. else {
  1226. if (i%intrownum>0){
  1227. intpage=i/intrownum+1;
  1228. }
  1229. else {
  1230. intpage=i/intrownum;
  1231. }
  1232. }
  1233. }
  1234. //自动定位到当前选择所在值的页
  1235. }
  1236. //out.print("intpage="+intpage);
  1237. //-----------------
  1238. // System.out.print(intpage);
  1239. rs = stmt.executeQuery(strsql);
  1240. ResultSetMetaData rsmd=rs.getMetaData();
  1241. strX="<root>";
  1242. String sLabel="";
  1243. int k=0;
  1244. int thisrow=0;
  1245. int pagenumber=0;//总页数
  1246. int iFind=0; //控制在开始处插入一个空白行
  1247. while (rs.next()) {
  1248. if (blnempty.equals("true") && iFind==0) {
  1249. //插入一个空白行
  1250. strX=strX+"<tr height='16'>";
  1251. for (i=1;i<=rsmd.getColumnCount();i++) {
  1252.         strX = strX + "<td></td>";
  1253. }
  1254. strX=strX+"</tr>";
  1255. iFind=1;
  1256. }
  1257. if (k>=(intpage-1)*intrownum && k<(intpage)*intrownum){
  1258. strX = strX + "<tr>";
  1259. for (i=1;i<=rsmd.getColumnCount();i++) {
  1260.         sLabel=rsmd.getColumnLabel(i);
  1261.         //System.out.println(rsmd.getColumnTypeName(i));
  1262. String sT=rs.getString(i);
  1263. if (sT==null) sT="";
  1264.         strX = strX + "<td>" + sT + "</td>";
  1265. }
  1266. if (showcheckbox.equals("TRUE"))
  1267.   strX = strX + "<td width='30'><input type='checkbox'></input></td>"+"</tr>";
  1268.                 else 
  1269.                     strX = strX + "</tr>";
  1270. }
  1271. k=k+1;
  1272. }
  1273. if (k%intrownum>0)
  1274.      pagenumber=k/intrownum+1;
  1275.         else 
  1276.             pagenumber=k/intrownum;
  1277. strX=strX+"<pagenumber>"+pagenumber+"</pagenumber><intpage>"+intpage+"</intpage></root>";
  1278. rs.close();
  1279. stmt.close();
  1280. con1.close();
  1281. } catch (Exception e){
  1282. strX=e.getMessage();
  1283. }
  1284. return strX;
  1285. }
  1286.   /* 
  1287.    * Local Variables 
  1288.    */
  1289.   Context ctx;  
  1290.   DataSource ds;
  1291.  
  1292. }