pubfunction.java

来自「这个是转换为把数据库中数据转换为正常的xml」· Java 代码 · 共 354 行

JAVA
354
字号
package com;

import java.io.*;
import java.sql.*;

import org.dom4j.Document;

import com.sun.rowset.WebRowSetImpl;

public class PubFunction {
	private Connection conn = null;

	private Statement stmt = null;
	
	public byte[] PubCom(String sql){
		byte[] temp=null;
		try{
			ResultSet rs = getQueryResult();
			temp = RsToXML(rs);
			return temp;
		}catch(Exception ex)
		{
			return new byte[-1];
		}
	}
	
	public byte[] PubExec(String xml){
		byte[] temp=null;
		try{
			ResultSet rs = getQueryResult();
			temp = RsToXML(rs);
			return temp;
		}catch(Exception ex)
		{
			return new byte[-1];
		}
		finally{
			try{
				if (conn!=null){
 				 stmt.close(); // 关闭statement
				 conn.close(); // 关闭连接
				}
			}catch(Exception ex)
			{
				
			}
		}
	}
	/**	
	 * 通用的读取结果集某一列的值并转化为String表达
	 * @param ResultSet rs 输入的纪录集
	 * @param int colNum 第几列
	 * @param int type 数据类型
	 */
	private String getValue(final ResultSet rs, int colNum, int type)
			throws SQLException {
		switch (type) {
		case Types.ARRAY:
		case Types.BLOB:
		case Types.CLOB:
		case Types.DISTINCT:
		case Types.LONGVARBINARY:
		case Types.VARBINARY:
		case Types.BINARY:
		case Types.REF:
		case Types.STRUCT:
			return "undefined";
		default: {
			Object value = rs.getObject(colNum);
			if (rs.wasNull() || (value == null))
				return ("null");
			else
				return (value.toString());
		}
	}
	}
	
	private String GetType(int type)
	 {
	 	String temp="";
	 	switch(type){
	     case Types.FLOAT:
	     case Types.NUMERIC:
	     	temp = "float";
	     	break;
	     case Types.CHAR:
	     	temp = "bin.hex";
	     	break;
	     case Types.BIGINT:
	     	temp = "string";
	     	break;
	     default:
	     	temp = "string";
	 	}
	 	return temp;
	 }
	
	private byte[] RsToXML(ResultSet rs) throws IOException {
		StringBuffer buffer = new StringBuffer(1024 * 1024);
		try{		
			if (rs == null)
				return null;
			if (!rs.next())
				return null;
			String colName,colnull,writeunknown,type;
			String Temp="";
			int curType, colCount,isnull,maxLength;
			buffer.append("<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'\n"); //XML的头部信息
			buffer.append("\txmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'\n");
			buffer.append("\txmlns:rs='urn:schemas-microsoft-com:rowset'\n");
			buffer.append("\txmlns:z='#RowsetSchema'>\n");
			
			buffer.append("<s:Schema id='RowsetSchema'>\n");		
			buffer.append("\t<s:ElementType name='row' content='eltOnly' rs:updatable='true'>\n");		
			ResultSetMetaData rsmd = rs.getMetaData(); 		//得到结果集的定义结构
			colCount = rsmd.getColumnCount(); 			    //得到列的总数
			//tablename= "bbs_post";                        //rsmd.getTableName(1);
			for (int i = 1; i <= colCount; i++) {		
				curType = rsmd.getColumnType(i);	        //获取字段类型
				colName = rsmd.getColumnName(i);
				isnull  = rsmd.isNullable(i);
				type    = GetType(rsmd.getColumnType(i));
				maxLength = rsmd.getColumnDisplaySize(i);
				
				if (rsmd.isReadOnly(i))
				{
					writeunknown="false";
				}
				else
					writeunknown="true";
				if (isnull==1)
					colnull="true";
				else
					colnull="false";
				
				if (type.equals("float")){
					Temp= " rs:nullable='"+colnull+"'";
				}
				
				buffer.append("\t\t<s:AttributeType name='"+colName+
						"' rs:number='"+i+"'"+Temp+					
						" rs:writeunknown='"+writeunknown+"'>\n");
				buffer.append("\t\t\t<s:datatype");
				buffer.append(" dt:type='"+type+"'");
				if (type.equals("string")){
					buffer.append(" rs:dbtype='str'");
					buffer.append(" dt:maxLength='"+String.valueOf(maxLength)+"'");
					if (colnull.equals("false")){
						buffer.append(" rs:maybenull='"+colnull+"'");
					}
				}
				else if (type.equals("float")){
					buffer.append(" dt:maxLength='"+String.valueOf(maxLength)+"'");
					buffer.append(" rs:precision='"+String.valueOf(rsmd.getPrecision(i)+15)+"'");
					buffer.append(" rs:fixedlength='"+Boolean.toString(rsmd.isSigned(i))+"'");
				}	
				else if (type.equals("bin.hex")){
					buffer.append(" dt:maxLength='"+String.valueOf(maxLength)+"'");
				}	
				
				buffer.append("/>\n\t\t</s:AttributeType>\n");
			}
			buffer.append("\t\t<s:extends type='rs:rowbase'/>\n");
			buffer.append("\t</s:ElementType>\n");
			buffer.append("</s:Schema>\n");
			
			System.out.println("hiteker1:"+buffer.toString());
			
			buffer.append("<rs:data>\n");
			while(rs.next()) { 			
				// 对放回的全部数据逐一处理,格式为row id , col name, col context
				buffer.append("\t<z:row");
				for (int i = 1; i <= colCount; i++) {
					curType = rsmd.getColumnType(i);
					if (getValue(rs, i, curType)!=null&&!getValue(rs, i, curType).equals("null")){
						buffer.append(" "+rsmd.getColumnName(i)+ "='");
						buffer.append(getValue(rs, i, curType)+"'");
					}
				}
				buffer.append("/>\n");
			}
			buffer.append("</rs:data>\n");
			buffer.append("</xml>");
			rs.close();
			System.out.println("hiteker:"+buffer.toString());
	}catch(Exception ex)
	{
		return new byte[-1];
	}
		return buffer.toString().getBytes();
	}
	
