取出数据库表中的全部数据并生成一个XML的数据
Javaweb第三章课后习题
加载数据库驱动程序是JDBC操作的第一步,而不同数据库的驱动程序路径是不一样的,MySQL中的数据库驱动程序是com.mysql.cj.jdbc.Driver(我用的是mysql-connector-java-8.0.12,而mysql-connector-java-5.0.4-bin.jar的驱动程序路径则为:org.gjt.mm.mysql.Driver),若不是这两种版本的包,可以用下面这种方式查询驱动路径:因为路径的实质就是“包.类”,所以你可以打开下载的包的文件夹,找到jar包:
打开方式用解压缩软件,找到Driver.class文件:
所以此数据库的驱动程序路径为:com.mysql.cj.jdbc.Driver,然后建立一个Java Project,在该项目下建立一个名为lib的Folder,把上述jar包复制导入
要生成XML文件还需要导入一个jar包——jdom-2.0.6.jar,JDOM是使用Java语言编写的、用于读、写、操作XML的一套组件,可以直接从http://www.jdom.org/downloads/index.html官网上下载JDOM的开发包。
需要用到的jar包:
Connector-J-8.0链接:https://pan.baidu.com/s/1T7iDp0QhN5zwUFhHvJegTg 提取码:p44a
jdom-2.0.6链接:https://pan.baidu.com/s/1U2ffZLApdvHOla_HpcGKqA 提取码:t4vi废话不多说,直接上代码:
package test03;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.XMLOutputter;
public class LinkDB {
public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
//定义MySQL的数据库驱动程序,本程序用的是mysql-connector-java-8.0.12.jar
public static final String DBURL = "jdbc:mysql://localhost:3306/uuu?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";
//定义MySQL数据库的连接地址,格式:jdbc:mysql://IP地址:端口号/数据库名?字符集为utf-8&时区为GMT&SSL连接关闭
public static final String DBUSER = "root"; //MySQL数据库的连接用户名
public static final String DBPASS = "123456"; //MySQL数据库的连接密码
public static void main(String[] args) throws Exception {
Connection conn = null; //数据库连接
Statement stmt = null; //数据库操作
ResultSet rs = null; //保存查询结果
String sql = "SELECT * FROM dept"; //要执行的SQL语句,从dept表中查询所有数据
try {
Class.forName(DBDRIVER).newInstance(); //加载驱动程序
System.out.println("加载驱动程序成功!");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
System.out.println("连接数据库!");
if(!conn.isClosed()) {
System.out.println("Succeeded connecting to the Database!");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(conn);
try {
stmt = conn.createStatement(); //创建statement类对象,用来执行SQL语句
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Element addresslist = new Element("uuu"); //定义根节点
Document doc = new Document(addresslist); //声明一个Document对象
while(rs.next()) {//指针向下移动
int deptno = rs.getInt("deptno"); //取得deptno内容
String dname = rs.getString("dname"); //取得dname内容
String loc = rs.getString("loc"); //取得loc内容
Element linkman = new Element("dept"); //定义linkman节点
Element deno = new Element("deptno"); //定义deptno节点
Element dename = new Element("dname"); //定义dname节点
Element dloc = new Element("loc"); //定义loc节点
deno.setText(String.valueOf(deptno));
dename.setText(dname);
dloc.setText(loc);
linkman.addContent(deno); //deno为linkman的子节点
linkman.addContent(dename);
linkman.addContent(dloc);
addresslist.addContent(linkman); //将linkman加入根节点中
XMLOutputter out = new XMLOutputter(); //用来输出XML文件
out.setFormat(out.getFormat().setEncoding("GBK")); //设置输出的编码
try {
out.output(doc, new FileOutputStream("D:" + File.separator + "dept.xml"));
} catch(Exception e) {
e.printStackTrace();
}
System.out.print("部门编号:" + deptno + ";" + "\t");
System.out.print("部门名称:" + dname+ ";" + "\t");
System.out.println("部门位置:" + loc + ";");
}
try {
conn.close(); //关闭数据库
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs.close();
}
}
输出结果为:
输出的XML文件用记事本打开为:
用浏览器打开为:
注:数据表是我自己建立的,数据库名为uuu,数据表名为dept