JDBC-XML文件读取、XML存取类属性与数据库表的列名的关系-01-07-2015

一、XML文件读取

Dom4j方式:

1、定义XML文档建立与解析的接口:

package example_XML;

import java.util.ArrayList;

/**
 * 
 * @author YHJ
 * 定义XML文档建立与解析的接口
 * 
 */

public interface XMLDocument {
	/**
	 * 建立XML文档
	 * @param fileName (@param:参数) 文件全路径名称:包括文件名及其拓展名
	 */
	public void createXml(String fileName);
	
	/**
	 * 解析XML文档	{parser:分析程序、语法剖析程式}
	 * @param fileName
	 * @return 
	 */
	public ArrayList<String> parserXml(String fileName);
}

2、Dom4j 生成XML文档与解析XML文档

package example_XML;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

	/**
	 * 
	 * @author YHJ
	 * Dom4j 生成XML文档与解析XML文档  
	 */

public class Dom4j {//implements XMLDocument
//	public static void main(String[] args) {
//		Dom4j d= new Dom4j();
//		d.createXml("E:/heh.xml");
//		System.out.println(d.parserXml("E:/heh.xml"));
//		
//	}

	
	
//	@Override
	public static void createXml(String fileName) {
		//创建XML文件树形结构
		Document document = DocumentHelper.createDocument();//dom4j:jar包中的类或者方法
		Element company = document.addElement("company");//添加元素:第一个元素,因为是从Document中添加的,看看下面添加就是从company中添加
		Element department = company.addElement("department");
		Element id = department.addElement("id");
		Element sName = department.addElement("sName");
		Element Num = department.addElement("Num");
		
//		//可以设置XMl文件的属性或者其值
//		id.setText("dd");
//		sName.setText("nn");
//		Num.setText("ddd");		
		
		//尝试向磁盘中写XML文件
		try {
			//文件输入输出流:java.io。管道与流水的概念
			Writer fileWriter = new FileWriter(fileName);//管道?//这里的fileName是文件完全限定名,由函数形参给出,只需填写函数形参即可
			XMLWriter xmlWriter = new XMLWriter(fileWriter);//管道?
			xmlWriter.write(document);//流水?
			xmlWriter.close();//关闭
			
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		
	}

//	@Override
	public static ArrayList<String> parserXml(String fileName) {
		
		ArrayList<String> list = new ArrayList<String>();
		
		File inputXml = new File(fileName);//java.io包下
		SAXReader saxReader = new SAXReader();
		
		try {
			Document document = saxReader.read(inputXml);
			Element company = document.getRootElement();//获取根节点元素
			
			//迭代器遍历:要分清楚第一次跟第二次遍历的区别
			//关于第一层第二次元素问题(与本例题结合):第二层yu
			for(Iterator i = company.elementIterator(); i.hasNext();){
				Element department = (Element) i.next();//强制类型转换
				System.out.println(department.getName());
				list.add(department.getName());
				for(Iterator j = department.elementIterator();j.hasNext();){
					Element node = (Element) j.next();
					System.out.println(node.getName());
//					System.out.println(node.getName() + "." + node.getText());
					
					list.add(node.getName());
				}
			}
			
		} catch (DocumentException e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
//		System.out.println("dom4j parserXml");
		return list;
	}
}
3、测试:读取XML元素的信息去操作数据库

package example_XML;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.sun.org.apache.xalan.internal.xsltc.DOM;

public class Test {

	public static void main(String[] args) throws SQLException {
//		Connection conn = JDBCUtils.getConnection();
//		Dom4j.createXml("E:/heh.xml");
//		conn.prepareStatement("insert into Department(sName) values ('x')").executeUpdate();
		for(int i = 0; i < 20; i++){
		add();
		}
	}
	
	public static ArrayList<String> list = Dom4j.parserXml("E:/heh.xml");
	
	public static void add() throws SQLException{
		StringBuilder sb = new StringBuilder("insert into ");
		StringBuilder val = new StringBuilder(") values (");
		
//		ArrayList<String> list = Dom4j.parserXml("E:/heh.xml");//为什么不能放在上面,静态的全工程通用
		sb.append(list.get(0));
		sb.append(" (");
		
		for(int i= 1; i < list.size(); i++){
			if(!"id".equals(list.get(i).toString())){
//				System.out.println("测试");
				sb.append(list.get(i).toString());
				if(i != (list.size() - 1)){
					sb.append(", ");
				}
			}
		}		
		
		val.append("'xxx'" + ", " + 15 + ")");		
		sb.append(val);
		
		JDBCUtils.getConnection();//准备好sql语句然后获得数据库连接
		Connection conn = null;//
		PreparedStatement st = null;//Statement的子类——预编译
		ResultSet rs = null;
		String sql = sb.toString();//一般预编译这里有个问题,不是这个拼接sql语句的,而是那种使用占位符?来写的
		
		try{
			conn = JDBCUtils.getConnection();
			st = conn.prepareStatement(sql);
			
			st.executeUpdate();
		} catch (Exception ex) {
			ex.printStackTrace();
		}finally{
			JDBCUtils.close(conn, st, rs);
		}	
		
//		System.out.println(sb);
		
	}

}
4、JDBC:
package example_XML;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {
	
	static String url = "jdbc:mysql://localhost:3306/company";
	static String user = "root";
	static String password = "root";
	
	//注册驱动
	static{
		try {
			Class.forName("com.mysql.jdbc.Driver");//反射为什么能注册驱动?
		} catch (ClassNotFoundException e) {			
			e.printStackTrace();
		}
	}
	
	//获取连接
	public static Connection getConnection() throws SQLException{
		
		return DriverManager.getConnection(url, user, password);		
	}
	
	//使用完要关闭连接
	public static void close(Connection conn,Statement st,ResultSet rs) throws SQLException{
		try {
			if(rs!=null)
				rs.close();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{			
				try {
					if(st!=null)
						st.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}finally{
					conn.close();
				}
		}	
	}
}

二、其他拓展:

1、java注释与注解的关系:http://blog.csdn.net/yhj19920417/article/details/424951132

2、xml文件的基本结构:

3、集合中是存放相同的内容,对象

集合中可以存放集合




你可能感兴趣的:(JDBC-XML文件读取、XML存取类属性与数据库表的列名的关系-01-07-2015)