views:

275

answers:

2

Hi,

I have an H2 database (http://www.h2database.com) and I'd like to insert a file into a BLOB field via a plain simple sql script (to populate a test database for instance). I know how to do that via the code but I cannot find how to do the sql script itself.

I tried to pass the path , i.e.

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

but this fails.

Within the code (java for instance), it's easy to create a File object and pass that in, but directly from a sql script, I'm stuck...

Any idea ?

David

+1  A: 

Not h2database, but may help; http://jerrytech.blogspot.com/2009/03/tsql-to-insert-imageblog.html

GordonB
That look promising, I'll have a look a this, although this seems to be a TSQL specific...let's see
DavidM
+1  A: 

For testing, you can insert literal hex bytes or use the RAWTOHEX(string) function, as shown below.

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

Addendum: For loading BLOB fields from a file, FILE_READ(fileNameString) may be a useful alternative.

insert into a values(3, FILE_READ('file.dat'));
trashgod
looks like a very useful function for testing indeed! thanks for the hint
DavidM
@David Michel: I overlooked the essence of your question; it looks like you want `FILE_READ`, added above.
trashgod
indeed, that's exactly what I wanted. cheers !
DavidM
I tried the FILE_READ() function which seems to work fine (no erros or warnings as the script runs) but then I get a 'java.lang.OutOfMemoryError: Java heap space' as I run a 'SELECT * FROM mytable'
DavidM
I guess that could happen if the BLOBs are big enough. Have you tried `-Xms` and `-Xmx`? http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html
trashgod
The file is 11 MB which is not small, but not that big either. The fact that I'm running on a linux VM with VirtualBox so I have limited memory available.. which might explains this.I didn't that one could change the heap max size of the JVM via a command line option, thanks for the hint.
DavidM
You could also look at `SET COMPRESS_LOB`.
trashgod