`
kongzimengsheng1
  • 浏览: 68455 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转转转mysql,sqlserver,oracle三种数据库的大对象存取

    博客分类:
  • java
阅读更多
原创  mysql,sqlserver,oracle三种数据库的大对象存取 收藏
mysql 大对象存取:
类型一般应该用mediumblod,
blob只能存2的16次方个byte,
mediumblod是24次方,
一般来说够用了.longblob是32次方有些大.

MYSQL默认配置只能存1M大小的文件,要修改配置,WIN版本的在mysql.ini文件中
修改max_allowed_packet,net_buffer_length等几个参数,或直接SET GLOBAL varName=value.
linux版本可以在启动参数后加-max_allowed_packet=xxM等几个参数.

MYSQL存大对象最好直接就setBinaryStream,又快又方便.
而不要先插入空再造型成BLOB然后再setBlob

例子:
import java.sql.*;
import java.io.*;
public class DBTest {

 
  static String driver = "org.gjt.mm.mysql.Driver";
  static String url = "jdbc:mysql://localhost:3306/test";
  static String user = "root";
  static String passwd = "passwd";
  public static void main(String[] args) throws Exception {
    Connection conn = null;
    try {
      Class.forName(driver);
      conn = DriverManager.getConnection(url,user,passwd);
     
      int op = 1;
      //插入
      if (op == 0) {
        PreparedStatement ps = conn.prepareStatement("insert into tb_file values (?,?)");
        ps.setString(1, "aaa.exe");
        InputStream in = new FileInputStream("d:/aaa.exe");
        ps.setBinaryStream(2,in,in.available());
        ps.executeUpdate();
        ps.close();
      }
      else {
        //取出
        PreparedStatement ps = conn.prepareStatement("select * from  tb_file where filename = ?");
        ps.setString(1, "aaa.exe");
        ResultSet rs = ps.executeQuery();
        rs.next();
        InputStream in = rs.getBinaryStream("filecontent");
        System.out.println(in.available());
        FileOutputStream out = new FileOutputStream("d:/bbb.exe");
        byte[] b = new byte[1024];
        int len = 0;
        while ( (len = in.read(b)) != -1) {
          out.write(b, 0, len);
          out.flush();
        }
        out.close();
        in.close();
        rs.close();
        ps.close();
      }
    }
    catch (Exception ex) {
      ex.printStackTrace(System.out);
    }
    finally {
      try {conn.close();}
      catch (Exception ex) { }
    }
  }
}


sqlserver 大对象存取没有什么多说的,只要是image类型就行了,注意这是column类型,有人以为它只能存
图象.image是文件镜象的意思.
import java.sql.*;
import java.io.*;
public class DBTest {


  static String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
  static String url = "jdbc:microsoft:sqlserver://192.168.0.202:9999999999;DatabaseName=dddd";
  static String user = "sa";
  static String passwd = "ps";
  public static void main(String[] args) throws Exception {
    Connection conn = null;
    try {
      Class.forName(driver);
      conn = DriverManager.getConnection(url,user,passwd);
      int op = 0;
      //插入
      if (op == 0) {
        PreparedStatement ps = conn.prepareStatement("insert into tb_file values (?,?)");
        ps.setString(1, "aaa.exe");
        InputStream in = new FileInputStream("d:/aaa.exe");
        ps.setBinaryStream(2,in,in.available());
        ps.executeUpdate();
        ps.close();
      }
      else {
        //取出
        PreparedStatement ps = conn.prepareStatement("select * from  tb_file where filename = ?");
        ps.setString(1, "aaa.exe");
        ResultSet rs = ps.executeQuery();
        rs.next();
        InputStream in = rs.getBinaryStream("filecontent");
        System.out.println(in.available());
        FileOutputStream out = new FileOutputStream("d:/bbb.exe");
        byte[] b = new byte[1024];
        int len = 0;
        while ( (len = in.read(b)) != -1) {
          out.write(b, 0, len);
          out.flush();
        }
        out.close();
        in.close();
        rs.close();
        ps.close();
      }
    }
    catch (Exception ex) {
      ex.printStackTrace(System.out);
    }
    finally {
      try {conn.close();}
      catch (Exception ex) { }
    }
  }
}



ORACLE的大对象存储有些变态,要无论是Blob,还是CLOB都要求先插入一个空值,然后
查询并锁定这一条记录,获取对Lob的引用再进行填充,网上有太多的例子.我个人认为
这种方法垃圾得连写都不想写了,你可以自己去搜索一下.
这种特别的操作既增加操作的复杂度,又违反了JDBC接口的规范,所以我极力反对这样
使用,如果你和我有同样的观点.那么我提供另一种通用的方法.就是你不用LOB而用
oracle的LONG RAW来代替它们.这样就可以象其它对象一样操作了:

create table tb_file(filename varchar2(255),filecontent LONG RAW);


import java.sql.*;
import java.io.*;

public class BlobTest {

  static String driver = "oracle.jdbc.driver.OracleDriver";
  static String url = "jdbc:oracle:thin:@localhost:1521:test";
  static String user = "system";
  static String passwd = "passwd";
  public static void main(String[] args) throws Exception {
    Connection conn = null;
    try {
      Class.forName(driver);
      conn = DriverManager.getConnection(url, user, passwd);
      int op = 1;
      //插入
      if (op == 0) {
        PreparedStatement ps = conn.prepareStatement("insert into tb_file values (?,?)");
        ps.setString(1, "aaa.exe");
        InputStream in = new FileInputStream("d:/aaa.exe");
        ps.setBinaryStream(2,in,in.available());
        ps.executeUpdate();
        ps.close();
      }
      else {
        //取出
        PreparedStatement ps = conn.prepareStatement("select * from  tb_file where filename = ?");
        ps.setString(1, "aaa.exe");
        ResultSet rs = ps.executeQuery();
        rs.next();
        InputStream in = rs.getBinaryStream("filecontent");
        System.out.println(in.available());
        FileOutputStream out = new FileOutputStream("d:/bbb.exe");
        byte[] b = new byte[1024];
        int len = 0;
        while ( (len = in.read(b)) != -1) {
          out.write(b, 0, len);
          out.flush();
        }
        out.close();
        in.close();
        rs.close();
        ps.close();
      }
    }
    catch (Exception ex) {
      ex.printStackTrace(System.out);
    }
    finally {
      try {
        conn.close();
      }
      catch (Exception ex) {}
    }
  }
}

分享到:
评论

相关推荐

    oracle mysql sqlServer 数据库 驱动

    在IT领域,数据库是存储和管理数据的核心工具,而Oracle、MySQL和SQL Server是全球范围内广泛应用的三大数据库管理系统。这三种数据库系统都有各自的特性和优势,适用于不同的应用场景,并且都需要对应的驱动程序来...

    Mysql,Oracle,Sqlserver数据库驱动包

    本主题将详细探讨MySQL、Oracle和SQL Server这三种主流关系型数据库管理系统(RDBMS)的驱动包,以及它们在数据交互中的作用。 1. MySQL驱动包:MySQL是一种开源、免费的数据库系统,广泛应用于Web开发。Java应用...

    SQL Server依然是数据库市场上的No.1

    SQL Server仍以51.0%的份额占据首位,Oracle以37.1%位居其次,MySQL以20.7%占据第三,接着是Access(14.9%)、DB2(12.5%)和PostgreSQL(4.2%)。这些比例与整体的使用率趋势相吻合。 选择SQL Server的主要原因...

    C#连接常用数据库(oracle,mysql).zip

    本压缩包“C#连接常用数据库(oracle,mysql).zip”显然包含了如何使用C#语言与两种主流数据库——Oracle和MySQL进行交互的示例或教程。下面将详细介绍这两个知识点。 首先,我们来讨论Oracle数据库的连接。Oracle是...

    dataserver:Redis队列入库工具是把redis内存中的json字符串自动保存到数据库的工具,它支持Oracle,sqlserver和mysql等主流数据库

    Redis队列入库工具是一款基于Java开发的实用程序,专门设计用于将Redis内存中的JSON字符串持久化到各种主流的关系型数据库中,如Oracle、SQL Server和MySQL。这个工具旨在解决数据实时同步的问题,确保Redis中的缓存...

    图片以二进制存取数据库

    在关系型数据库如MySQL、PostgreSQL、Oracle和SQL Server中,BLOB是一个特殊的数据类型,用于存储大量的二进制数据,例如图片、音频或视频文件。在SQL Server中,这种类型被称为`VARBINARY(MAX)`,它允许存储最多2^...

    C#数据库存取图片详细

    其中,SQL Server和MySQL提供二进制大对象(BLOB)类型,适合存储图片等大型数据。 2. 图片编码:在C#中,可以使用System.Drawing命名空间中的类来处理图片。例如,使用Bitmap类加载图片,并使用Image的Save方法将...

    Java访问数据库存取图片

    在Java编程中,访问数据库存取图片...以上就是使用Java和JDBC访问SQL Server 2000数据库存取图片的基本过程,虽然描述中提到的是SQL Server 2000,但同样的原理适用于其他支持BLOB类型的数据库,如MySQL、Oracle等。

    数据库设计的步骤 SQLseve

    数据库设计是构建高效、可靠的信息系统的基石,尤其在SQL Server 2000这样的数据库管理系统中,遵循严谨的步骤至关重要。数据库设计主要包括以下几个关键环节: 一、数据库设计概述 数据库设计是一个综合性的过程...

    PB 存取数据库中图片

    它具有强大的数据窗口组件,可以方便地与各种数据库系统交互,包括Oracle、SQL Server、MySQL等。 在PB中存取数据库中的图片主要涉及以下几个步骤: 1. **创建数据源**:首先,需要在PB中设置数据源,连接到包含...

    数据库认识DBMS-PPT课件.ppt

    常用的数据库管理系统包括SQL Server、Access、MySQL、KingBase、Oracle、DB2等。 DBMS的逻辑组件包括: 1. 表 2. 约束 3. 默认值 4. 触发器 5. 索引 启动和停止数据库服务可以通过控制面板、管理工具、服务等...

    DELPHI存取JPEG、BMP图像到数据库完整解决方案

    这些组件都可以用来连接和操作各种类型的数据库,如MySQL、Oracle、SQL Server等。 5. 图像存储: - BLOB字段:数据库中通常使用BLOB(Binary Large Object)字段来存储图像数据。创建表时,定义一个BLOB字段,如...

    Sqlserver2000经典脚本

    下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件...

    数据库工具大全.docx

    2. **Navicat**:Navicat是一款多平台的数据库管理工具,支持多种数据库系统,如MySQL、Oracle、SQLite、PostgreSQL和SQL Server。它具有直观的图形界面,便于用户管理数据库,包括创建、组织、存取和共享信息。...

    存取数据库图片

    1. **数据库选择**:首先,我们需要一个支持BLOB(Binary Large Object)类型的数据库,如MySQL、SQLite、Oracle或SQL Server等。BLOB类型允许我们存储非结构化的二进制数据,如图片。 2. **图片存储**:当图片上传...

    Delphi在SQL存取JPGE、BMP图像.rar_DELPHI 图像_SQL图像_delphi sql ima_图像 del

    这些库提供了对各种数据库(如SQL Server、Oracle、MySQL等)的接口,允许我们执行SQL语句来插入、更新和查询数据。 对于存储图像数据,有两种常见的方法:一是将图像文件作为二进制数据直接存入数据库,通常是存入...

    四川大学期末复习数据库ppt

    四川大学的这份复习资料应当涵盖了以上这些关键点,并可能深入讲解了具体实例、数据库管理系统(如MySQL、Oracle、SQL Server等)的使用,以及一些实际项目案例分析,帮助学生更好地理解和应用数据库知识。...

    经典SQL脚本大全

    │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...

    MySQL数据库原理及应用(第2版)(微课版)-习题答案.doc

    MySQL数据库原理及应用(第2版...* 常见的 DBMS 有 Visual FoxPro、Access、SQL Server、MySQL、PostgreSQL、Oracle、Teradata 等。 * 数据库应用系统的开发人员包括系统分析员、数据库设计人员、应用程序开发人员等。

Global site tag (gtag.js) - Google Analytics