• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

这两天与小伙伴写了一个小程序,实现的功能如下: 首先将数据库的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 < nodeList.getLength(); i++) {			Element element = document.createElement(newElementName);			nodeList.item(i).appendChild(element);		}		createXml(fileName);	}	public void insertAttrNode(String fileName, String nodeName,			String newAttrName, String attrValue) {		document = parserXml(fileName);		NodeList nodeList = document.getElementsByTagName(nodeName);		for (int i = 0; i < nodeList.getLength(); i++) {			Element element = (Element) (nodeList.item(i));			element.setAttribute(newAttrName, attrValue);		}		createXml(fileName);	}	public void insertTextNode(String fileName, String nodeName, String textNode) {		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 < nodeList.getLength(); i++) {			Element node = (Element) nodeList.item(i);			node.setAttribute(attrName, newAttrValue);		}		createXml(fileName);	}	private Document parserXml(String fileName) {		try {			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();			DocumentBuilder db = dbf.newDocumentBuilder();			Document document = db.parse(fileName);			System.out.println("-----------------------------------" + "解析完毕"					+ "----------------------------------------");			return document;		} catch (FileNotFoundException e) {			System.out.println(e.getMessage());		} catch (ParserConfigurationException e) {			System.out.println(e.getMessage());		} catch (SAXException e) {			System.out.println(e.getMessage());		} catch (IOException e) {			System.out.println(e.getMessage());		}		return document;	}	private void createXml(String fileName) {		try {			/** 将document中的内容写入文件中 */			TransformerFactory tFactory = TransformerFactory.newInstance();			Transformer transformer = tFactory.newTransformer();			transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");			transformer.setOutputProperty(OutputKeys.INDENT, "yes");			DOMSource source = new DOMSource(document);			StreamResult result = new StreamResult(new FileOutputStream(					fileName));			transformer.transform(sourc<i>本文来源gaodai$ma#com搞$代*码*网</i>e, result);			System.out.println("--------------------------------"					+ "更新 XML文件成功" + "-------------------------------------");		} catch (Exception exception) {			System.out.println("更新" + fileName + "出错:" + exception);			exception.printStackTrace();		}	}}

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

/** * @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);	}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:clob保存为本地xml文件,修改后上传

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址