开发者社区> 问答> 正文

文件存进数据库

例如word TXT excal 图片等,这些程序中经常会用到的文件,怎么把它们存到数据库中;

展开
收起
a123456678 2016-06-29 10:58:46 2607 0
1 条回答
写回答
取消 提交回答
  • 第一种
    Python
    如果你是用类似sqlalchemy这样的orm数据库

    def upload_blob(file_data):
        fb = StringIO.StringIO()
        file_data.save(fb)
        filename = file_data.filename
        c_blob_id = None
        if filename:
            blob = T_Blob()
            blob.c_filename = filename
            blob.c_blob = fb.getvalue()
            db.session.add(blob)
            db.session.flush()
            c_blob_id = blob.id
        return c_blob_id
    调用
        form = AddFileForm()
        if form.validate_on_submit():
            user = g.user
            c_blob_id = models.upload_blob(form.c_fj.data)
    第二种 java jdbc方式插入Oracle
    
    import java.sql.*; 
    import java.io.*; 
    import oracle.sql.*; 
    public class IntoOracle { 
        public static void main(String[] args) { 
            try {
                DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 
                Connection conn = OracleFactory.getOracle();
                conn.setAutoCommit(false);
                
                BLOB blob = null;
                
                PreparedStatement pstmt = conn.prepareStatement("insert into blobtest(id,b) values(?,empty_blob())"); 
                pstmt.setString(1,"50"); 
                pstmt.executeUpdate(); 
                pstmt.close(); 
                
                pstmt = conn.prepareStatement("select b from blobtest where id= ? for update"); 
                pstmt.setString(1,"50"); 
                ResultSet rset = pstmt.executeQuery(); 
                if (rset.next()) blob = (BLOB) rset.getBlob(1); 
            
                String fileName = "d:\\bjx.jpg"; 
                File f = new File(fileName); 
                FileInputStream fin = new FileInputStream(f); 
                System.out.println("file size = " + fin.available()); 
                
                pstmt = conn.prepareStatement("update blobtest set b=? where id=?"); 
                
                OutputStream ut = blob.getBinaryOutputStream(); 
                
                int count = -1, total = 0; 
                byte[] data = new byte[(int)fin.available()]; 
                fin.read(data); 
                out.write(data); 
                fin.close(); 
                out.close(); 
                
                pstmt.setBlob(1,blob); 
                pstmt.setString(2,"50"); 
                
                pstmt.executeUpdate(); 
                pstmt.close(); 
            
                conn.commit(); 
                conn.close(); 
            } catch (SQLException e) { 
                System.err.println(e.getMessage()); 
                e.printStackTrace(); 
            } catch (IOException e) { 
                System.err.println(e.getMessage()); 
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    以上

    2019-07-17 19:48:53
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据库2025 V3 立即下载
阿里云数据库案例集下载 立即下载
为什么PostgreSQL是最适合去O的数据库 立即下载