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