淘先锋技术网

首页 1 2 3 4 5 6 7
< p>Bytea是PostgreSQL数据库中一个存储二进制数据的数据类型,它可以存储任意格式的数据,如图像、视频、压缩文件等等。虽然在Oracle数据库中缺少bytea类型,但可以通过BLOB类型来替代,本文将介绍如何在Oracle中存储和使用二进制数据类型.< /p>< p>一般而言,我们使用java程序来操作Oracle数据库,所以这里会用到jdbc中的PreparedStatement对BLOB类型进行插入操作。如下是一个简单的插入BLOB数据的示例:< /p>< pre>Connection conn = DriverManager.getConnection(url, user,password); String sql = "INSERT INTO tablename(id, img) values(?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 1); FileInputStream fin = new FileInputStream(new File("xxx.jpg")); pstmt.setBinaryStream(2, fin, (int) file.length()); pstmt.executeUpdate(); pstmt.close(); fin.close(); conn.close();< /pre>< p>通过上述代码,我们可以往Oracle数据库中插入一个BLOB类型的数据,其中将指定的本地文件xxx.jpg插入到img字段中. 与此类似,我们也可以通过jdbc读取数据库中的BLOB数据并保存到本地文件中. 如下是一个重头戏:< pre>public static void readBlobData() throws Exception { Connection conn = DriverManager.getConnection(url, user,password); String sql = "select * from tablename where id= ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 1); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { Blob blob = rs.getBlob("img"); InputStream in = blob.getBinaryStream(); File file = new File("yyy.jpg"); OutputStream out = new FileOutputStream(file); // 读取数据 int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; int length = -1; while ((length = in.read(buffer)) != -1) { out.write(buffer, 0, length); } // 关闭IO流 in.close(); out.close(); } rs.close(); pstmt.close(); conn.close(); }< /pre>< p>在上述代码中,我们通过jdbc从数据库中查询到了一条记录,并获取了其中的BLOB对象blob,后面通过getBinaryStream()方法获取流,通过write()方法将BLOB数据写入到本地文件yyy.jpg中去。与插入操作相比,读取操作的难点在于读取时的缓存大小和循环读取,这里我设置了一个1024 * 1的每次读取缓存,确保了能在大部分情况下存储二进制文件的正确读取.< p>以上两个操作比较简单,但已经涵盖了大部分场景,如果需要对BLOB数据进行更多的操作,可以上网查阅相关教程或手册。. 总之,通过上述方法,我们可以以相对容易和优雅的方式,将二进制文件存储到Oracle数据库中,并随时随地进行读取和使用.< /p>