热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

clob保存为本地xml文件,修改后上传

这两天与小伙伴写了一个小程序,实现的功能如下:首先将数据库的clob保存为本地的xml文件,然后对xml进行修改后上传至数据库主要的难点如下:1:clob文件的下载与上传,其中保存为本地的文件要求是UTF-8格式2:xml文件中节点的修改clob的上传与下载如下

这两天与小伙伴写了一个小程序,实现的功能如下: 首先将数据库的clob保存为本地的xml文件,然后对xml进行修改后上传至数据库 主要的难点如下: 1:clob文件的下载与上传,其中保存为本地的文件要求是UTF-8格式 2:xml文件中节点的修改 clob的上传与下载如下

这两天与小伙伴写了一个小程序,实现的功能如下:

首先将数据库的clob保存为本地的xml文件,然后对xml进行修改后上传至数据库

主要的难点如下:

1:clob文件的下载与上传,其中保存为本地的文件要求是UTF-8格式

2:xml文件中节点的修改

clob的上传与下载如下

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author GuoDi-CT DC
 *
 */

public class ClobModify {

	/**
	 *@param id 数据库中的ID
	 * 返回 保存文件的绝对路径
	 */
	public static String ClobToXml(int id) {
		Connection cOnn= DB.getConn();
		Statement stmt = DB.createStmt(conn);
		String sql = "select * from BD_PROCESS_DEF_VER where ID =" + id;
		ResultSet rs = DB.getRs(stmt, sql);
		String xmlFile = null;

		try {
			if (rs.next()) {
				int fjbh = rs.getInt(1);
				xmlFile = "d:\\xml\\" + fjbh + ".xml";
				Clob clob = rs.getClob(16);
				FileOutputStream fo = new FileOutputStream(xmlFile);
				OutputStreamWriter so = new OutputStreamWriter(fo, "UTF-8");
				if (clob != null) {
					Reader is = clob.getCharacterStream();
					BufferedReader br = new BufferedReader(is);
					String s = br.readLine();
					while (s != null) {
						so.write(s + System.getProperty("line.separator"));
// System.out.println(str);
						s = br.readLine();
					}
				}
				so.flush();
				so.close();
			}
		} catch (SQLException | IOException e) {
			e.printStackTrace();
		}
		DB.close(rs);
		DB.close(stmt);
		DB.close(conn);
		return xmlFile;
	}

	public static void updateClob(String fileName, int id) {

		FileInputStream fis = null;
		InputStreamReader rd = null;
		
		try {
			fis = new FileInputStream(fileName);
			rd = new InputStreamReader(fis, "UTF-8");
		} catch (FileNotFoundException e2) {
			e2.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		PreparedStatement pst = null;
		Connection cOnn= DB.getConn();
		Statement stmt = DB.createStmt(conn);
		try {
			conn.setAutoCommit(false);
		} catch (SQLException e1) {
			e1.printStackTrace();
		}

		String sql1 = "update BD_PROCESS_DEF_VER s set s.NODE_INFO=' ' where ID="
				+ id; // 这边需要设置一个空的字段,后面就不会出现空指针
		try {
			stmt.execute(sql1);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		String sql2 = "select * from BD_PROCESS_DEF_VER s where s.ID=" + id;
		// 锁定数据行进行更新,注意“for update”语句
		ResultSet rs = null;
		try {
			rs = stmt.executeQuery(sql2);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		try {
			while (rs.next()) {
				String sql3 = "update BD_PROCESS_DEF_VER set NODE_INFO= ? where ID="+ id;
				pst = conn.prepareStatement(sql3);
				pst.setCharacterStream(1, rd, 100000000);
				pst.executeUpdate();
			}
			// 最后一步自己提交
			conn.commit();
			conn.setAutoCommit(true);

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DB.close(rs);
			DB.close(stmt);
			try {
				pst.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			DB.close(conn);
		}
	}
}

其中DB是连接数据库的javabean,如下

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author GuoDi-CT DC 
 * jdcbc JavaBean
 * 
 */
public class DB {
	// 驱动程序就是之前在classpath中配置的JDBC的驱动程序的JAR 包中
	public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
	// 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
	public static final String DBURL = "jdbc:oracle:thin:@172.17.20.215:1521:BPMIDE";
	// 连接数据库的用户名
	public static final String DBUSER = "bpmduser";
	// 连接数据库的密码
	public static final String DBPASS = "bpmd";

	public static Connection getConn() {
		Connection cOnn= null;
		try {
			Class.forName(DBDRIVER);
			cOnn= DriverManager.getConnection(DBURL, DBUSER, DBPASS); // 2、连接数据库
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} // 1、使用CLASS 类加载驱动程序
		catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	public static Statement createStmt(Connection conn) {
		Statement stmt = null;
		try {
			stmt = conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return stmt;
	}

	public static ResultSet getRs(Statement stmt, String sql) {
		ResultSet rs = null;
		try {
			rs = stmt.executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}

	public static void close(ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				rs = null;
			}
		}
	}

	public static void close(Statement stmt) {
		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				stmt = null;
			}
		}
	}

	public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally {
				cOnn= null;
			}
		}
	}
}


xml的修改程序如下

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * 
 * @author zhangwen.ctdc DOM更新与解析XML文档
 */
public class XmlAnalysis /* implements XmlDocumentInterface */{
	private Document document;

