On 2015-07-02 03:24 PM, R.Smith wrote: > That exception is only thrown if the source column is not a BLOB (as > far as I can tell). > > You specify the column Type (or type affinity) as BLOB but then you > store a non-BLOB TEXT value in it ('"blue" "red" "orange" "yellow"' > <-- Not a BLOB) > SQLite will store this as TEXT, not BLOB. > > A BLOB starts with an x followed by a string of Hex, like in your > other inserted values such as: X'FFFEFDFCFBFAF9F8F7F6' > > The BLOB for your '"blue" "red" "orange" "yellow"' string will look > like this: > x'22626C75652220227265642220226F72616E676522202279656C6C6F7722' > > Insert that and getBytes() will work just fine. > > PS: This solution presupposes the enforcement of BLOB-ness, I'm not > exactly sure if this is the intention from SQLite or indeed a bug / > undesired side-effect. >
To be sure, here is a script to point out the difference: CREATE TABLE myTable ( myText Text, myTextArray BLOB, --Text myBool Boolean, myBoolArray BLOB, --Boolean myUInt8 UInt8, myUInt8Array BLOB, --UInt8 myUInt16 UInt16, myUInt16Array BLOB, --UInt16 myInt16 Int16, myInt16Array BLOB, --Int16 myInt32 Int32, myInt32Array BLOB, --Int32 myInt64 Int64, myInt64Array BLOB, --Int64 myReal32 Real32, myReal32Array BLOB, --Real32 myReal64 Real64, myReal64Array BLOB --Real64 ); INSERT INTO "myTable" VALUES ('This is text','"blue" "red" "orange" "yellow"', 0,X'00010001', 255,X'FFFEFDFCFBFAF9F8F7F6', 65535,X'FFFFFEFFFDFFFCFFFBFFFAFFFAFFFBFFFCFFFDFF', 32767,X'FF7F018001000200030004000500060007000000', 2147483647,X'FFFFFF7F000000800000000001000000', 9223372036854775807,X'FFFFFFFFFFFFFF7F000000000000008000000000000000000100000000000000', 3.40282346638528897567e+38,X'FFFF7F7F70443901000000000000803F0000004000004040000080400000A0400000C0400000E040', 1.79769313486231063271e+308,X'6666666666E62440AE47E17A14AEF33F3333333333B323C0007862A441A7C043'), ('This is text2',x'22626C75652220227265642220226F72616E676522202279656C6C6F7722', 0,X'00010001', 255,X'FFFEFDFCFBFAF9F8F7F6', 65535,X'FFFFFEFFFDFFFCFFFBFFFAFFFAFFFBFFFCFFFDFF', 32767,X'FF7F018001000200030004000500060007000000', 2147483647,X'FFFFFF7F000000800000000001000000', 9223372036854775807,X'FFFFFFFFFFFFFF7F000000000000008000000000000000000100000000000000', 3.40282346638528897567e+38,X'FFFF7F7F70443901000000000000803F0000004000004040000080400000A0400000C0400000E040', 1.79769313486231063271e+308,X'6666666666E62440AE47E17A14AEF33F3333333333B323C0007862A441A7C043'); // Query showing only [BLOB] placeholders for all actual BLOBs SELECT typeof(myTextArray), myText, myTextArray, myBool, myBoolArray, myUInt8, myUInt8Array FROM myTable; -- typeof(m- | | | | | | -- yTextArr- | | | | myBoolAr- | | myUInt8A- -- ay) | myText | myTextArray | myBool | ray | myUInt8 | rray -- --------- | --------------- | ------------------------------ | ------ | --------- | ------- | --------- -- text | This is text | "blue" "red" "orange" "yellow" | 0 | [Blob] | 255 | [Blob] -- blob | This is text2 | [Blob] | 0 | [Blob] | 255 | [Blob] // Same query showing full BLOB values(this program uses getBytes() internally when an actual BLOB is encountered) SELECT typeof(myTextArray), myText, myTextArray, myBool, myBoolArray, myUInt8, myUInt8Array FROM myTable; -- typeof(m- | | | | | | -- yTextArr- | | | | | | -- ay) | myText | myTextArray | myBool | myBoolArray | myUInt8 | myUInt8Array -- --------- | --------------- | ---------------------------------------------------------------- | ------ | ------------ | ------- | ------------------------ -- text | This is text | "blue" "red" "orange" "yellow" | 0 | 0x00010001 | 255 | 0xFFFEFDFCFBFAF9F8F7F6 -- blob | This is text2 | 0x22626C75652220227265642220226F72616E676522202279656C6C6F7722 | 0 | 0x00010001 | 255 | 0xFFFEFDFCFBFAF9F8F7F6 -- ------------------------------------------------------------------------------------------------ > > > On 2015-07-02 01:47 PM, William Drago wrote: >> All, >> >> Below is a .dump of the database I'm working with. I can use >> GetBytes() successfully on all the BLOB columns except myTextArray. >> On that column I get a System.InvalidCastException error. Can anyone >> tell me why? Thanks. >> >> -Bill >> >> >> ---.dump file--- >> >> PRAGMA foreign_keys=OFF; >> BEGIN TRANSACTION; >> CREATE TABLE myTable ( >> >> myText Text, >> >> myTextArray BLOB, --Text >> >> myBool Boolean, >> >> myBoolArray BLOB, --Boolean >> >> myUInt8 UInt8, >> >> myUInt8Array BLOB, --UInt8 >> >> myUInt16 UInt16, >> >> myUInt16Array BLOB, --UInt16 >> >> myInt16 Int16, >> >> myInt16Array BLOB, --Int16 >> >> myInt32 Int32, >> >> myInt32Array BLOB, --Int32 >> >> myInt64 Int64, >> >> myInt64Array BLOB, --Int64 >> >> myReal32 Real32, >> >> myReal32Array BLOB, --Real32 >> >> myReal64 Real64, >> >> myReal64Array BLOB --Real64 >> >> ); >> INSERT INTO "myTable" VALUES('This is text','"blue" "red" "orange" >> "yellow"',0,X'00010001',255,X'FFFEFDFCFBFAF9F8F7F6',65535,X'FFFFFEFFFDFFFCFFFBFFFAFFFAFFFBFFFCFFFDFF',32767,X'FF7F018001000200030004000500060007000000',2147483647,X'FFFFFF7F000000800000000001000000',9223372036854775807,X'FFFFFFFFFFFFFF7F000000000000008000000000000000000100000000000000',3.40282346638528897567e+38,X'FFFF7F7F70443901000000000000803F0000004000004040000080400000A0400000C0400000E040',1.79769313486231063271e+308,X'6666666666E62440AE47E17A14AEF33F3333333333B323C0007862A441A7C043'); >> >> >> COMMIT; >> >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users at mailinglists.sqlite.org >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > _______________________________________________ > sqlite-users mailing list > sqlite-users at mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users