将数据以二进制流方式写入数据库

将数据以二进制流方式写入数据并再还原成原来的文件,编辑再写入



数据重发功能需要进行人工干预,操作数据为二进制流和结构化数据之间的相互转换,并确保相互转换过程编码格式统一:

一、需求:

将结构化数据以二进制格式保存在数据库中(别说这样不好,别说建议文件保存在文件夹下,数据库保存文件路径,我也懂的,但这里需求只能是这样来做的。数据对接懂的。)

所实现的代码(以对象方式):

/**
	 * 将对象插入前置机数据库中<p>
	 * @param exData 要插入的数据
	 * @param xmlFileName xml文件路径
	 * @param index 自增长主键
	 * @throws Exception
	 */
	public void insert2zwdt(ExData exData, String xmlFileName, Long index) throws Exception{		
		//================================
		Connection conn = getConnection();
		conn.setAutoCommit(false); // 设置手动提交
		PreparedStatement pstmt=null;
		File file=new File(xmlFileName);
		InputStream in = new FileInputStream(file);
		
		String sql="insert into exdata_sending(NM_SEQ_ID,ST_SOURCE,ST_KEY,ST_VERSION,ST_VALUE,ST_OP,ST_MEMO,BL_DATA,ST_DEST) "
				+ "values(?,?,?,?,?,?,?,?,?)";
		
		pstmt=conn.prepareStatement(sql);
		pstmt.setInt(1, index.intValue());
		pstmt.setString(2, exData.getStSource());
		pstmt.setString(3, exData.getStKey());
		pstmt.setString(4, exData.getStVersion());
		pstmt.setString(5, exData.getStValue());
		pstmt.setString(6, exData.getStOp());
		pstmt.setString(7, exData.getStMemo());
		pstmt.setBinaryStream(8, in, file.length());
		pstmt.setString(9, exData.getStDest());
		
		pstmt.execute();
		conn.commit();
		pstmt.close();
	}


二、需求:

数据对账过程出现错误,需要进行人工干涉。

步骤:1.找出前置机上的错误数据,并标记出对应自己库中的那条数据。

2.以流方式在本地还原成文件。

3.将文件再编辑器中编辑后形成新的本地文件,同时保存最新并正确的数据在本地及前置机库和自己系统库中。

4.修改状态。


核心实现代码(往本系统库中插数据):

/**
	 * 往XXXX中插入数据.
	 * @param exData 要插入的数据
	 * @param xmlFileName xml文件路径
	 * @throws SQLException 
	 * @throws FileNotFoundException 
	 */
	public void insert2own(ExData exData, String xmlFileName, Long index) throws Exception{
		File file=new File(xmlFileName);
		InputStream in = new FileInputStream(file);
		
		DataSending dataSending = new DataSending();
		dataSending.setNmSeqId(index.intValue());
		dataSending.setStSource(exData.getStSource());
		dataSending.setStKey(exData.getStKey());
		dataSending.setStVersion(exData.getStVersion());
		dataSending.setStValue(exData.getStValue());
		dataSending.setStOp(exData.getStOp());
		dataSending.setStMemo(exData.getStMemo());
		dataSending.setSendDate(new Date()); 
		byte[] data=new byte[]{};
		data=inputStreamToByte(in);
		dataSending.setBlData(data);
		dataSending.setStDest(exData.getStDest()); 
		dataSendingDao.save(dataSending);
		
	}



/**
	 * 将文件保存到字节数组中.
	 * @param in 输入流
	 * @return
	 * @throws IOException
	 */
	private byte[] inputStreamToByte(InputStream in) throws IOException{
		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		int ch;
		while((ch=in.read())!=-1){
			baos.write(ch);
		}
		byte[] data=baos.toByteArray();
		baos.close();
		return data;
	}

需要总结的地方还是拿出部分内容来总结一下,也更新一下自己的代码库。


发布了1 篇原创文章 · 获赞 5 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览