关键词:
先前一直都是用的直接用加载驱动 然后创建连接进行操作数据 如果我的数据库换了 那么要修改的地方也比较多 不利于维护 所以就想到了将所有配置连接信息都用xml封装起来 以至于我每次都只要修改一下我的xml配置文件 不需要修改我的代码 这也就有了下面的操作 将驱动 url 用户名和密码都写到xml文件里面
1 <?xml version="1.0" encoding="UTF-8"?>
2 <database>
3 <driver>com.mysql.jdbc.Driver</driver>
4 <url>jdbc:mysql://localhost:3306/employee</url>
5 <user>root</user>
6 <password>root</password>
7 </database>
有了xml 文件之后就需要来进行解析
1 // 使用dom4j解析xml
2 private static void parseXmlInfo()
3 // 创建saxreader对象
4 SAXReader saxReader = new SAXReader();
5 try
6 // 加载xml文件
7 Document doc = saxReader.read(DBUtil.class.getResourceAsStream("/jdbc.xml"));
8 // 获得根元素
9 Element root = doc.getRootElement();
10 // 获得对应的元素的文本值
11 driver = root.elementText("driver");
12 url = root.elementText("url");
13 user = root.elementText("user");
14 password = root.elementText("password");
15
16 catch (DocumentException e)
17 // TODO Auto-generated catch block
18 e.printStackTrace();
19
20
解析完了之后就可以获取连接操作数据库
将增删改封装到一个方法里面 以后每次只需要写sql语句就可以
1 /**
2 * 修改数据的方法
3 *
4 * @param sql
5 * @param values sql中所有?的值
6 *
7 * @return 0表示修改失败,其他表示修改成功
8 */
9 public static int update(String sql, Object[] values)
10 PreparedStatement ps = null;
11 ResultSet rs = null;
12 // 获取连接
13 getConnection();
14 try
15 // 创建prepareStatement
16 ps = conn.prepareStatement(sql);
17 System.out.println(ps);
18 for (int i = 0; i < values.length; i++)
19 ps.setObject(i + 1, values[i]);
20
21 System.out.println(ps);
22 // 执行修改语句返回受影响的行数
23 int num = ps.executeUpdate();
24 System.out.println(num);
25 catch (SQLException e)
26 e.printStackTrace();
27 finally
28 // 关闭资源
29 if (ps != null)
30 try
31 ps.close();
32 catch (SQLException e)
33 // TODO Auto-generated catch block
34 e.printStackTrace();
35
36
37
38 return 0;
39
将查询封装在一个方法里面
1 /**
2 * 查询的方法
3 *
4 * @param sql
5 * @param values sql中?的值
6 * @return 查询到的数据
7 */
8 public static List<Map<String, String>> query(String sql, Object[] values)
9 PreparedStatement ps = null;
10 ResultSet res = null;
11 List<Map<String, String>> list = new ArrayList<>();
12 getConnection();
13 try
14 //创建语句对象
15 ps = conn.prepareStatement(sql);
16 //为ps中的?设置值
17 if (values != null && values.length > 0)
18 for (int i = 0; i < values.length; i++)
19 ps.setObject(i + 1, values[i]);
20
21
22 // 执行查询操作
23 res = ps.executeQuery();
24 //获得结果集中所有的列的信息
25 ResultSetMetaData metaData = res.getMetaData();
26 // 获取到列的总数
27 int columnCount = metaData.getColumnCount();
28 while (res.next())
29 // 创建Map集合对象,用于存储一行数据
30 Map<String, String> map = new HashMap<>();
31 for (int i = 0; i < columnCount; i++)
32 // 获得列名
33 String columnNames = metaData.getColumnName(i + 1);
34 // 获得列名指定的数据
35 String columnValues = res.getString(columnNames);
36 // 把数据放到map集合中
37 map.put(columnNames, columnValues);
38
39 list.add(map);
40
41 catch (SQLException e)
42 // TODO Auto-generated catch block
43 e.printStackTrace();
44 finally
45 if (res != null)
46 try
47 res.close();
48 catch (SQLException e)
49 // TODO Auto-generated catch block
50 e.printStackTrace();
51
52
53 if (ps != null)
54 try
55 ps.close();
56 catch (SQLException e)
57 // TODO Auto-generated catch block
58 e.printStackTrace();
59
60
61
62 return list;
63
64
完整代码
1 1 package com.newroad.xmlparsedbuitl; 2 2 import java.sql.Connection; 3 3 import java.sql.DriverManager; 4 4 import java.sql.PreparedStatement; 5 5 import java.sql.ResultSet; 6 6 import java.sql.ResultSetMetaData; 7 7 import java.sql.SQLException; 8 8 import java.util.ArrayList; 9 9 import java.util.HashMap; 10 10 import java.util.List; 11 11 import java.util.Map; 12 12 import org.dom4j.Document; 13 13 import org.dom4j.DocumentException; 14 14 import org.dom4j.Element; 15 15 import org.dom4j.io.SAXReader; 16 16 17 17 public class DBUtil 18 18 private static String driver; 19 19 private static String url; 20 20 private static String user; 21 21 private static String password; 22 22 private static Connection conn = null; 23 23 24 24 // 解析xml文件 获取驱动 用户名 密码 由于不需要每次加载可以写在静态方法中 25 25 static 26 26 parseXmlInfo(); 27 27 28 28 29 29 // 创建连接 30 30 public static void getConnection() 31 31 // 判断一下如果conn为空或者被关闭就开连接 节省资源 32 32 try 33 33 if (conn == null || conn.isClosed()) 34 34 // 加载驱动获取连接 35 35 Class.forName(driver); 36 36 conn = DriverManager.getConnection(url + "?characterEncoding=utf-8", user, password); 37 37 38 38 catch (SQLException e) 39 39 e.printStackTrace(); 40 40 catch (ClassNotFoundException e) 41 41 // TODO Auto-generated catch block 42 42 e.printStackTrace(); 43 43 44 44 45 45 /** 46 46 * 修改数据的方法 47 47 * 48 48 * @param sql 49 49 * @param values 50 sql语句中所有?的值 51 51 * @return 0表示修改失败,其他表示修改成功 52 52 */ 53 53 public static int update(String sql, Object[] values) 54 54 PreparedStatement ps = null; 55 55 ResultSet rs = null; 56 56 // 获取连接 57 57 getConnection(); 58 58 try 59 59 // 创建prepareStatement 60 60 ps = conn.prepareStatement(sql); 61 61 System.out.println(ps); 62 62 for (int i = 0; i < values.length; i++) 63 63 ps.setObject(i + 1, values[i]); 64 64 65 65 System.out.println(ps); 66 66 // 执行修改语句返回受影响的行数 67 67 int num = ps.executeUpdate(); 68 68 System.out.println(num); 69 69 catch (SQLException e) 70 70 e.printStackTrace(); 71 71 finally 72 72 // 关闭资源 73 73 if (ps != null) 74 74 try 75 75 ps.close(); 76 76 catch (SQLException e) 77 77 // TODO Auto-generated catch block 78 78 e.printStackTrace(); 79 79 80 80 81 81 82 82 return 0; 83 83 84 84 85 85 /** 86 86 * 查询的方法 87 87 * 88 88 * @param sql 89 89 * @param values 90 90 * @return 查询到的数据 91 91 */ 92 92 public static List<Map<String, String>> query(String sql, Object[] values) 93 93 PreparedStatement ps = null; 94 94 ResultSet res = null; 95 95 List<Map<String, String>> list = new ArrayList<>(); 96 96 getConnection(); 97 97 try 98 98 //创建语句对象 99 99 ps = conn.prepareStatement(sql); 100 100 //为ps中的?设置值 101 101 if (values != null && values.length > 0) 102 102 for (int i = 0; i < values.length; i++) 103 103 ps.setObject(i + 1, values[i]); 104 104 105 105 106 106 // 执行查询操作 107 107 res = ps.executeQuery(); 108 108 //获得结果集中所有的列的信息 109 109 ResultSetMetaData metaData = res.getMetaData(); 110 110 // 获取到列的总数 111 111 int columnCount = metaData.getColumnCount(); 112 112 while (res.next()) 113 113 // 创建Map集合对象,用于存储一行数据 114 114 Map<String, String> map = new HashMap<>(); 115 115 for (int i = 0; i < columnCount; i++) 116 116 // 获得列名 117 117 String columnNames = metaData.getColumnName(i + 1); 118 118 // 获得列名指定的数据 119 119 String columnValues = res.getString(columnNames); 120 120 // 把数据放到map集合中 121 121 map.put(columnNames, columnValues); 122 122 123 123 list.add(map); 124 124 125 125 catch (SQLException e) 126 126 // TODO Auto-generated catch block 127 127 e.printStackTrace(); 128 128 finally 129 129 if (res != null) 130 130 try 131 131 res.close(); 132 132 catch (SQLException e) 133 133 // TODO Auto-generated catch block 134 134 e.printStackTrace(); 135 135 136 136 137 137 if (ps != null) 138 138 try 139 139 ps.close(); 140 140 catch (SQLException e) 141 141 // TODO Auto-generated catch block 142 142 e.printStackTrace(); 143 143 144 144 145 145 146 146 return list; 147 147 148 148 149 149 150 150 // 使用dom4j解析xml 151 151 private static void parseXmlInfo() 152 152 // 创建saxreader对象 153 153 SAXReader saxReader = new SAXReader(); 154 154 try 155 155 // 加载xml文件 156 156 Document doc = saxReader.read(DBUtil.class.getResourceAsStream("/jdbc.xml")); 157 157 // 获得根元素 158 158 Element root = doc.getRootElement(); 159 159 // 获得对应的元素的文本值 160 160 driver = root.elementText("driver"); 161 161 url = root.elementText("url"); 162 162 user = root.elementText("user"); 163 163 password = root.elementText("password"); 164 164 165 165 catch (DocumentException e) 166 166 // TODO Auto-generated catch block 167 167 e.printStackTrace(); 168 168 169 169 170 170 /** 171 171 * 关闭资源的方法 172 172 */ 173 173 public static void closeConnection() 174 174 try 175 175 if(conn != null && !conn.isClosed()) 176 176 conn.close(); 177 177 178 178 catch (SQLException e) 179 179 // TODO Auto-generated catch block 180 180 e.printStackTrace(); 181 181 182 182 183 183 184 184
java中xml解析(四种方法)
...DOC树的遍历也很耗时,对机器要求比较高。//step1:获得dom解析器工 查看详情
解析 XML 文件并保留有关行号的信息
】解析XML文件并保留有关行号的信息【英文标题】:ParsingXMLfilewithpreservinginformationaboutthelinenumber【发布时间】:2011-05-1915:16:56【问题描述】:我正在创建一个工具来分析一些XML文件(准确地说是XHTML文件)。这个工具的目的不仅... 查看详情
php通过xml报文方式,已第三方接口交互(发送xml,获取xml,并解析xml步骤)
开发者端:发送请求,并接收结果<?php//下面的demo,实现的功能如下://1-开发者需要判断一个用户是否存在,去请求第三方接口。//2-与第三方接口的通信,是以xml格式传送数据。开发者把用户信息以xml格式发送给第... 查看详情
oracle解析xml节点信息并转换string类型
select xmltype(dataxml).extract(‘/data/sqr_mc/text()‘).getstringval() assqrmcfromt_ins_formdatawherebsnum=‘170215085821005401‘ 查看详情
python操作lxml库(基础篇)(代码片段)
...2、lxml库特点3、lxml库的安装二、基本使用1、lxml.etree2、解析HTML网页3、读取并解析HTML文件三、lxml使用流程1、 导入模块2、创建解析对象四、lxml库数据提取1、提取所有a标签内的文本信息2、获取所有href的属性值3、不匹配href=... 查看详情
微信小程序实现获取用户信息并存入数据库操作示例
微信小程序获取用户信息简单,但是在存入自己服务器数据库的过程中研究了一天多的时间,并且网上搜索不到该资源,故发出来供大家参考。index.js?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253Page(... 查看详情
android之dom解析xml
一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOMAPI遍历XML树,检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。 Android完全支持DO... 查看详情
php通过xml报文格式的post请求方式,与第三方接口交互(发送xml,获取xml,并解析xml步骤)
开发者端:发送请求,并接收结果<?php//下面的demo,实现的功能如下://1-开发者需要判断一个用户是否存在,去请求第三方接口。//2-与第三方接口的通信,是以xml格式传送数据。开发者把用户信息以xml格式发送给第三方接口//... 查看详情
dom4j解析
XML解析概述 当将数据存储在XML后,我们就希望通过程序获得XML的内容。如果我们使用Java基础所学习的旧知识是可以完成的,不过你需要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。人们为不同问题提... 查看详情
xml解析(代码片段)
一、什么是XML?有什么用途 1、XML全名为可扩展标记语言(eXtensibleMarkupLanguage),是w3c组织的一个技术规范,具有严格的数据格式,主要作用是描述数据并集中于数据的内容。 2、XML的主要用途: ①作为小型数据... 查看详情
javasexml解析技术的使用详解(代码片段)
文章目录XML解析技术XML解析技术介绍Dom4j解析XML文件Dom4j解析各个节点Dom4j解析案例实战XML解析技术XML解析技术介绍XML的数据作用是什么?最终需要怎样处理?作用:存储数据、做配置信息、进行数据传输。最终需要被程序进行读取... 查看详情
msxml是啥东西?有啥用?
MSXML是什么东西?有什么用?MSXML是微软的XML语言解析器,用来解释XML语言的。其中的具体情况如下:1、MSXML主要用来执行或开发经由XML所设计的最新应用程序。就好像HTML文本下载到本地,浏览器会检查HTML的语法,解释HTML文本然后... 查看详情
详解java解析xml的四种方法(代码片段)
...网站文档http://www.w3.org获取更多信息。XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML... 查看详情
在 C# 中解析 XML 数据并显示到 ListBox
】在C#中解析XML数据并显示到ListBox【英文标题】:ParsingXMLdatainC#andshowintoListBox【发布时间】:2016-04-2100:38:25【问题描述】:我正在尝试使用VisualStudio解析C#中的XML文件并在ListBox中显示数据,但在处理嵌套的XML文件时我不知道如何... 查看详情
如何在php中解析soap xml响应并从字符串中获取信息
】如何在php中解析soapxml响应并从字符串中获取信息【英文标题】:Howtoparsesoapxmlresponseinphpandgettheinformationfromthestring【发布时间】:2016-05-0622:17:51【问题描述】:我在从SOAP响应中提取信息时遇到了一些问题。这是我得到的回复:&... 查看详情
python操作dom(待更)
...术Axml.etree.ElementTree模块实现了一个简单高效的API,用于解析和创建XML数据。XML是一种固有的分层数据格式,最自然的表示方法是使用树。ET(xml.etree.ElementTree)有两个类:ElementTree将整个XML文档表示为一个树,Element表示该树中的单... 查看详情
java代码用dom4j解析xml文件的简单操作
...2016/02/17目标:为telenor的ALUFemto接口写一个采集xml文件并解析出locationName标签里的值,然后更新到数据库中。从网上搜了下,有四种常用的解析xml的方式,包括DOM,JAXD,Dom4J,SAX(simpleapiforxml).我正好有Dom4j的jar包,就选择了Dom4j... 查看详情
hibernate总结
...使开发人员可以用更多精力进行对象方面的开发1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Tran 查看详情