日期:2014-05-16 浏览次数:20602 次
由于最近工作要对数据库反复的操作,数据扭转完毕之后要将数据还原,因此这是一个很痛苦的过程,自己使用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()