一、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、集合中是存放相同的内容,对象
集合中可以存放集合