日期:2014-05-16 浏览次数:20497 次
由于最近工作要对数据库反复的操作,数据扭转完毕之后要将数据还原,因此这是一个很痛苦的过程,自己使用SQLPLUS工具,导出的数据没有SQL文件,(只导出查询的结果而不是整个数据表,导出表是有SQL文件的,因为数据很多的时候导出表很花费时间,实际工作中只关注自己需要的数据,因此没有必要导出整个表,我这里只是导出查询的结果)只有XML等其他四种文件格式,因此自己写了一个小程序,将导出的XML数据再次插入到数据库中,目的是将原来的数据删除掉,然后再插入,这样数据就还原了(貌似很麻烦,但数据量大了也没有办法)
?
对于上面的问题,个人能力有限,希望看官能给出你们的意见,下面是我代码实现XML导入数据库的过程
?
package hb.dom4j; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.junit.Test; /** * 该测试类是将SQLPLUS导出的XML文件插入到数据库中 * @author huangbiao * */ public class readXMLIntoDb { private static String path = "C:\\hb\\hb.xml"; private static String tableName="person"; private static String dbName="orcl"; private static String username="huangbiao";//连接数据库的用户名 private static String password="huangbiao";// private static String serverIP = "127.0.0.1";//数据库的IP地址 private static String serverPort = "1521"; private static int maxCoursor = 299; //模拟数据字典的方式,下面字段的格式为日期类型 public static class DATE{ public static String BIRTHDAY = "BIRTHDAY"; } public static class INTEGER{ public static String AGE = "AGE"; } //使用Map方式提高运行的效率 public static Map<String,String> MAP_DATE = null; public static Map<String,String> MAP_INTEGER = null; public void init(){ if(MAP_DATE == null){ MAP_DATE = new HashMap<String,String>(); MAP_DATE.put("BIRTHDAY", DATE.BIRTHDAY); } if(MAP_INTEGER == null){ MAP_INTEGER = new HashMap<String,String>(); MAP_INTEGER.put("AGE", INTEGER.AGE); } } public static void main(String[]args){ readXMLIntoDb x = new readXMLIntoDb(); x.init();//用来初始化数据 x.xmlDataIntoDB(); } /** * 测试能够正常读取文件 */ @Test public void readXML(){ // 以DOM4J默认的SAX解析器解析 SAXReader reader = new SAXReader(); // read函数的形参可以是url 也可以是 File类型,也可以是STRING类型的相对或绝对路径 Document document=null; try { document = reader.read(path); } catch (DocumentException e) { System.out.println("读取文件异常"); e.printStackTrace(); } if(document == null){ System.out.println("读取文件失败"); } } /** * 测试解析XML文件的内容,读取里面的内容 */ @Test public void readXMLContent(){ // 以DOM4J默认的SAX解析器解析 SAXReader reader = new SAXReader(); // read函数的形参可以是url 也可以是 File类型,也可以是STRING类型的相对或绝对路径 Document document=null; try { document = reader.read(path); } catch (DocumentException e) { System.out.println("读取文件异常"); e.printStackTrace(); } if(document == null){ System.out.println("读取文件失败"); } // 获得根节点 Element root = document.getRootElement(); // i为根节点孩子节点的迭代器 for (Iterator i = root.elementIterator(); i.hasNext();) { Element element = (Element) i.next(); // 根节点的名称 System.out.println(element.getName()); for(Iterator it = element.elementIterator(); it.hasNext();){ Element subElement = (Element)it.next(); System.out.println(subElement.getName()+":"+subElement.getText()); } } } /** * 连接数据库测试 */ @Test public void connDB(){ try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@"+serverIP+":"+serverPort+":"+dbName, username, password); System.out.println("连接成功!"); conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /** * 测试通过DOM4J解析文件拼装的插入SQL语句 */ @Test public void getSqlString(){ // 以DOM4J默认的SAX解析器解析 SAXReader reader = new SAXReader(); // read函数的形参可以是url 也可以是 File类型,也可以是STRING类型的相对或绝对路径 Document document=null; try { document = reader.read(path); } catch (DocumentException e) { System.out.println("读取文件异常"); e.printStackTrace()