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