jdbc 如何处理Blob类型字段的数据

jdbc处理大对象Blob

 在贴代码之前先讲一下什么是LOB大对象数据
 LOB 大对象 是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储多达 4GB的数据)

  LOB分类两种类型:

  • (1)内部,
  • (2)外部

 内部LOB将数据是已字节流的形式存储再数据库的内部,因而LOB的许多操作都可以参与事务,也可以像处理普通数据一样对其进行备份和恢复操作。
 内部三种类型:

  • (1)BLOB(二进制数据,用于存储图像,视频,文件等),
  • (2)CLOB(单字节字符数据,用于存储超长的文本数据)
  • (3)NCLOB(多字节字符数据,用于存储超长的文本数据)

注意: 使用jdbc 向数据库插入BLOB类型的数据时必须使用 prepareStatement


强制分割线


     列子1:是从一个数据库中的表(带有Blob类型)中数据导入进另一张表(带有Blob类型)

这里的关键点就是字节流。


	public static void main(String[] args) throws SQLException, IOException {
		/**
		 * 从一个库移到另一个库
		 * **/
		String url = "XXXXXXXXX";
		String driver =	"";
		String username = "XXXXXX";
		String password = "XXXXXX";
		Connection con = null;
		PreparedStatement ps = null;
		InputStream input = null;
		OutputStream osM  = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		try {
			con = DriverManager.getConnection(url, username, password);
			con.setAutoCommit(false);//关闭自动提交
			String MuSql = "select image from sys_image where user_id = 'icc'";
			ps = con.prepareStatement(MuSql);
			ResultSet rs = ps.executeQuery();
			BLOB blob = null;
			while (rs.next()) {
				blob = (BLOB)rs.getBlob("image");
			}
			 input = blob.getBinaryStream();
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			byte[] b = new byte[1024];
			int l = 0 ;
			while((l = input.read(b)) != -1) {
				baos.write(b, 0, l);
			}
			
			String updateSql = "insert into  sys_image_test values('yzy',?,sysdate)";
			ps = con.prepareStatement(updateSql);
			ps.setBytes(1, baos.toByteArray());
			ps.executeUpdate();
			input.close();
			baos.close();
			con.commit();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			con.rollback();
		}finally {
			if (con != null) {
				con.close();
			}
			if (ps != null) {
				ps.close();
			}
						
		}
				
	}

例子2:下载图片


	public static void main(String[] args) throws SQLException {
		/**
		 * 下载图片
		 * **/
		String url = "jdbc:oracle:thin:@192.168.0.25:1521:orcl";
		String driver =	"";
		String username = "bjsc";
		String password = "bjsc";
		Connection con = null;
		PreparedStatement ps = null;
		InputStream input = null;
		OutputStream osM  = null;
		int i = 0;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		try {
			con = DriverManager.getConnection(url, username, password);
			String MuSql = "select image from sys_image";
			ps = con.prepareStatement(MuSql);
			ResultSet rs = ps.executeQuery();
			BLOB blob = null;
			while (rs.next()) {
				blob = (BLOB)rs.getBlob("image");
				//下载路径
				String filePath = "F:/img/"+i+".jpg";
				InputStream in = blob.getBinaryStream();
				FileOutputStream out = new FileOutputStream(filePath);
				int l = (int)blob.length();
				byte buffer[] = new byte[l];
				while((l = in.read(buffer))!= -1) {
					out.write(buffer, 0, l);
				}
				out.close();
				in.close();
				i++;
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			if (con != null) {
				con.close();
			}
			if (ps != null) {
				ps.close();
			}
		}
	}

 

你可能感兴趣的:(JAVA)