SAX解析导入数据库,郁闷了两周~代码分享中
需求是这样的,从一个包含一个或多个表记录的XML中读取数据,插入到其对应的数据库表中,如果数据库有这条记录,则更新,没有的话做插入,执行下来效率很低,首先2000条速度还可以,但是一到后面就会很慢慢,过了一阵子又恢复一下,我怀疑是代码内存没有释放好,请大家帮忙看看~~!
public void startDocument() throws
SAXException {
str = new StringBuffer();
conn = connect.getConnection();
try {
conn.setAutoCommit(false);
} catch (
SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void processingInstruction(String taget, String data) throws SAXException {
}
public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
if( "TABLE ".equals(qName))//如果是TABLE这个标记开头的,证明是一条记录的开始
{
for(int i = 0;i <attr.getLength();i++)
{
tableName = attr.getValue(i); //将表名读出来
}
if(adm!=null)
{
MARKISNEW =adm.getMARKISNEW();
DELETEON = adm.getDELETEON();
TMPDATA = adm.getTMPDATA();
}
sql.append(tableName + " values( ");//将前半段SQL语句组织好
if(!table.equals(tableName))//table用来保存表名,如果table这个变量的值与表名不一致,证明是另一张表需要重新查一次主键列
{
sql1.append( "select * from syscolumns where id=object_id( ' "+ tableName + " ') ");
rs1 = connect.executeQuery(sql1.toString());
try {
rs1.last();
int row = rs1.getRow();
column = new String[row];//new一个行数大小的数组
rs1.beforeFirst();//把游标置到最顶端,不然用while循环将取不到任何数据,因为前面已经把游标放到最后了
while(rs1.next())//做循环
{
for(int i=0;i <row;i++)
{
column[i] = rs1.getString( "name ");//把每一列的列名存到数组中
tableid = rs1.getString( "id ");
rs1.next();
&n