【问题标题】:insert a BLOB via a sql script?通过 sql 脚本插入 BLOB?
【发布时间】:2011-02-06 03:09:30
【问题描述】:

我有一个 H2 数据库 (http://www.h2database.com),我想通过一个简单的 sql 脚本将一个文件插入 BLOB 字段(例如填充一个测试数据库)。我知道如何通过代码做到这一点,但我找不到如何执行 sql 脚本本身。

我试图通过路径,即

INSERT INTO mytable (id,name,file) VALUES(1,'file.xml',/my/local/path/file.xml);

但这失败了。

在代码中(例如 java),很容易创建一个 File 对象并将其传入,但直接从 sql 脚本中,我被卡住了......

有什么想法吗?

【问题讨论】:

    标签: sql blob h2


    【解决方案1】:

    为了测试,可以插入文字hex bytes或使用RAWTOHEX(string)函数,如下所示。

    create table a(id integer, item blob);
    insert into a values(1,'54455354');
    insert into a values(2, RAWTOHEX('Test'));
    select UTF8TOSTRING(item) from a;
    TEST
    Test
    

    附录:对于从文件加载 BLOB 字段,FILE_READ(fileNameString) 可能是一个有用的替代方案。

    insert into a values(3, FILE_READ('file.dat'));
    

    【讨论】:

    • 看起来确实是一个非常有用的测试功能!谢谢提示
    • @David Michel:我忽略了你问题的本质;看起来你想要FILE_READ,在上面添加。
    • 我尝试了 FILE_READ() 函数,该函数似乎工作正常(脚本运行时没有错误或警告),但是当我运行'SELECT * FROM mytable'
    • 我想如果 BLOB 足够大,可能会发生这种情况。你试过-Xms-Xmx吗? java.sun.com/javase/6/docs/technotes/tools/windows/java.html
    • 文件大小为 11 MB,不算小,但也不算大。我在带有 VirtualBox 的 linux VM 上运行,所以我的可用内存有限.. 这可能解释了这一点。我不认为可以通过命令行选项更改 JVM 的堆最大大小,谢谢您的提示。
    【解决方案2】:

    不是 h2database,但可能会有所帮助; https://blog.jerrynixon.com/2009/03/tsql-to-insert-imageblog.html

    链接博客文章中的示例代码,如果链接再次断开:

    CREATE TABLE MyTable 
        (id int, image varbinary(max))
    
    INSERT INTO MyTable
        SELECT      1
            ,(SELECT * FROM OPENROWSET(
                BULK 'C:\file.bmp', SINGLE_BLOB) as x )
    

    【讨论】:

    • 看起来很有希望,我会看看这个,虽然这似乎是特定于 TSQL 的......让我们看看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2013-01-22
    • 2013-03-16
    • 2016-11-16
    • 2011-08-05
    相关资源
    最近更新 更多