mysql 定义XML字段_XML MYSQL 带事物处理相关操作练习代码  PreparedStatement和Statement 相关...

package dao;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Iterator;

import org.dom4j.Document;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

import com.mysql.jdbc.PreparedStatement;

public class DBandXML {

// 驱动程序名

private final String driver =

"com.mysql.jdbc.Driver";

// URL指向要访问的数据库名qt_data_newd

private final String url =

"jdbc:mysql://localhost:3306/qt_data_newd";

// 创建数据库连接

private Connection connection = null;

// MySQL配置时的用户名

private final String user = "root";

// Java连接MySQL配置时的密码

private final String password = "123456";

private int nodeCount;

// 得到数据库连接方法

public Connection getConn() {

try {

//

加载驱动程序

Class.forName(driver);

connection =

DriverManager.getConnection(url, user, password);

} catch (ClassNotFoundException

e) {

//

TODO自动生成blockStatement捕捉

e.printStackTrace();

} catch (SQLException e)

{

//

TODO自动生成blockStatement捕捉

e.printStackTrace();

}

// 返回数据库连接

return connection;

}

public static String checkXMLCharacters(String

in) {

StringBuffer out = new StringBuffer(); //用于保存输出

char current; // 用于引用当前字符。

if (in == null || ("".equals(in)))

return ""; // 空置测试.

for (int i = 0; i < in.length(); i++) {

current = in.charAt(i); // 注意:不IndexOutOfBoundsException抓住了

// 在这儿,这应该不会发生。

if ((current == 0x9) || (current == 0xA) || (current == 0xD)

|| ((current >= 0x20)

&& (current <=

0xD7FF))

|| ((current >= 0xE000)

&& (current <=

0xFFFD))

|| ((current >= 0x10000)

&& (current <=

0x10FFFF)))

out.append(current);

}

return out.toString();

}

public Document getTableInfotoXML(Connection

conn, Statement stm)

throws

SQLException {

ResultSet rs; //储存表结构

Document document =

DocumentHelper.createDocument(); //创建 document文档 储存表结构信息

Element qt_data_newElement =

document.addElement("qt_data_new"); //添加 根节点

Element

Elements=null; //用来属性储存字段名字数据类型

等。

ResultSet

rss; // 储存主键

//取主键

String PrimaryKeys =

null;

rss =

conn.getMetaData().getPrimaryKeys(null, null, "qt_data_new");

while(rss.next()){

PrimaryKeys=rss.getString(4);

}

rs = stm.executeQuery("select *

from qt_data_new limit 0,1" ); ResultSetMetaData mete =

rs.getMetaData(); //

得到结果集(rs)的结构信息,比如字段数、字段名等 boolean b;

int isnull;

for(int

y=1;y<=mete.getColumnCount();y++){ Elements=qt_data_newElement.addElement("col");

Elements.addAttribute("code",

"C"+y+"");

Elements.addAttribute("name",

mete.getColumnName(y)); //去列名(字段)

Elements.addAttribute("type",

mete.getColumnTypeName(y)); //字段类型

Elements.addAttribute("length",mete.getColumnDisplaySize(y)+"");

//字段长度

if(PrimaryKeys.equals(mete.getColumnName(y))){ //判断谁是主键

Elements.addAttribute("ispk","yes");

}else{

Elements.addAttribute("ispk","");

}

b=mete.isAutoIncrement(y); if(b==true){ //判断是否自动增长

Elements.addAttribute("Autoincr","true");

}else{

Elements.addAttribute("Autoincr","false");

}

isnull=mete.isNullable(y);

if(isnull==0){ //判断 是否 可以为空

Elements.addAttribute("isnull","NOTNULL");

}else{

Elements.addAttribute("isnull","NULL");

} }

rs.close(); rss.close();

return

document; // 返回 document文档

}

public void db_to_xml()

{

Connection conn = null; //

创建数据库连接

Statement stm = null; //

statement用来执行SQL语句

ResultSet rs = null; //

记录表中读取的数据结果集 try {

conn =

this.getConn(); // 连接数据库

Document

document = null; // 建立document对象(创建文档文件)

Element

qt_data_newElement = null ; // 建立XML文档的根qt_data_new(表名)

//

这句指定了格式化的方式为缩进式,则非紧凑式。

OutputFormat

format = OutputFormat.createPrettyPrint();

//

指定编码为UTF-8。

format.setEncoding("UTF-8");

XMLWriter

writer = null;

//

遍历RS结果集把每一行的值取出来赋给节点

stm =

conn.createStatement(); // 创建statement

rs =

stm.executeQuery("SELECT COUNT(*) FROM qt_data_new");

rs.next();

int

ResultCount = rs.getInt(1) ; //查询出表中总行数 rs.close();

int

n=10000;

int m;

Element

rowElement=null; //每一条记录

Element

element=null; //每一条记录 详细值

//每次取一万条

进行判断(ResultCount/10000 最多分多少次取)

for (int i =

0; i < ResultCount/10000+1; i++) {

m=i*10000;

if(ResultCount

m=ResultCount;

break; //当N 大于总行数是跳出循环

} document=getTableInfotoXML(conn,stm); // 获得 储存表结构的 document

qt_data_newElement=document.getRootElement(); //获得跟节点

rs

= stm.executeQuery("select * from qt_data_new limit " + m

+

"," +n+ ""); // 查询qt_data_new中的数据放入rs结果集

ResultSetMetaData

mete = rs.getMetaData(); // 得到结果集(rs)的结构信息,比如字段数、字段名等

System.out.println("生成:"+"qt_data_new"+(i+1)+".xml");

while(rs.next())

{

rowElement

= qt_data_newElement.addElement("row"); // 加入第一个row节点

for(int

y=1;y<=mete.getColumnCount();y++){ //

element

= rowElement.addElement("C"+y+""); // 字段取出作为节点的名字 ( C1:getInt()

C2:getInt() C3:getLong() 其他的getString())

element.addAttribute("V",this.checkXMLCharacters((rs.getString(mete.getColumnName(y))

+ "").trim())); // 把该字段的值取出

}

} rs.close();

writer

= new XMLWriter(new OutputStreamWriter(new

FileOutputStream("qt_data_new"+(i+1)+".xml"), "UTF-8"),

format); writer.write(document);

writer.close();

//java

虚拟机会自己调用gc()方法去释放内存。

rowElement=null;

element=null;

document=null;

qt_data_newElement=null;

System.gc();

}

} catch (Exception ex)

{

ex.printStackTrace();

} finally {

try {

if

(rs != null)

rs.close();

if

(stm != null)

stm.close();

if

(conn != null)

conn.close();

} catch

(Exception e) {

e.printStackTrace();

conn

= null;

}

}

//return true; // 返回boolben

值为true 将此值赋给 一个boolben类型后可以判断此方法是否执行

}

public void createTable(){

Connection conn = null; //

创建数据库连接

Statement stm = null; //

statement用来执行SQL语句

ResultSet rs = null; //

记录表中读取的数据结果集

try{

conn =

this.getConn(); // 连接数据库

//

遍历RS结果集把每一行的值取出来赋给节点

stm =

conn.createStatement(); // 创建statement

//创建一个SAX阅读器

SAXReader

reader = new SAXReader();

reader.setEncoding("UTF-8");

//读取XML文档赋给document

文档

Document

document=reader.read("qt_data_new1.xml");

Element root = document.getRootElement();// 得到根节点

//如果表不存在在创建表格

String sql="CREATE TABLE IF NOT EXISTS"+"

"+root.getName()+"1"+"(";

String primarykey="";

//Iterator模式 迭代器 遍历结合

//取得根节点下的所有col节点

for (Iterator i = root.elementIterator("col"); i.hasNext();)

{

Element col= (Element) i.next();

sql+="`"+col.attributeValue("name")+"`"+" ";

//判断如果字符串过大的话 类型变为TEXT

if(col.attributeValue("type").equals("VARCHAR")

&&

Integer.parseInt(col.attributeValue("length"))>1024){

//强转成整数类型

sql+="text";

}else{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值