	public void init() {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			this.document = builder.newDocument();
		} catch (ParserConfigurationException e) {
			System.out.println(e.getMessage());
		}
	}

	public void insertElementNode(String fileName, String nodeName,
			String newElementName) {
		document = parserXml(fileName);

		NodeList nodeList = document.getElementsByTagName(nodeName);

		for (int i = 0; i  0) {
			nodeList.item(0).getParentNode().removeChild(nodeList.item(0));
			nodeList = document.getElementsByTagName(nodeName);
		}

		createXml(fileName);
	}

	public void updateNode(String fileName, String nodeName, String attrName,
			String newAttrValue) {
		document = parserXml(fileName);

		NodeList nodeList = document.getElementsByTagName(nodeName);
		for (int i = 0; i 

最后程序提供的接口与说明如下

/**
 * @author GuoDi and ZhangWen
 *
 */
public interface NodeInfoInterface {
    
    /** 
    * XML文档 插元素入节点
    * @param time 时间
    * @param nodeName 标签名
    * @param newElementName 新标签
    */ 
    public void insertElementNode(String time, String nodeName,String newElementName);
	
    /** 
    * @param time 时间
    * @param nodeName 标签名
    * @param newAttrName 新属性名
    * @param attrValue 新属性值
    * XML文档 插入属性节点
    */ 
    public void insertAttrNode(String time,String nodeName,String newAttrName,String attrValue);
	
    /** 
    * @param time 时间
    * @param nodeName 标签名
    * @param textNode 文本
    * XML文档 插入文本节点
    */ 
    public void insertTextNode(String time,String nodeName,String textNode);
	
    /** 
    * @param time 时间
    * @param nodeName 标签名
    * XML文档 删除所有对应元素节点
    */ 
    public void deleteElementNode(String time,String nodeName);
	
    /** 
    * @param time 时间
    * @param nodeName 标签名
    * @param newAttrName 新属性名
    * @param attrValue 新属性值
    * XML文档 修改属性节点内容
    */ 
    public void updateNode(String time,String nodeName,String newAttrName,String attrValue);
	
}



推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文介绍了如何使用Power Design(PD)和SQL Server进行数据库反向工程的方法。通过创建数据源、选择要反向工程的数据表,PD可以生成物理模型,进而生成所需的概念模型。该方法适用于SQL Server数据库,对于其他数据库是否适用尚不确定。详细步骤和操作说明可参考本文内容。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文是关于自学Android的笔记,包括查看类的源码的方法,活动注册的必要性以及布局练习的重要性。通过学习本文,读者可以了解到在自学Android过程中的一些关键点和注意事项。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
莣Q楽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有