将数据以二进制流方式写入数据并再还原成原来的文件,编辑再写入
数据重发功能需要进行人工干预,操作数据为二进制流和结构化数据之间的相互转换,并确保相互转换过程编码格式统一:
一、需求:
将结构化数据以二进制格式保存在数据库中(别说这样不好,别说建议文件保存在文件夹下,数据库保存文件路径,我也懂的,但这里需求只能是这样来做的。数据对接懂的。)
所实现的代码(以对象方式):
/** * 将对象插入前置机数据库中<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; }
需要总结的地方还是拿出部分内容来总结一下,也更新一下自己的代码库。