	private ResultSet getQueryResult() throws Exception {
		try {
			//Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
			Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
		} catch (Exception ex) {
			System.out.println("hiteker");
		}
		//String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName="+DateBase;
		String url = "jdbc:oracle:thin:@192.168.6.40:1521:ORA9M8";
		// 载入jdbcodbc的驱动程序
		String user = "m8connect";
		String password = "m8connect";
		ResultSet rs=null;
		try {
			conn = DriverManager.getConnection(url, user, password); // 连接数据库
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			// 创建一个statement
			String sql = "select * from (select a.*, rownum rn from tgl_items a) where rn<=7120";
			//String sql = "select * from (select a.*, rownum rn from TAM_ASSETBOOK0003401 a) where rn<=100";// 定义查询的SQL语句
			rs = stmt.executeQuery(sql); // 执行查询
		} catch (Exception ex) {
			System.out.println("hiteker");
		} finally {
			try {
				// stmt.close(); // 关闭statement
				// conn.close(); // 关闭连接
			} catch (Exception ex) {
			}
		}
		return rs;
	}

	private Boolean ExecSql(String sql) throws Exception {
		try {
			//Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
			Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
		} catch (Exception ex) {
			System.out.println("hiteker");
		}
		//String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName="+DateBase;
		String url = "jdbc:oracle:thin:@192.168.6.40:1521:ORA9M8";
		// 载入jdbcodbc的驱动程序
		String user = "m8connect";
		String password = "m8connect";
		ResultSet rs=null;
		try {
			conn = DriverManager.getConnection(url, user, password); // 连接数据库
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			// 创建一个statement
			sql = "select * from (select a.*, rownum rn from tgl_items a) where rn<=7120";
			//String sql = "select * from (select a.*, rownum rn from TAM_ASSETBOOK0003401 a) where rn<=100";// 定义查询的SQL语句
			return stmt.execute(sql); // 执行查询
		} catch (Exception ex) {
			System.out.println("hiteker");
			return false;
		} finally {
			try {
				// stmt.close(); // 关闭statement
				// conn.close(); // 关闭连接
			} catch (Exception ex) {
			}
		}
		
	}

	private static byte[] toString(Document document) throws Exception {
		document.setXMLEncoding("GB2312");
		StringWriter sb = new StringWriter();
		BufferedWriter bw = new BufferedWriter(sb);
		document.write(bw);
		bw.close();
		sb.close();
		return sb.toString().getBytes();
	}

	private static void writeFile(byte[] data, String filename)
			throws IOException {
		File file = new File(filename);
		file.getParentFile().mkdirs();
		BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
				new FileOutputStream(file));
		bufferedOutputStream.write(data);
		bufferedOutputStream.close();
	}
	/**
	 * 把结果集转换成xml文件
	 * **/
	private void changeXML(final ResultSet rs) throws Exception {
		try {
			WebRowSetImpl wrs = new WebRowSetImpl();
			wrs.populate(rs);
			FileOutputStream out = new FileOutputStream("c:/catalog.xml");
			wrs.writeXml(out);
			wrs.close();		
		} catch(IOException e){
			System.out.println("Andrew: IOException!");//$NON-NLS-1$
			e.printStackTrace();
		}
	}
	private void main(){ 
		try{ 
		BufferedReader br=new BufferedReader(new FileReader("BufferedReaderTest.java")); 
		String line; 
		while((line = br.readLine())!= null){ 
		System.out.println(line); 
		} 
		} 
		catch(Exception e){ 
		System.out.println(e.getLocalizedMessage()); 
		e.printStackTrace(); 
		} 
		} 

	private  byte[] ReadFile() throws Exception {
        // 此文件为utf-8编码文件
        String filename = "c:\\";
        FileInputStream fin = new FileInputStream(filename);
        // ChangeCharset.class.getResourceAsStream("/a.txt")
        // 通知虚拟机以utf-8的编码格式读入
        //BufferedReader in = new BufferedReader(new InputStreamReader(fin,"UTF-8"));
        
        BufferedReader in = new BufferedReader(new InputStreamReader(fin,
        "ISO8859_1"));        
        
        // 输出文件
        // File file = new File("D:/eclipse/workspace/MY Test/bin/a.txt");
        // 写入文件的代码
        // BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new
        // FileOutputStream(file), "GBK"));
        // String str ;
        // while((str=in.readLine()) != null) {
        // System.out.println(str);
        // out.write(str,0,str.length());
        // out.newLine();
        // out.flush();
        // }
        // 写入byte数组的代码
        ByteArrayOutputStream byteAout = new ByteArrayOutputStream();
        // 可以制定任意编码输出
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
                byteAout, "GBK"));
        String str;
        while ((str = in.readLine()) != null) {
            // 自动转换为系统编码输出
            System.out.println(str);
            // 写入输出流
            out.write(str, 0, str.length());
            out.newLine();
            out.flush();
        }
        //将gbk的byte数组编码成String输出
        System.out.println(new String(byteAout.toByteArray(), "GBK"));
        out.close();
        in.close();
        fin.close();
        return byteAout.toByteArray();
    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?