以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML 与 数据库 』  (http://bbs.xml.org.cn/list.asp?boardid=17)
----  [求助]关于使用jdbc将xml数据导入到数据库中的源代码,请版主帮忙!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=17&rootid=&id=22115)


--  作者:cakefly
--  发布时间:9/10/2005 10:49:00 PM

--  [求助]关于使用jdbc将xml数据导入到数据库中的源代码,请版主帮忙!
自从找到了此网站,我对xml的认识有了全方面的提高。现在课题进行到关键时候,由于没有经验,需要“使用jdbc实现xml数据与关系数据库之间的数据相互转换的源代码”。但是我们网站上的资料库里相关的资料 即不能浏览 也不能下载!!很急人啊,请版主和各位大大帮忙,先拜了!!

They brag most who can do least。^_^


--  作者:fishlight
--  发布时间:11/2/2005 11:06:00 AM

--  
没人回答啊,我也很关注
--  作者:binrihui
--  发布时间:3/16/2009 4:04:00 PM

--  
/**
* @(#)CreateXml.java
*
* @author binrihui
* @version 1.00 2009/1/19
*/

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.sql.ResultSet;
import java.util.List;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.saxpath.*;

public class CreateXml {

 private String username;
 private String password;
 private String tablename;
 private String filepath ="E:\\Employees2.xml";
 private DB db;
 private ResultSet result;
 private boolean isconnect=false;
 public boolean connect() {
  db = new DB(databasename,username,password);
  isconnect=db.Isconnect();
  if(isconnect){
  // String sql = "select empno,ename,job,mgr,to_char(hiredate,'mm-dd-yyyy') hiredate,sal,comm,deptno from "+tablename;
  String sql = "select * from "+tablename;
  result =db.openSql(sql);
  db.getColumn();
  }
 
  
  return  isconnect;
 }
 
