关于 oracle blob 写入读出修改
最近因为自己个人的一个需求,就是把文件存入数据库中,以方便备份,所以就写了这个类,这个类也不完全原创,有参考网上的一些资料,但通过自己的测试,完全可以实现自己的需求,所以把代码贴出来分享一下!以下的一些路径、数据库表名、字段名 需要自己修改一下,也可以根据自己的需要改成配置的!这个看自己的啦!还有就是那个jdbc工具类自己改一下!
1:WriteAndReadFile 类
[*]package com.grg.johnny.work;
[*]
[*]import java.io.*;
[*]import java.sql.*;
[*]
[*]import oracle.sql.BLOB;
[*]
[*]public class WriteAndReadFile {
[*]
[*] public static void main(String[] args){
[*] //1:先写入
[*] String path = "D://oracle2.zip";
[*] saveFile(path);
[*] //2:再读出
[*] //getFile("1");
[*]
[*] }
[*]
[*] /**
[*] * 写入文件
[*] * 往blob里插入文件要先插入空值empty_blob(),再进行修改
[*] * @param filePath
[*] * @return
[*] */
[*] public static boolean saveFile(String filePath) {
[*] File file = new File(filePath);
[*] Connection conn = JdbcUtil.getConnection();
[*] try {
[*] java.sql.Statement st = conn.createStatement();
[*] conn.setAutoCommit(false);
[*] System.out.println("=====================save file begin========================");
[*]// st.execute("insert into johnny_file values(1,'日常生活',empty_blob(),'这是一个很强大的文件',to_char(sysdate,'yyyy-MM-dd HH24:mi:ss'))");
[*] st.execute("insert into johnny_file values(2,'日常生活2',empty_blob(),'这是一个很强大的文件test',to_char(sysdate,'yyyy-MM-dd HH24:mi:ss'))");
[*] ResultSet rs = st
[*] .executeQuery("select id,file_blob from johnny_file where id=2 for update");
[*] if (rs.next()) {
[*] BLOB blob = (BLOB) rs.getBlob("file_blob");
[*] OutputStream outStream = blob.getBinaryOutputStream();
[*] InputStream fin = new FileInputStream(file);
[*] byte[] b = new byte;
[*] int len = 0;
[*] while ((len = fin.read(b)) != -1) {
[*] outStream.write(b, 0, len);
[*] }
[*] fin.close();
[*] outStream.flush();
[*] outStream.close();
[*] conn.commit();
[*] conn.close();
[*] }
[*] } catch (SQLException e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] return false;
[*] } catch (FileNotFoundException e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] return false;
[*] } catch (IOException e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] return false;
[*] }
[*] System.out.println("=====================save file end========================");
[*] return true;
[*] }
[*]
[*] /**
[*] * 读取
[*] * 读取出的路径根据自己的需要修改
[*] * @param id
[*] */
[*] public static void getFile(String id) {
[*] Connection conn = JdbcUtil.getConnection();
[*] java.sql.Statement st;
[*] try {
[*] st = conn.createStatement();
[*] System.out.println("=====================get file begin========================");
[*] ResultSet rs = st
[*] .executeQuery("select id,file_blob from johnny_file where id='"
[*] + id + "'");
[*] if (rs.next()) {
[*] BLOB blob = (BLOB) rs.getBlob("file_blob");
[*] File file = new File("D://oracle.zip");
[*] FileOutputStream output = new FileOutputStream(file);
[*] InputStream input = blob.getBinaryStream();
[*] byte[] buffer = new byte;
[*] int i = 0;
[*] while ((i = input.read(buffer)) != -1) {
[*] output.write(buffer, 0, i);
[*] }
[*] }
[*] System.out.println("=====================get file end========================");
[*] } catch (Exception e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] }
[*] }
[*]
[*] /**
[*] * 修改blob内容
[*] */
[*] public static void updateblob(String id) {
[*] Connection conn = JdbcUtil.getConnection();
[*] Statement stem = null;
[*] ResultSet rs = null;
[*] try {
[*] conn.setAutoCommit(false);
[*] stem = conn.createStatement();
[*] System.out.println("=====================update file begin========================");
[*] rs = stem.executeQuery("select file_blob from johnny_file where id='"
[*] + id + "' for update");
[*]
[*] if (rs.next()) {
[*] BLOB blob = (BLOB) rs.getBlob("file_blob");
[*] OutputStream outStream = blob.getBinaryOutputStream();
[*] InputStream fin = new FileInputStream("D://ok.zip");
[*] byte[] b = new byte;
[*] int len = 0;
[*] while ((len = fin.read(b)) != -1) {
[*] outStream.write(b, 0, len);
[*] }
[*] fin.close();
[*] outStream.flush();
[*] outStream.close();
[*] conn.commit();
[*] conn.close();
[*] }
[*] System.out.println("=====================update file end========================");
[*] } catch (Exception ex) {
[*] try {
[*] conn.rollback();
[*] } catch (SQLException e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] }
[*] System.out.println(ex.getMessage());
[*] }
[*] }
[*]}
2:以下这个是我自己的jdbc工具类
[*]package com.grg.johnny.work;
[*]
[*]import java.sql.*;
[*]
[*]public class JdbcUtil {
[*] /**
[*] * driverName
[*] * */
[*] static{
[*] String driverName="oracle.jdbc.driver.OracleDriver";
[*] try{
[*] Class.forName(driverName);
[*] }catch(Exception e){
[*] e.printStackTrace();
[*] }
[*] }
[*]
[*] /**
[*] * getConnection
[*] * */
[*] public static Connection getConnection(){
[*] String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
[*] String userName="XXXXX";
[*] String pwd="XXXXXX";
[*] Connection con = null;
[*] try{
[*] con = DriverManager.getConnection(url,userName,pwd);
[*] }catch(Exception ee){
[*] ee.printStackTrace();
[*] }
[*] return con;
[*] }
[*]
[*] /**
[*] * close
[*] * */
[*] public static void close(ResultSet rs,Statement stmt,Connection con){
[*] try{
[*] if(rs!=null){rs.close();}
[*] }catch(Exception ee){
[*] ee.printStackTrace();
[*] }
[*] try{
[*] if(stmt!=null){stmt.close();}
[*] }catch(Exception ee){
[*] ee.printStackTrace();
[*] }
[*] try{
[*] if(con!=null){con.close();}
[*] }catch(Exception ee){
[*] ee.printStackTrace();
[*] }
[*] }
[*]
[*]}
页:
[1]