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

88 篇文章 0 订阅
36 篇文章 0 订阅

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



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

一、需求:

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

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

/**
	 * 将对象插入前置机数据库中<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;
	}

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


  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值