 public void SqlQueryResult(){
  try{
        while(result.next()){
            System.out.println(result.getInt("EMPNO")+" "+result.getString("EName")+"  "+result.getString("Job")+
             "  "+result.getString("MGR")+"  "+result.getString("HireDate")+"  "+result.getString("SAl")+
             "  "+result.getString("COMM"));
             
            
            }
        }catch (Exception e){
            
            }
 }
 
 
 
 
 public  void create(){
  String sql = "select * from "+tablename;
  result =db.openSql(sql);
   System.out.println("result = stmt.executeQuery(sql);");
  int column = db.getColumn();
  System.out.println(column);
  String columnName[]=db.getColumnNmae();
  for(int j=0;j<column;j++){
   System.out.println(columnName[j]);
  }
  
  
        Element columnElement[] = new Element[column];  
  Document xmldocument = DocumentHelper.createDocument();
  OutputFormat format =OutputFormat.createPrettyPrint();
  format.setEncoding("GB2312");
  Element Employees = xmldocument.addElement("Employees");
  //Element bookelement =bookselement.addElement("book");

  try{
   //System.out.println(result.next());
  while(result.next()){
      Element Employee  = Employees.addElement("Employee");
   System.out.println("进到这");
   for(int i=0;i<column;i++){
      System.out.println("加一个");
   columnElement[i]=Employee.addElement(columnName[i]);
   columnElement[i].setText(result.getString(i+1));
   }
   }
  }catch(Exception e) {
   e.printStackTrace();
   
  }
  try{
   filepath = "E:\\Employees.xml";
   File f = new File("E:\\Employees.xml") ;
   XMLWriter write =new XMLWriter(new FileWriter(f),format) ;
   write.write(xmldocument);
   
   write.close();
   
  }catch(Exception e){
   e.printStackTrace();
   System.out.println("出错");
  }
 }
   
 
 //将Xml文档数据插入到oracle中的employees2表中。
 public void insertToDatabase(){
  int COLUMN =db.getColumn();
  String columnname[] =db.getColumnNmae();
  try{
    filepath = "E:\\Employees.xml";
   SAXReader saxreader = new SAXReader();
   Document xmldocument =saxreader.read(new File(filepath));
   //System.out.print(xmldocument);
   Element bootelement =xmldocument.getRootElement();
   List list[] =new List[COLUMN];
      Iterator interator[] =new Iterator[COLUMN];
       System.out.println(COLUMN);
   for(int i=0;i<COLUMN;i++){
    
   //String elementpath =tablename+"s/"+tablename+"/"+columnname[i];
      String elementpath ="Employees"+"/"+"Employee"+"/"+columnname[i];  
      //String elementpath ="Employees"+"/"+columnname[i];  
    //elementpath 有问题。
    //String elementpath ="Employees"+"/"+columnname[i];
    //System.out.println(elementpath);
    list[i] =xmldocument.selectNodes(elementpath);
   // System.out.println(list[i].isEmpty());
       interator[i] =list[i].iterator();
       //System.out.println(COLUMN);
   }
   System.out.println(interator[0].hasNext());
   while(interator[0].hasNext()){
     //System.out.println(COLUMN);
    Element temp[] =new Element[interator.length] ;
    for(int i=0;i<interator.length;i++){
    
      temp[i]=(Element)interator[i].next();
      //System.out.println(COLUMN);
    }
    // System.out.println(COLUMN);
    StringBuffer sqlstr =new StringBuffer("INSERT INTO "+"employees2"+" values(");
    sqlstr.append(temp[0].getText()) ;
       String ss="";
    for(int j=1;j<interator.length;j++){
    
    if(j==4){
            ss=temp[j].getText().trim();
              ss=ss.substring(0,10);
            sqlstr.append(","+"TO_DATE('"+ss+"',"+"'yyyy-mm-dd'"+")");
    }
     
    else
        sqlstr.append(",'"+temp[j].getText()+"'");
    }
    sqlstr.append(")");
    
    System.out.println(sqlstr);
    db.insert(sqlstr.toString());
  
   }
   
  }catch(Exception e){
   e.printStackTrace();
  }
  
  
 }
 public void saveXmlFile(String str){
  try{
         File f =new File(filepath);
         FileOutputStream fileoutputstream =new FileOutputStream(f);
         OutputStreamWriter streamwriter =new OutputStreamWriter(fileoutputstream);
         BufferedWriter bufferedwriter = new BufferedWriter(streamwriter);
         System.out.println(str);
         bufferedwriter.write(str);
         bufferedwriter.flush();
         bufferedwriter.close();
         streamwriter.close();
         fileoutputstream.close();
         
  
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 public void showToWindow(XmlEditWindow xmledit) {
  
  try{
   
   FileInputStream fileinputstream = new FileInputStream(new File(filepath));
   int len ;
      byte buf[]=new byte[1024];//write.createWriter(print,"GB2312");
      while((len =fileinputstream.read(buf,0,1024))!=-1){
       String str =new String(buf,0,len);
       xmledit.addText(str);
       
      }
   
  }catch(Exception e) {
   e.printStackTrace() ;
  }
 }
 public void setFilePath(String path){
  this.filepath = path;
 }
 public String getFilePath() {
  return filepath;
 }
 private String databasename;
 /**
  * @param databasename 要设置的 databasename。
  */
 public void setDatabasename(String databasename) {
  this.databasename = databasename;
 }
 /**
  * @param password 要设置的 password。
  */
 public void setPassword(String password) {
  this.password = password;
 }
 /**
  * @param tablename 要设置的 tablename。
  */
 public void setTablename(String tablename) {
  this.tablename = tablename;
 }
 /**
  * @param username 要设置的 username。
  */
 public void setUsername(String username) {
  this.username = username;
 }
 public DB getDB(){
  
  return db;
 }

   
}
class Tes {
public static void main(String args []){
CreateXml T= new CreateXml();
T.setDatabasename("orcl");
T.setUsername("system");
T.setPassword("oracle");
T.setTablename("EMPloyees");
T.connect();
//T.SqlQueryResult();
//为什么创建了xml文档后,就不能将xml文档导入Oracle中的employees2表。已解决
T.create();
T.insertToDatabase();
T.create();
}
 
}


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms