代码改变世界

Xfire 实现.net 平台PDA数据交互

2009-02-27 20:34  $等待$  阅读(736)  评论(0编辑  收藏  举报

1、数据查询以xml文件格式的字符串进行数据交互,遍历结果集部分代码如下:
  /**   
    *  @param  ResultSet  rs输入的结果集   
     *  @return  String  返回XML串   
     *  @exception  SQLException   
    */   

Java代码
  1.     public String GetXML(ResultSet rs) throws SQLException, IOException {    
  2. final StringBuffer buffer = new StringBuffer(1024 * 4);    
  3. buffer.append("<?xml  version=\"1.0\"  encoding=\"UTF-8\"?>\n"); // XML的头部信息    
  4. buffer.append("<RowSet>\n");    
  5. buffer.append("\t" + GetTableXML(rs, "Table") + "\n");    
  6. buffer.append("</RowSet>");    
  7. rs.close();    
  8. return buffer.toString();    
  9. }  



  /**   
    *  @param  ResultSet  rs输入的结果集   
    *  @return  String  返回XML串   
    */
  

Java代码
  1. public String GetTableXML( ResultSet rs,String TableName) throws SQLException, IOException {   
  2.     String xml="";   
  3.        final StringBuffer buffer = new StringBuffer(1024 * 4);   
  4.          
  5.        if (rs!=null)   
  6.        {   
  7.          ResultSetMetaData rsmd = rs.getMetaData();  //得到结果集的定义结构     
  8.             int colCount = rsmd.getColumnCount(); // 得到列的总数   
  9.             for (int id = 0; rs.next(); id++) {   
  10.                 buffer.append("\t<" + TableName + ">\n");   
  11.                 for (int i = 1; i <= colCount; i++) {   
  12.                     int type =rsmd.getColumnType(i); // 获取字段类型   
  13.                     buffer.append("\t\t<" + rsmd.getColumnName(i) + ">");   
  14.                     buffer.append(getValue(rs, i, type));   
  15.                     buffer.append("</" + rsmd.getColumnName(i) + ">\n");   
  16.                 }   
  17.                 buffer.append("\t</" + TableName + ">\n");   
  18.                 xml=buffer.toString();   
  19.             }           
  20.             rs.close();   
  21.        }   
  22.        else if (rs == null || !rs.next())  {   
  23.         System.out.println("结果集为空");   
  24.        }   
  25.        return xml;   
  26.    }  

/**   
    *  This  method  gets  the  value  of  the  specified  column   
    *  通用的读取结果集某一列的值并转化为String表达   
    *  @param  ResultSet  rs  输入的纪录集   
    *  @param  int  colNum  第几列   
    *  @param  int  type  数据类型   
    */
//重点

Java代码
  1.  private String getValue( ResultSet rs, int colNum, int type) throws SQLException, IOException {   
  2.     String xml="";   
  3.     switch (type)    
  4.     {   
  5.         case Types.ARRAY:   
  6.         case Types.BLOB:   
  7.         case Types.CLOB:   
  8.         case Types.DISTINCT:   
  9.         case Types.LONGVARBINARY:   
  10.         case Types.VARBINARY:   
  11.         case Types.BINARY:   
  12.         case Types.REF:   
  13.         case Types.STRUCT:   
  14.            BufferedInputStream is = null;   
  15.             Blob blob=(Blob) rs.getObject(colNum);   
  16.             is = new BufferedInputStream(blob.getBinaryStream());   
  17.             byte[] bytes = new byte[(int) blob.length()];   
  18.             int offset = 0;   
  19.             int read = 0;   
  20.             int len = bytes.length;   
  21.             while (offset < len&& (read = is.read(bytes, offset, len - offset)) >= 0) {   
  22.                 offset += read;   
  23.             }   
  24.             BASE64Encoder enc=new BASE64Encoder();   
  25.             xml=enc.encode(bytes);   
  26.             is.close();   
  27.             is = null;   
  28.             break;   
  29.         default: {   
  30.             Object value = rs.getObject(colNum);   
  31.             if (rs.wasNull() || (value == null)) {   
  32.                 return ("");   
  33.             } else {   
  34.                 xml=value.toString();   
  35.             }   
  36.         }   
  37.     }   
  38.     return xml;   
  39. }  


2、web service 接口类

Java代码
  1. public class OperateImp implements Operate {   
  2.   
  3.     // 执行增删改操作   
  4.     public int ExecuteNonQuery(String executeNoQuery) {   
  5.         int i = 0;   
  6.         try {   
  7.             DataBase db = new DataBase();   
  8.             Connection con = db.setConnection();   
  9.             Statement stmt = con.createStatement();   
  10.             Statement stmtUpdate = con.createStatement();   
  11.             i = stmtUpdate.executeUpdate(executeNoQuery);   
  12.             db.cleanup();   
  13.         } catch (Exception e) {   
  14.             e.printStackTrace();   
  15.         }   
  16.         return i;   
  17.     }   
  18.   
  19.     // 查询某结果集首条记录的首字段   
  20.     public Object ExecuteScalar(String executeScalar) {   
  21.         Object scalar = "";   
  22.         try {   
  23.             DataBase db = new DataBase();   
  24.             Connection con = db.setConnection();   
  25.             Statement stmt = con.createStatement();   
  26.             ResultSet rs = stmt.executeQuery(executeScalar);   
  27.             while (rs.next()) {   
  28.                 scalar = rs.getString(1);   
  29.             }   
  30.             db.cleanup();   
  31.         } catch (Exception e) {   
  32.             e.printStackTrace();   
  33.         }   
  34.         return scalar;   
  35.     }   
  36.   
  37.     public String ExecuteDataset(String executeDataset) {   
  38.         String result = "";   
  39.         try {   
  40.             DataBase db = new DataBase();   
  41.             Connection con = db.setConnection();   
  42.             Statement stmt = con.createStatement();   
  43.             ResultSet rs = stmt.executeQuery(executeDataset);   
  44.             XMLWriter xml = new XMLWriter();   
  45.             result = xml.GetXML(rs);   
  46.             db.cleanup();   
  47.         } catch (Exception e) {   
  48.             e.printStackTrace();   
  49.         }   
  50.         return result;   
  51.     }   
  52.   
  53.     // 图片入库   
  54.     public boolean insertXQPIC(String insertXQPIC,byte [] bytes,String pictureId) {   
  55.         boolean boo=false;   
  56.            
  57.         OutputStream outStream=null;   
  58.         try  
  59.         {   
  60.             DataBase db = new DataBase();   
  61.             Connection con = db.setConnection();   
  62.             BlobToString bts=new BlobToString();   
  63.             con.setAutoCommit(false); // 事物由程序员操作   
  64.             Statement st = con.createStatement();   
  65.                
  66.             //插入一个空对象empty_blob()   
  67.             st.executeQuery(insertXQPIC);   
  68.             //通过pictureId查询刚刚传入的数据   
  69.             ResultSet rs = st.executeQuery("select pic from ZKR_XQPIC where picid='"+pictureId+"'  for update");   
  70.             if (rs.next()) {   
  71.                 BLOB blob = (BLOB) rs.getBlob("pic");   
  72.                 outStream = blob.getBinaryOutputStream();   
  73.                 //data是传入的byte数组,定义:byte[] data   
  74.                 outStream.write(bytes, 0, bytes.length);   
  75.                 boo=true;   
  76.             }   
  77.              outStream.flush();   
  78.              outStream.close();   
  79.              con.commit();   
  80.              con.close();   
  81.         }   
  82.         catch(Exception e)   
  83.         {   
  84.             e.printStackTrace();   
  85.         }   
  86.         return boo;   
  87.     }   
  88.   
  89.     private byte[] blobToBytes(Blob blob) {   
  90.         BufferedInputStream is = null;   
  91.         try {   
  92.             is = new BufferedInputStream(blob.getBinaryStream());   
  93.             byte[] bytes = new byte[(int) blob.length()];   
  94.             int len = bytes.length;   
  95.             int offset = 0;   
  96.             int read = 0;   
  97.             while (offset < len&& (read = is.read(bytes, offset, len - offset)) >= 0) {   
  98.                 offset += read;   
  99.             }   
  100.             return bytes;   
  101.         } catch (Exception e) {   
  102.             return null;   
  103.         } finally {   
  104.             try {   
  105.                 is.close();   
  106.                 is = null;   
  107.             } catch (IOException e) {   
  108.                 return null;   
  109.             }   
  110.         }   
  111.     }   
  112. }  



3、客户端调用

Java代码
  1. public class ClientMain {   
  2.     public static void main(String agp[]) {   
  3.         Service serviceModel = new ObjectServiceFactory().create(Operate.class);   
  4.   
  5.         // Create a proxy for the deployed service   
  6.         XFire xfire = XFireFactory.newInstance().getXFire();   
  7.         XFireProxyFactory factory = new XFireProxyFactory(xfire);   
  8.         String serviceUrl = "http://localhost:8080/PDA/services/OperateService";   
  9.         Operate client = null;   
  10.         try    
  11.         {   
  12.             client = (Operate) factory.create(serviceModel, serviceUrl);   
  13.         }    
  14.         catch (MalformedURLException e) {   
  15.         }   
  16.         int serviceResponse =0;   
  17.         String  rs=null;   
  18.         String scalar=null;   
  19.         try {   
  20. //          //增删改操作   
  21. //          String sql="insert into st_dayev_r values('2','2001-01-01 00:00:00','0','0','222')";   
  22. //          String sql="insert into ZKR_XQPIC values('00004',empty_blob(),'20081026','','')";   
  23. //          serviceResponse = client.ExecuteNonQuery(sql);   
  24. //          System.out.println(serviceResponse);   
  25.                
  26.             //查询操作   
  27. //          String sqlQuery="select * from ZKR_XQPIC where picid='00004' ";   
  28. //          rs=client.ExecuteDataset(sqlQuery);   
  29. //          System.out.println(rs);   
  30. //          //查询单个字段   
  31. //          String sqlscalar="select * from zkr_sfya where yaid='2009010402' ";   
  32. //          scalar=(String) client.ExecuteScalar(sqlscalar);   
  33. //          System.out.println(scalar);   
  34.                
  35.             //插入图片   
  36.             String insertXQPIC="insert into ZKR_XQPIC (picid,pic,refid) values('012',empty_blob(),'20081026')";   
  37.             byte []bytes=new byte[10];   
  38.             String pictureId="012";   
  39.             boolean boo=client.insertXQPIC(insertXQPIC, bytes,pictureId);   
  40.             System.out.println(boo);   
  41.   
  42.   
  43.         } catch (Exception e) {   
  44.             System.out.println("出错了");   
  45.             e.printStackTrace();   
  46.         }   
  47.     }   
  48. }