-- 作者:wawehi
-- 发布时间:6/10/2005 4:42:00 PM
-- 使用自己编写的方法实现从SQL到Acess的数据表转换,使用公有驱动
使用自己编写的方法实现从SQL到Acess的数据表转换,使用公有驱动,由于这些天一直忙于写论文,没放上来,等急了不好意思,这就奉上! 文件 XMLtoDB.java,实现从XML文件到数据库的转换 //该文件功能为实现从某一数据库中查询指定的数据表,返回该表的值 //并将该表的具体值存储在XML文件中!! import java.sql.*; import java.io.*; import java.util.*; //执行数据库查询,返回所有值,并写回XML文件中 //used to do the operation with the database public class XMLtoDB{ static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";//设置驱动程序名称 static String SYSDNS = "jdbc:odbc:"; //设置DNS数据库名称 static private String theDataSource;//设置数据库连接的基本信息 static private String theUser; static private String thePassword; static final String PATH="c:\\";//设定XML文件输出路径 static String sql="create table ";//创建数据表SQL语句 static String insert="insert into "; static private Connection conn; static private Statement stat; static private ResultSet rs; static private ResultSetMetaData meta; public static void main(String[] args){ Vector result=new Vector(); Vector colNames=new Vector(); InputStreamReader ir=new InputStreamReader(System.in); BufferedReader in1=new BufferedReader(ir); String temp; try{ System.out.println("请输入系统ODBC的dns:\n"); temp=String.valueOf(in1.readLine().trim()); SYSDNS+=temp; System.out.println(SYSDNS); System.out.println("请输入要链接的表名:\n"); temp=String.valueOf(in1.readLine().trim()); sql+=temp; sql+="("; System.out.println(sql); insert+=temp; insert+="("; System.out.println(insert); System.out.println("操作开始..."); openConnection(); System.out.println("数据库已连接..."); BufferedReader in= new BufferedReader( new FileReader(PATH+"Data.xml")); String mem="", s; int rec=1; while ((s=in.readLine())!=null){ if (rec==3) mem=s; if(rec>2) result.addElement(s); rec++; } //创建数据表 //create the table Vector name=new Vector(); int begin=0, end=0, i=1, count=0; while (i<mem.length()){ if(mem.charAt(i)=='"' && count==0) count=1; else if(mem.charAt(i)=='"' && count==1) count=0; if (mem.charAt(i)==' ' && count==0 && (mem.charAt(i+1)>='a' && mem.charAt(i+1)<='z' ||mem.charAt(i+1)>='A' && mem.charAt(i+1)<='Z')){ begin=i+1; end=begin; while (mem.charAt(end)!='=') end++; } if(end>i) name.addElement(mem.substring(begin, end)); if(end >i) i=end; else i++; } // String sql="create table test1(";//创建数据表SQL语句 for(i=0; i<name.size(); i++) sql+=name.elementAt(i).toString()+" varchar(150) null, "; sql=sql.substring(0, sql.length()-2); sql+=")\n"; stat.executeUpdate(sql); //input the data; for(i=0; i<name.size(); i++) insert+=name.elementAt(i).toString()+","; insert=insert.substring(0, insert.length()-1); insert+=") values ("; for(i=0; i<result.size()-1; i++){//-1 String elem=result.elementAt(i).toString(); String value=new String(); count=0; for(int j=1; j<elem.length(); j++){ if(elem.charAt(j)=='"' && count==0){ begin=j+1; count=1; }else if(elem.charAt(j)=='"' && count==1){ end=j; count=0; if(end-begin<150) value+="'"+elem.substring(begin, end)+"',"; else value+="'"+elem.substring(begin, begin+149)+"',"; } } System.out.println(value); System.out.println(insert+value+")\n"); stat.executeUpdate(insert+value.substring(0, value.length()-1)+")\n"); } System.out.println("操作结束."); closeConnection(); //连接中止 System.out.println("连接中止."); }catch (Exception e){ e.printStackTrace(); System.out.println(e); } } //连接数据库类! //open the database connection public static void openConnection(){ try{ theDataSource=SYSDNS; theUser="sa"; thePassword=""; Class.forName (DRIVER); if (conn!=null) conn.close(); conn=DriverManager.getConnection(theDataSource,theUser,thePassword); stat=conn.createStatement(); rs=null; }catch (Exception e){ e.printStackTrace(); System.out.println(e); } } //关闭数据库类! //close the database connection public static void closeConnection(){ try{ if (conn!=null) conn.close( ); }catch (Exception e){ e.printStackTrace(); System.out.println(e); } } } import java.sql.*; import java.io.*; import java.util.*; 文件outXML.java实现从数据库中取回数据表,并返回到XML文件当中 //执行数据库查询,返回所有值,并写回XML文件中 //used to do the operation with the database import java.io.*; public class outXML{ static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver"; //设置驱动程序名称 static String SYSDNS = "jdbc:odbc:"; //设置DNS数据库名称 static String sql="select * from "; static private String theDataSource;//设置数据库连接的基本信息 static private String theUser; static private String thePassword; static final String PATH="c:\\"; //设定XML文件输出路径 static private Connection conn; static private Statement stat; static private ResultSet rs; static private ResultSetMetaData meta; public static void main(String[] args){ String result=new String(); Vector colNames=new Vector(); InputStreamReader ir=new InputStreamReader(System.in); BufferedReader in=new BufferedReader(ir); String temp; result="<?xml version=\"1.0\"?>\n<data>\n"; //设定XML的版本类型信息 try{ System.out.println("请输入系统ODBC的dns:\n"); temp=String.valueOf(in.readLine().trim()); SYSDNS+=temp; System.out.println(SYSDNS); System.out.println("请输入要链接的表名:\n"); temp=String.valueOf(in.readLine().trim()); sql+=temp; System.out.println(sql); System.out.println("操作开始..."); openConnection(); System.out.println("数据库已连接..."); if (rs!=null) rs.close(); rs=stat.executeQuery(sql);//从Titles表中查询所有的记录 meta=rs.getMetaData(); int size=meta.getColumnCount(); System.out.println("总共有 "); System.out.println(size); //输出总共的记录的条数 System.out.println(" 个字段"); for (int i=1; i<=meta.getColumnCount(); i++) //for循环执行真正数据的复制操作 colNames.addElement(meta.getColumnName(i)); while (rs.next()){ result+="<row "; for (int i=1;i<=size;i++){ Object obj=rs.getObject(i); result+=colNames.elementAt(i-1).toString(); if(obj!=null && obj.toString()!=""){ result+="=\""+obj.toString().trim()+"\" "; }else result+="=\"\" "; } result+="/>\n"; } result+="</data>"; //for循环结束,得到所需要的xml文件 for(int i=1; i<result.length(); i++) if(result.charAt(i)=='\''){ String bef=result.substring(0, i); bef+='_'; result=bef+result.substring(i+1); } File fileDocFile = new File(PATH + "Data.xml"); if (fileDocFile.exists()) { fileDocFile.delete(); } fileDocFile.createNewFile(); if (fileDocFile.canWrite()) { FileWriter fileOut = new FileWriter(fileDocFile); System.out.println("XML的文件结构为:"); System.out.println(result); fileOut.write(result); fileOut.close(); } System.out.println("文件输出完毕!"); closeConnection(); System.out.println("数据库连接终止!"); }catch (Exception e){ e.printStackTrace(); System.out.println(e); } } //连接数据库类! //open the database connection public static void openConnection(){ try{ theDataSource=SYSDNS; theUser="HOHO"; thePassword=""; Class.forName (DRIVER); if (conn!=null) conn.close(); conn=DriverManager.getConnection(theDataSource,theUser,thePassword); stat=conn.createStatement(); rs=null; }catch (Exception e){ e.printStackTrace(); System.out.println(e); } } //关闭数据库类! //close the database connection public static void closeConnection(){ try{ if (conn!=null) conn.close( ); }catch (Exception e){ e.printStackTrace(); System.out.println(e); } } } 文件outXML.java实现从数据库中取回数据表,并返回到XML文件当中,文件 XMLtoDB.java,实现从XML文件到数据库的转换 使用说明: 默认的XML输出目录是C盘根目录,自己可以改,不过要重新编译,使用之前要自己建ODBC数据源,并且要建立一个数据表,如果要实现2个数据库的交换就要建2个数据源,还有不懂的话就请回复,我尽我的能力来解释,这里面的代码已经用中文解释了,相信新手也是看的懂的,我自己就是个新手。哈哈~~~~~目前这个系统支持的数据库据我的理解,可以是SQL Server,Oracle,DB2,Access,还有一些我也不晓得了,反正这几个数据库之间是可以用这个系统来转换数据表的,这个系统虽然很简单,用到的方法也是高手所不屑的,可是这个坛子里没有人放出好代码来,没人搞一些辛苦的事,我就冲个泡泡算了,反正也还有人需要这方面的东西。 title_id title type pub_id price advance BU1032 The Busy Execut business 1389 19.9900 5000.0 BU1111 Cooking with business 1389 11.9500 5000.0 MC2222 Silicon Valley mod_cook 877 19.9900 5000.0 这里是我随便搞的一个表的结构,希望我这个东东对大家能有所帮助,感激不尽!!
|