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

Reply via email to