SQLite Android Bindings
Hex Artifact Content
Not logged in

Artifact 3a3b401ad99015f0d85f2f775db7756e9663a24c:


0000: 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20  /*. * Copyright 
0010: 28 43 29 20 32 30 30 39 20 54 68 65 20 41 6e 64  (C) 2009 The And
0020: 72 6f 69 64 20 4f 70 65 6e 20 53 6f 75 72 63 65  roid Open Source
0030: 20 50 72 6f 6a 65 63 74 0a 20 2a 0a 20 2a 20 4c   Project. *. * L
0040: 69 63 65 6e 73 65 64 20 75 6e 64 65 72 20 74 68  icensed under th
0050: 65 20 41 70 61 63 68 65 20 4c 69 63 65 6e 73 65  e Apache License
0060: 2c 20 56 65 72 73 69 6f 6e 20 32 2e 30 20 28 74  , Version 2.0 (t
0070: 68 65 20 22 4c 69 63 65 6e 73 65 22 29 3b 0a 20  he "License");. 
0080: 2a 20 79 6f 75 20 6d 61 79 20 6e 6f 74 20 75 73  * you may not us
0090: 65 20 74 68 69 73 20 66 69 6c 65 20 65 78 63 65  e this file exce
00a0: 70 74 20 69 6e 20 63 6f 6d 70 6c 69 61 6e 63 65  pt in compliance
00b0: 20 77 69 74 68 20 74 68 65 20 4c 69 63 65 6e 73   with the Licens
00c0: 65 2e 0a 20 2a 20 59 6f 75 20 6d 61 79 20 6f 62  e.. * You may ob
00d0: 74 61 69 6e 20 61 20 63 6f 70 79 20 6f 66 20 74  tain a copy of t
00e0: 68 65 20 4c 69 63 65 6e 73 65 20 61 74 0a 20 2a  he License at. *
00f0: 0a 20 2a 20 20 20 20 20 20 68 74 74 70 3a 2f 2f  . *      http://
0100: 77 77 77 2e 61 70 61 63 68 65 2e 6f 72 67 2f 6c  www.apache.org/l
0110: 69 63 65 6e 73 65 73 2f 4c 49 43 45 4e 53 45 2d  icenses/LICENSE-
0120: 32 2e 30 0a 20 2a 0a 20 2a 20 55 6e 6c 65 73 73  2.0. *. * Unless
0130: 20 72 65 71 75 69 72 65 64 20 62 79 20 61 70 70   required by app
0140: 6c 69 63 61 62 6c 65 20 6c 61 77 20 6f 72 20 61  licable law or a
0150: 67 72 65 65 64 20 74 6f 20 69 6e 20 77 72 69 74  greed to in writ
0160: 69 6e 67 2c 20 73 6f 66 74 77 61 72 65 0a 20 2a  ing, software. *
0170: 20 64 69 73 74 72 69 62 75 74 65 64 20 75 6e 64   distributed und
0180: 65 72 20 74 68 65 20 4c 69 63 65 6e 73 65 20 69  er the License i
0190: 73 20 64 69 73 74 72 69 62 75 74 65 64 20 6f 6e  s distributed on
01a0: 20 61 6e 20 22 41 53 20 49 53 22 20 42 41 53 49   an "AS IS" BASI
01b0: 53 2c 0a 20 2a 20 57 49 54 48 4f 55 54 20 57 41  S,. * WITHOUT WA
01c0: 52 52 41 4e 54 49 45 53 20 4f 52 20 43 4f 4e 44  RRANTIES OR COND
01d0: 49 54 49 4f 4e 53 20 4f 46 20 41 4e 59 20 4b 49  ITIONS OF ANY KI
01e0: 4e 44 2c 20 65 69 74 68 65 72 20 65 78 70 72 65  ND, either expre
01f0: 73 73 20 6f 72 20 69 6d 70 6c 69 65 64 2e 0a 20  ss or implied.. 
0200: 2a 20 53 65 65 20 74 68 65 20 4c 69 63 65 6e 73  * See the Licens
0210: 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  e for the specif
0220: 69 63 20 6c 61 6e 67 75 61 67 65 20 67 6f 76 65  ic language gove
0230: 72 6e 69 6e 67 20 70 65 72 6d 69 73 73 69 6f 6e  rning permission
0240: 73 20 61 6e 64 0a 20 2a 20 6c 69 6d 69 74 61 74  s and. * limitat
0250: 69 6f 6e 73 20 75 6e 64 65 72 20 74 68 65 20 4c  ions under the L
0260: 69 63 65 6e 73 65 2e 0a 20 2a 2f 0a 0a 70 61 63  icense.. */..pac
0270: 6b 61 67 65 20 6f 72 67 2e 73 71 6c 69 74 65 2e  kage org.sqlite.
0280: 64 61 74 61 62 61 73 65 2e 73 71 6c 69 74 65 5f  database.sqlite_
0290: 63 74 73 3b 0a 0a 0a 69 6d 70 6f 72 74 20 61 6e  cts;...import an
02a0: 64 72 6f 69 64 2e 63 6f 6e 74 65 6e 74 2e 43 6f  droid.content.Co
02b0: 6e 74 65 78 74 3b 0a 69 6d 70 6f 72 74 20 61 6e  ntext;.import an
02c0: 64 72 6f 69 64 2e 64 61 74 61 62 61 73 65 2e 43  droid.database.C
02d0: 75 72 73 6f 72 3b 0a 69 6d 70 6f 72 74 20 6f 72  ursor;.import or
02e0: 67 2e 73 71 6c 69 74 65 2e 64 61 74 61 62 61 73  g.sqlite.databas
02f0: 65 2e 73 71 6c 69 74 65 2e 53 51 4c 69 74 65 44  e.sqlite.SQLiteD
0300: 61 74 61 62 61 73 65 3b 0a 69 6d 70 6f 72 74 20  atabase;.import 
0310: 6f 72 67 2e 73 71 6c 69 74 65 2e 64 61 74 61 62  org.sqlite.datab
0320: 61 73 65 2e 73 71 6c 69 74 65 2e 53 51 4c 69 74  ase.sqlite.SQLit
0330: 65 44 6f 6e 65 45 78 63 65 70 74 69 6f 6e 3b 0a  eDoneException;.
0340: 69 6d 70 6f 72 74 20 6f 72 67 2e 73 71 6c 69 74  import org.sqlit
0350: 65 2e 64 61 74 61 62 61 73 65 2e 73 71 6c 69 74  e.database.sqlit
0360: 65 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  e.SQLiteExceptio
0370: 6e 3b 0a 69 6d 70 6f 72 74 20 6f 72 67 2e 73 71  n;.import org.sq
0380: 6c 69 74 65 2e 64 61 74 61 62 61 73 65 2e 73 71  lite.database.sq
0390: 6c 69 74 65 2e 53 51 4c 69 74 65 51 75 65 72 79  lite.SQLiteQuery
03a0: 3b 0a 69 6d 70 6f 72 74 20 6f 72 67 2e 73 71 6c  ;.import org.sql
03b0: 69 74 65 2e 64 61 74 61 62 61 73 65 2e 73 71 6c  ite.database.sql
03c0: 69 74 65 2e 53 51 4c 69 74 65 53 74 61 74 65 6d  ite.SQLiteStatem
03d0: 65 6e 74 3b 0a 69 6d 70 6f 72 74 20 61 6e 64 72  ent;.import andr
03e0: 6f 69 64 2e 74 65 73 74 2e 41 6e 64 72 6f 69 64  oid.test.Android
03f0: 54 65 73 74 43 61 73 65 3b 0a 69 6d 70 6f 72 74  TestCase;.import
0400: 20 61 6e 64 72 6f 69 64 2e 74 65 73 74 2e 4d 6f   android.test.Mo
0410: 72 65 41 73 73 65 72 74 73 3b 0a 0a 69 6d 70 6f  reAsserts;..impo
0420: 72 74 20 6a 61 76 61 2e 69 6f 2e 46 69 6c 65 3b  rt java.io.File;
0430: 0a 0a 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53  ..public class S
0440: 51 4c 69 74 65 50 72 6f 67 72 61 6d 54 65 73 74  QLiteProgramTest
0450: 20 65 78 74 65 6e 64 73 20 41 6e 64 72 6f 69 64   extends Android
0460: 54 65 73 74 43 61 73 65 20 7b 0a 20 20 20 20 70  TestCase {.    p
0470: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 66 69  rivate static fi
0480: 6e 61 6c 20 53 74 72 69 6e 67 20 44 41 54 41 42  nal String DATAB
0490: 41 53 45 5f 4e 41 4d 45 20 3d 20 22 64 61 74 61  ASE_NAME = "data
04a0: 62 61 73 65 5f 74 65 73 74 2e 64 62 22 3b 0a 0a  base_test.db";..
04b0: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
04c0: 74 65 44 61 74 61 62 61 73 65 20 6d 44 61 74 61  teDatabase mData
04d0: 62 61 73 65 3b 0a 0a 20 20 20 20 40 4f 76 65 72  base;..    @Over
04e0: 72 69 64 65 0a 20 20 20 20 70 72 6f 74 65 63 74  ride.    protect
04f0: 65 64 20 76 6f 69 64 20 73 65 74 55 70 28 29 20  ed void setUp() 
0500: 74 68 72 6f 77 73 20 45 78 63 65 70 74 69 6f 6e  throws Exception
0510: 20 7b 0a 20 20 20 20 20 20 20 20 73 75 70 65 72   {.        super
0520: 2e 73 65 74 55 70 28 29 3b 0a 20 20 20 20 20 20  .setUp();.      
0530: 20 20 53 79 73 74 65 6d 2e 6c 6f 61 64 4c 69 62    System.loadLib
0540: 72 61 72 79 28 22 73 71 6c 69 74 65 58 22 29 3b  rary("sqliteX");
0550: 0a 20 20 20 20 20 20 20 20 46 69 6c 65 20 66 20  .        File f 
0560: 3d 20 6d 43 6f 6e 74 65 78 74 2e 67 65 74 44 61  = mContext.getDa
0570: 74 61 62 61 73 65 50 61 74 68 28 44 41 54 41 42  tabasePath(DATAB
0580: 41 53 45 5f 4e 41 4d 45 29 3b 0a 20 20 20 20 20  ASE_NAME);.     
0590: 20 20 20 66 2e 6d 6b 64 69 72 73 28 29 3b 0a 20     f.mkdirs();. 
05a0: 20 20 20 20 20 20 20 69 66 20 28 66 2e 65 78 69         if (f.exi
05b0: 73 74 73 28 29 29 20 7b 20 66 2e 64 65 6c 65 74  sts()) { f.delet
05c0: 65 28 29 3b 20 7d 0a 20 20 20 20 20 20 20 20 6d  e(); }.        m
05d0: 44 61 74 61 62 61 73 65 20 3d 20 53 51 4c 69 74  Database = SQLit
05e0: 65 44 61 74 61 62 61 73 65 2e 6f 70 65 6e 4f 72  eDatabase.openOr
05f0: 43 72 65 61 74 65 44 61 74 61 62 61 73 65 28 66  CreateDatabase(f
0600: 2c 6e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  ,null);.        
0610: 61 73 73 65 72 74 4e 6f 74 4e 75 6c 6c 28 6d 44  assertNotNull(mD
0620: 61 74 61 62 61 73 65 29 3b 0a 20 20 20 20 7d 0a  atabase);.    }.
0630: 0a 20 20 20 20 40 4f 76 65 72 72 69 64 65 0a 20  .    @Override. 
0640: 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 6f 69     protected voi
0650: 64 20 74 65 61 72 44 6f 77 6e 28 29 20 74 68 72  d tearDown() thr
0660: 6f 77 73 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a  ows Exception {.
0670: 20 20 20 20 20 20 20 20 6d 44 61 74 61 62 61 73          mDatabas
0680: 65 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20  e.close();.     
0690: 20 20 20 67 65 74 43 6f 6e 74 65 78 74 28 29 2e     getContext().
06a0: 64 65 6c 65 74 65 44 61 74 61 62 61 73 65 28 44  deleteDatabase(D
06b0: 41 54 41 42 41 53 45 5f 4e 41 4d 45 29 3b 0a 0a  ATABASE_NAME);..
06c0: 20 20 20 20 20 20 20 20 73 75 70 65 72 2e 74 65          super.te
06d0: 61 72 44 6f 77 6e 28 29 3b 0a 20 20 20 20 7d 0a  arDown();.    }.
06e0: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64  .    public void
06f0: 20 74 65 73 74 42 69 6e 64 28 29 20 7b 0a 20 20   testBind() {.  
0700: 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e        mDatabase.
0710: 65 78 65 63 53 51 4c 28 22 43 52 45 41 54 45 20  execSQL("CREATE 
0720: 54 41 42 4c 45 20 74 65 73 74 20 28 5f 69 64 20  TABLE test (_id 
0730: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
0740: 4b 45 59 2c 20 74 65 78 74 31 20 54 45 58 54 2c  KEY, text1 TEXT,
0750: 20 74 65 78 74 32 20 54 45 58 54 2c 20 22 20 2b   text2 TEXT, " +
0760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0770: 20 22 6e 75 6d 31 20 49 4e 54 45 47 45 52 2c 20   "num1 INTEGER, 
0780: 6e 75 6d 32 20 49 4e 54 45 47 45 52 2c 20 69 6d  num2 INTEGER, im
0790: 61 67 65 20 42 4c 4f 42 29 3b 22 29 3b 0a 20 20  age BLOB);");.  
07a0: 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e        mDatabase.
07b0: 65 78 65 63 53 51 4c 28 22 49 4e 53 45 52 54 20  execSQL("INSERT 
07c0: 49 4e 54 4f 20 74 65 73 74 20 28 74 65 78 74 31  INTO test (text1
07d0: 2c 20 74 65 78 74 32 2c 20 6e 75 6d 31 2c 20 6e  , text2, num1, n
07e0: 75 6d 32 2c 20 69 6d 61 67 65 29 20 22 20 2b 0a  um2, image) " +.
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0800: 22 56 41 4c 55 45 53 20 28 27 4d 69 6b 65 27 2c  "VALUES ('Mike',
0810: 20 27 4a 61 63 6b 27 2c 20 31 32 2c 20 33 30 2c   'Jack', 12, 30,
0820: 20 27 61 62 63 64 65 66 67 27 29 3b 22 29 3b 0a   'abcdefg');");.
0830: 20 20 20 20 20 20 20 20 6d 44 61 74 61 62 61 73          mDatabas
0840: 65 2e 65 78 65 63 53 51 4c 28 22 49 4e 53 45 52  e.execSQL("INSER
0850: 54 20 49 4e 54 4f 20 74 65 73 74 20 28 74 65 78  T INTO test (tex
0860: 74 31 2c 20 74 65 78 74 32 2c 20 6e 75 6d 31 2c  t1, text2, num1,
0870: 20 6e 75 6d 32 2c 20 69 6d 61 67 65 29 20 22 20   num2, image) " 
0880: 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
0890: 20 20 22 56 41 4c 55 45 53 20 28 27 74 65 73 74    "VALUES ('test
08a0: 31 27 2c 20 27 74 65 73 74 32 27 2c 20 32 31 33  1', 'test2', 213
08b0: 2c 20 35 38 39 2c 20 27 31 32 33 34 35 36 37 38  , 589, '12345678
08c0: 39 27 29 3b 22 29 3b 0a 20 20 20 20 20 20 20 20  9');");.        
08d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
08e0: 73 74 61 74 65 6d 65 6e 74 3b 0a 0a 20 20 20 20  statement;..    
08f0: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 20 3d 20      statement = 
0900: 6d 44 61 74 61 62 61 73 65 2e 63 6f 6d 70 69 6c  mDatabase.compil
0910: 65 53 74 61 74 65 6d 65 6e 74 28 22 53 45 4c 45  eStatement("SELE
0920: 43 54 20 6e 75 6d 31 20 46 52 4f 4d 20 74 65 73  CT num1 FROM tes
0930: 74 20 57 48 45 52 45 20 6e 75 6d 32 20 3d 20 3f  t WHERE num2 = ?
0940: 3b 22 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61  ;");.        sta
0950: 74 65 6d 65 6e 74 2e 62 69 6e 64 4c 6f 6e 67 28  tement.bindLong(
0960: 31 2c 20 33 30 29 3b 0a 20 20 20 20 20 20 20 20  1, 30);.        
0970: 61 73 73 65 72 74 45 71 75 61 6c 73 28 31 32 2c  assertEquals(12,
0980: 20 73 74 61 74 65 6d 65 6e 74 2e 73 69 6d 70 6c   statement.simpl
0990: 65 51 75 65 72 79 46 6f 72 4c 6f 6e 67 28 29 29  eQueryForLong())
09a0: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 72 65  ;..        // re
09b0: 2d 62 69 6e 64 20 77 69 74 68 6f 75 74 20 63 6c  -bind without cl
09c0: 65 61 72 69 6e 67 0a 20 20 20 20 20 20 20 20 73  earing.        s
09d0: 74 61 74 65 6d 65 6e 74 2e 62 69 6e 64 44 6f 75  tatement.bindDou
09e0: 62 6c 65 28 31 2c 20 35 38 39 2e 30 29 3b 0a 20  ble(1, 589.0);. 
09f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75         assertEqu
0a00: 61 6c 73 28 32 31 33 2c 20 73 74 61 74 65 6d 65  als(213, stateme
0a10: 6e 74 2e 73 69 6d 70 6c 65 51 75 65 72 79 46 6f  nt.simpleQueryFo
0a20: 72 4c 6f 6e 67 28 29 29 3b 0a 20 20 20 20 20 20  rLong());.      
0a30: 20 20 73 74 61 74 65 6d 65 6e 74 2e 63 6c 6f 73    statement.clos
0a40: 65 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 73 74  e();..        st
0a50: 61 74 65 6d 65 6e 74 20 3d 20 6d 44 61 74 61 62  atement = mDatab
0a60: 61 73 65 2e 63 6f 6d 70 69 6c 65 53 74 61 74 65  ase.compileState
0a70: 6d 65 6e 74 28 22 53 45 4c 45 43 54 20 74 65 78  ment("SELECT tex
0a80: 74 31 20 46 52 4f 4d 20 74 65 73 74 20 57 48 45  t1 FROM test WHE
0a90: 52 45 20 74 65 78 74 32 20 3d 20 3f 3b 22 29 3b  RE text2 = ?;");
0aa0: 0a 0a 20 20 20 20 20 20 20 20 73 74 61 74 65 6d  ..        statem
0ab0: 65 6e 74 2e 62 69 6e 64 44 6f 75 62 6c 65 28 31  ent.bindDouble(1
0ac0: 2c 20 35 38 39 2e 30 29 3b 20 2f 2f 20 57 72 6f  , 589.0); // Wro
0ad0: 6e 67 20 62 69 6e 64 69 6e 67 0a 20 20 20 20 20  ng binding.     
0ae0: 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20     try {.       
0af0: 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2e 73       statement.s
0b00: 69 6d 70 6c 65 51 75 65 72 79 46 6f 72 53 74 72  impleQueryForStr
0b10: 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20  ing();.         
0b20: 20 20 20 66 61 69 6c 28 22 53 68 6f 75 6c 64 20     fail("Should 
0b30: 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 20  throw exception 
0b40: 28 6e 6f 20 72 6f 77 73 20 66 6f 75 6e 64 29 22  (no rows found)"
0b50: 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 63 61 74  );.        } cat
0b60: 63 68 20 28 53 51 4c 69 74 65 44 6f 6e 65 45 78  ch (SQLiteDoneEx
0b70: 63 65 70 74 69 6f 6e 20 65 78 70 65 63 74 65 64  ception expected
0b80: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
0b90: 2f 2f 20 65 78 70 65 63 74 65 64 0a 20 20 20 20  // expected.    
0ba0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 74      }.        st
0bb0: 61 74 65 6d 65 6e 74 2e 62 69 6e 64 53 74 72 69  atement.bindStri
0bc0: 6e 67 28 31 2c 20 22 74 65 73 74 32 22 29 3b 0a  ng(1, "test2");.
0bd0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45 71          assertEq
0be0: 75 61 6c 73 28 22 74 65 73 74 31 22 2c 20 73 74  uals("test1", st
0bf0: 61 74 65 6d 65 6e 74 2e 73 69 6d 70 6c 65 51 75  atement.simpleQu
0c00: 65 72 79 46 6f 72 53 74 72 69 6e 67 28 29 29 3b  eryForString());
0c10: 0a 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65  .        stateme
0c20: 6e 74 2e 63 6c 65 61 72 42 69 6e 64 69 6e 67 73  nt.clearBindings
0c30: 28 29 3b 0a 20 20 20 20 20 20 20 20 74 72 79 20  ();.        try 
0c40: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  {.            st
0c50: 61 74 65 6d 65 6e 74 2e 73 69 6d 70 6c 65 51 75  atement.simpleQu
0c60: 65 72 79 46 6f 72 53 74 72 69 6e 67 28 29 3b 0a  eryForString();.
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c              fail
0c80: 28 22 53 68 6f 75 6c 64 20 74 68 72 6f 77 20 65  ("Should throw e
0c90: 78 63 65 70 74 69 6f 6e 20 28 75 6e 62 6f 75 6e  xception (unboun
0ca0: 64 20 76 61 6c 75 65 29 22 29 3b 0a 20 20 20 20  d value)");.    
0cb0: 20 20 20 20 7d 20 63 61 74 63 68 20 28 53 51 4c      } catch (SQL
0cc0: 69 74 65 44 6f 6e 65 45 78 63 65 70 74 69 6f 6e  iteDoneException
0cd0: 20 65 78 70 65 63 74 65 64 29 20 7b 0a 20 20 20   expected) {.   
0ce0: 20 20 20 20 20 20 20 20 20 2f 2f 20 65 78 70 65           // expe
0cf0: 63 74 65 64 0a 20 20 20 20 20 20 20 20 7d 0a 20  cted.        }. 
0d00: 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
0d10: 2e 63 6c 6f 73 65 28 29 3b 0a 0a 20 20 20 20 20  .close();..     
0d20: 20 20 20 43 75 72 73 6f 72 20 63 75 72 73 6f 72     Cursor cursor
0d30: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20   = null;.       
0d40: 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20 20   try {.         
0d50: 20 20 20 63 75 72 73 6f 72 20 3d 20 6d 44 61 74     cursor = mDat
0d60: 61 62 61 73 65 2e 71 75 65 72 79 28 22 74 65 73  abase.query("tes
0d70: 74 22 2c 20 6e 65 77 20 53 74 72 69 6e 67 5b 5d  t", new String[]
0d80: 7b 22 74 65 78 74 31 22 7d 2c 20 22 77 68 65 72  {"text1"}, "wher
0d90: 65 20 74 65 78 74 31 3d 27 61 27 22 2c 0a 20 20  e text1='a'",.  
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0db0: 20 20 6e 65 77 20 53 74 72 69 6e 67 5b 5d 7b 22    new String[]{"
0dc0: 66 6f 6f 22 7d 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  foo"}, null, nul
0dd0: 6c 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  l, null);.      
0de0: 20 20 20 20 20 20 66 61 69 6c 28 22 53 68 6f 75        fail("Shou
0df0: 6c 64 20 74 68 72 6f 77 20 65 78 63 65 70 74 69  ld throw excepti
0e00: 6f 6e 20 28 6e 6f 20 76 61 6c 75 65 20 74 6f 20  on (no value to 
0e10: 62 69 6e 64 29 22 29 3b 0a 20 20 20 20 20 20 20  bind)");.       
0e20: 20 7d 20 63 61 74 63 68 20 28 53 51 4c 69 74 65   } catch (SQLite
0e30: 45 78 63 65 70 74 69 6f 6e 20 65 78 70 65 63 74  Exception expect
0e40: 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ed) {.          
0e50: 20 20 2f 2f 20 65 78 70 65 63 74 65 64 0a 20 20    // expected.  
0e60: 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20        } finally 
0e70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
0e80: 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75 6c 6c   (cursor != null
0e90: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
0ea0: 20 20 20 20 63 75 72 73 6f 72 2e 63 6c 6f 73 65      cursor.close
0eb0: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
0ec0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
0ed0: 20 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20      try {.      
0ee0: 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d 20 6d        cursor = m
0ef0: 44 61 74 61 62 61 73 65 2e 71 75 65 72 79 28 22  Database.query("
0f00: 74 65 73 74 22 2c 20 6e 65 77 20 53 74 72 69 6e  test", new Strin
0f10: 67 5b 5d 7b 22 74 65 78 74 31 22 7d 2c 20 22 77  g[]{"text1"}, "w
0f20: 68 65 72 65 20 74 65 78 74 31 3d 27 61 27 22 2c  here text1='a'",
0f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f40: 20 20 20 20 20 6e 65 77 20 53 74 72 69 6e 67 5b       new String[
0f50: 5d 7b 22 66 6f 6f 22 2c 20 22 62 61 72 22 7d 2c  ]{"foo", "bar"},
0f60: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
0f70: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l);.            
0f80: 66 61 69 6c 28 22 53 68 6f 75 6c 64 20 74 68 72  fail("Should thr
0f90: 6f 77 20 65 78 63 65 70 74 69 6f 6e 20 28 69 6e  ow exception (in
0fa0: 64 65 78 20 74 6f 6f 20 6c 61 72 67 65 29 22 29  dex too large)")
0fb0: 3b 0a 20 20 20 20 20 20 20 20 7d 20 63 61 74 63  ;.        } catc
0fc0: 68 20 28 53 51 4c 69 74 65 45 78 63 65 70 74 69  h (SQLiteExcepti
0fd0: 6f 6e 20 65 78 70 65 63 74 65 64 29 20 7b 0a 20  on expected) {. 
0fe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 65 78             // ex
0ff0: 70 65 63 74 65 64 0a 20 20 20 20 20 20 20 20 7d  pected.        }
1000: 20 66 69 6e 61 6c 6c 79 20 7b 0a 20 20 20 20 20   finally {.     
1010: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 73 6f         if (curso
1020: 72 20 21 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20  r != null) {.   
1030: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
1040: 73 6f 72 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20  sor.close();.   
1050: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1060: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2f 20     }.        // 
1070: 74 65 73 74 20 70 6f 73 69 74 69 76 65 20 63 61  test positive ca
1080: 73 65 0a 20 20 20 20 20 20 20 20 73 74 61 74 65  se.        state
1090: 6d 65 6e 74 20 3d 20 6d 44 61 74 61 62 61 73 65  ment = mDatabase
10a0: 2e 63 6f 6d 70 69 6c 65 53 74 61 74 65 6d 65 6e  .compileStatemen
10b0: 74 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t(.             
10c0: 20 20 20 22 53 45 4c 45 43 54 20 74 65 78 74 31     "SELECT text1
10d0: 20 46 52 4f 4d 20 74 65 73 74 20 57 48 45 52 45   FROM test WHERE
10e0: 20 74 65 78 74 32 20 3d 20 3f 20 41 4e 44 20 6e   text2 = ? AND n
10f0: 75 6d 32 20 3d 20 3f 3b 22 29 3b 0a 20 20 20 20  um2 = ?;");.    
1100: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2e 62 69      statement.bi
1110: 6e 64 53 74 72 69 6e 67 28 31 2c 20 22 4a 61 63  ndString(1, "Jac
1120: 6b 22 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61  k");.        sta
1130: 74 65 6d 65 6e 74 2e 62 69 6e 64 4c 6f 6e 67 28  tement.bindLong(
1140: 32 2c 20 33 30 29 3b 0a 20 20 20 20 20 20 20 20  2, 30);.        
1150: 61 73 73 65 72 74 45 71 75 61 6c 73 28 22 4d 69  assertEquals("Mi
1160: 6b 65 22 2c 20 73 74 61 74 65 6d 65 6e 74 2e 73  ke", statement.s
1170: 69 6d 70 6c 65 51 75 65 72 79 46 6f 72 53 74 72  impleQueryForStr
1180: 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ing());.        
1190: 73 74 61 74 65 6d 65 6e 74 2e 63 6c 6f 73 65 28  statement.close(
11a0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75  );.    }..    pu
11b0: 62 6c 69 63 20 76 6f 69 64 20 74 65 73 74 42 69  blic void testBi
11c0: 6e 64 4e 75 6c 6c 28 29 20 7b 0a 20 20 20 20 20  ndNull() {.     
11d0: 20 20 20 6d 44 61 74 61 62 61 73 65 2e 65 78 65     mDatabase.exe
11e0: 63 53 51 4c 28 22 43 52 45 41 54 45 20 54 41 42  cSQL("CREATE TAB
11f0: 4c 45 20 74 65 73 74 20 28 5f 69 64 20 49 4e 54  LE test (_id INT
1200: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1210: 2c 20 74 65 78 74 31 20 54 45 58 54 2c 20 74 65  , text1 TEXT, te
1220: 78 74 32 20 54 45 58 54 2c 20 22 20 2b 0a 20 20  xt2 TEXT, " +.  
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
1240: 75 6d 31 20 49 4e 54 45 47 45 52 2c 20 6e 75 6d  um1 INTEGER, num
1250: 32 20 49 4e 54 45 47 45 52 2c 20 69 6d 61 67 65  2 INTEGER, image
1260: 20 42 4c 4f 42 29 3b 22 29 3b 0a 0a 20 20 20 20   BLOB);");..    
1270: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
1280: 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 3d 20  ent statement = 
1290: 6d 44 61 74 61 62 61 73 65 2e 63 6f 6d 70 69 6c  mDatabase.compil
12a0: 65 53 74 61 74 65 6d 65 6e 74 28 22 49 4e 53 45  eStatement("INSE
12b0: 52 54 20 49 4e 54 4f 20 74 65 73 74 20 22 20 2b  RT INTO test " +
12c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d0: 20 22 28 74 65 78 74 31 2c 74 65 78 74 32 2c 6e   "(text1,text2,n
12e0: 75 6d 31 2c 69 6d 61 67 65 29 20 56 41 4c 55 45  um1,image) VALUE
12f0: 53 20 28 3f 2c 3f 2c 3f 2c 3f 29 22 29 3b 0a 20  S (?,?,?,?)");. 
1300: 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1310: 2e 62 69 6e 64 53 74 72 69 6e 67 28 31 2c 20 22  .bindString(1, "
1320: 73 74 72 69 6e 67 31 22 29 3b 0a 20 20 20 20 20  string1");.     
1330: 20 20 20 73 74 61 74 65 6d 65 6e 74 2e 62 69 6e     statement.bin
1340: 64 53 74 72 69 6e 67 28 32 2c 20 22 73 74 72 69  dString(2, "stri
1350: 6e 67 32 22 29 3b 0a 20 20 20 20 20 20 20 20 73  ng2");.        s
1360: 74 61 74 65 6d 65 6e 74 2e 62 69 6e 64 4c 6f 6e  tatement.bindLon
1370: 67 28 33 2c 20 31 30 30 29 3b 0a 20 20 20 20 20  g(3, 100);.     
1380: 20 20 20 73 74 61 74 65 6d 65 6e 74 2e 62 69 6e     statement.bin
1390: 64 4e 75 6c 6c 28 34 29 3b 0a 20 20 20 20 20 20  dNull(4);.      
13a0: 20 20 73 74 61 74 65 6d 65 6e 74 2e 65 78 65 63    statement.exec
13b0: 75 74 65 28 29 3b 0a 20 20 20 20 20 20 20 20 73  ute();.        s
13c0: 74 61 74 65 6d 65 6e 74 2e 63 6c 6f 73 65 28 29  tatement.close()
13d0: 3b 0a 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  ;..        final
13e0: 20 69 6e 74 20 43 4f 4c 55 4d 4e 5f 54 45 58 54   int COLUMN_TEXT
13f0: 31 5f 49 4e 44 45 58 20 3d 20 30 3b 0a 20 20 20  1_INDEX = 0;.   
1400: 20 20 20 20 20 66 69 6e 61 6c 20 69 6e 74 20 43       final int C
1410: 4f 4c 55 4d 4e 5f 54 45 58 54 32 5f 49 4e 44 45  OLUMN_TEXT2_INDE
1420: 58 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 66  X = 1;.        f
1430: 69 6e 61 6c 20 69 6e 74 20 43 4f 4c 55 4d 4e 5f  inal int COLUMN_
1440: 4e 55 4d 31 5f 49 4e 44 45 58 20 3d 20 32 3b 0a  NUM1_INDEX = 2;.
1450: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 20 69 6e          final in
1460: 74 20 43 4f 4c 55 4d 4e 5f 49 4d 41 47 45 5f 49  t COLUMN_IMAGE_I
1470: 4e 44 45 58 20 3d 20 33 3b 0a 0a 20 20 20 20 20  NDEX = 3;..     
1480: 20 20 20 43 75 72 73 6f 72 20 63 75 72 73 6f 72     Cursor cursor
1490: 20 3d 20 6d 44 61 74 61 62 61 73 65 2e 71 75 65   = mDatabase.que
14a0: 72 79 28 22 74 65 73 74 22 2c 20 6e 65 77 20 53  ry("test", new S
14b0: 74 72 69 6e 67 5b 5d 20 7b 20 22 74 65 78 74 31  tring[] { "text1
14c0: 22 2c 20 22 74 65 78 74 32 22 2c 20 22 6e 75 6d  ", "text2", "num
14d0: 31 22 2c 20 22 69 6d 61 67 65 22 20 7d 2c 0a 20  1", "image" },. 
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
14f0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ull, null, null,
1500: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 29 3b 0a 20 20   null, null);.  
1510: 20 20 20 20 20 20 61 73 73 65 72 74 4e 6f 74 4e        assertNotN
1520: 75 6c 6c 28 63 75 72 73 6f 72 29 3b 0a 20 20 20  ull(cursor);.   
1530: 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c       assertEqual
1540: 73 28 31 2c 20 63 75 72 73 6f 72 2e 67 65 74 43  s(1, cursor.getC
1550: 6f 75 6e 74 28 29 29 3b 0a 20 20 20 20 20 20 20  ount());.       
1560: 20 63 75 72 73 6f 72 2e 6d 6f 76 65 54 6f 46 69   cursor.moveToFi
1570: 72 73 74 28 29 3b 0a 20 20 20 20 20 20 20 20 61  rst();.        a
1580: 73 73 65 72 74 45 71 75 61 6c 73 28 22 73 74 72  ssertEquals("str
1590: 69 6e 67 31 22 2c 20 63 75 72 73 6f 72 2e 67 65  ing1", cursor.ge
15a0: 74 53 74 72 69 6e 67 28 43 4f 4c 55 4d 4e 5f 54  tString(COLUMN_T
15b0: 45 58 54 31 5f 49 4e 44 45 58 29 29 3b 0a 20 20  EXT1_INDEX));.  
15c0: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
15d0: 6c 73 28 22 73 74 72 69 6e 67 32 22 2c 20 63 75  ls("string2", cu
15e0: 72 73 6f 72 2e 67 65 74 53 74 72 69 6e 67 28 43  rsor.getString(C
15f0: 4f 4c 55 4d 4e 5f 54 45 58 54 32 5f 49 4e 44 45  OLUMN_TEXT2_INDE
1600: 58 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  X));.        ass
1610: 65 72 74 45 71 75 61 6c 73 28 31 30 30 2c 20 63  ertEquals(100, c
1620: 75 72 73 6f 72 2e 67 65 74 49 6e 74 28 43 4f 4c  ursor.getInt(COL
1630: 55 4d 4e 5f 4e 55 4d 31 5f 49 4e 44 45 58 29 29  UMN_NUM1_INDEX))
1640: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1650: 4e 75 6c 6c 28 63 75 72 73 6f 72 2e 67 65 74 53  Null(cursor.getS
1660: 74 72 69 6e 67 28 43 4f 4c 55 4d 4e 5f 49 4d 41  tring(COLUMN_IMA
1670: 47 45 5f 49 4e 44 45 58 29 29 3b 0a 20 20 20 20  GE_INDEX));.    
1680: 20 20 20 20 63 75 72 73 6f 72 2e 63 6c 6f 73 65      cursor.close
1690: 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ();.    }..    p
16a0: 75 62 6c 69 63 20 76 6f 69 64 20 74 65 73 74 42  ublic void testB
16b0: 69 6e 64 42 6c 6f 62 28 29 20 7b 0a 20 20 20 20  indBlob() {.    
16c0: 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e 65 78      mDatabase.ex
16d0: 65 63 53 51 4c 28 22 43 52 45 41 54 45 20 54 41  ecSQL("CREATE TA
16e0: 42 4c 45 20 74 65 73 74 20 28 5f 69 64 20 49 4e  BLE test (_id IN
16f0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1700: 59 2c 20 74 65 78 74 31 20 54 45 58 54 2c 20 74  Y, text1 TEXT, t
1710: 65 78 74 32 20 54 45 58 54 2c 20 22 20 2b 0a 20  ext2 TEXT, " +. 
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1730: 6e 75 6d 31 20 49 4e 54 45 47 45 52 2c 20 6e 75  num1 INTEGER, nu
1740: 6d 32 20 49 4e 54 45 47 45 52 2c 20 69 6d 61 67  m2 INTEGER, imag
1750: 65 20 42 4c 4f 42 29 3b 22 29 3b 0a 0a 20 20 20  e BLOB);");..   
1760: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
1770: 6d 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 3d  ment statement =
1780: 20 6d 44 61 74 61 62 61 73 65 2e 63 6f 6d 70 69   mDatabase.compi
1790: 6c 65 53 74 61 74 65 6d 65 6e 74 28 22 49 4e 53  leStatement("INS
17a0: 45 52 54 20 49 4e 54 4f 20 74 65 73 74 20 22 20  ERT INTO test " 
17b0: 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
17c0: 20 20 22 28 74 65 78 74 31 2c 74 65 78 74 32 2c    "(text1,text2,
17d0: 6e 75 6d 31 2c 69 6d 61 67 65 29 20 56 41 4c 55  num1,image) VALU
17e0: 45 53 20 28 3f 2c 3f 2c 3f 2c 3f 29 22 29 3b 0a  ES (?,?,?,?)");.
17f0: 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1800: 74 2e 62 69 6e 64 53 74 72 69 6e 67 28 31 2c 20  t.bindString(1, 
1810: 22 73 74 72 69 6e 67 31 22 29 3b 0a 20 20 20 20  "string1");.    
1820: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2e 62 69      statement.bi
1830: 6e 64 53 74 72 69 6e 67 28 32 2c 20 22 73 74 72  ndString(2, "str
1840: 69 6e 67 32 22 29 3b 0a 20 20 20 20 20 20 20 20  ing2");.        
1850: 73 74 61 74 65 6d 65 6e 74 2e 62 69 6e 64 4c 6f  statement.bindLo
1860: 6e 67 28 33 2c 20 31 30 30 29 3b 0a 20 20 20 20  ng(3, 100);.    
1870: 20 20 20 20 62 79 74 65 5b 5d 20 62 6c 6f 62 20      byte[] blob 
1880: 3d 20 6e 65 77 20 62 79 74 65 5b 5d 20 7b 20 27  = new byte[] { '
1890: 31 27 2c 20 27 32 27 2c 20 27 33 27 20 7d 3b 0a  1', '2', '3' };.
18a0: 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
18b0: 74 2e 62 69 6e 64 42 6c 6f 62 28 34 2c 20 62 6c  t.bindBlob(4, bl
18c0: 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61  ob);.        sta
18d0: 74 65 6d 65 6e 74 2e 65 78 65 63 75 74 65 28 29  tement.execute()
18e0: 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 65 6d  ;.        statem
18f0: 65 6e 74 2e 63 6c 6f 73 65 28 29 3b 0a 0a 20 20  ent.close();..  
1900: 20 20 20 20 20 20 66 69 6e 61 6c 20 69 6e 74 20        final int 
1910: 43 4f 4c 55 4d 4e 5f 54 45 58 54 31 5f 49 4e 44  COLUMN_TEXT1_IND
1920: 45 58 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  EX = 0;.        
1930: 66 69 6e 61 6c 20 69 6e 74 20 43 4f 4c 55 4d 4e  final int COLUMN
1940: 5f 54 45 58 54 32 5f 49 4e 44 45 58 20 3d 20 31  _TEXT2_INDEX = 1
1950: 3b 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 20  ;.        final 
1960: 69 6e 74 20 43 4f 4c 55 4d 4e 5f 4e 55 4d 31 5f  int COLUMN_NUM1_
1970: 49 4e 44 45 58 20 3d 20 32 3b 0a 20 20 20 20 20  INDEX = 2;.     
1980: 20 20 20 66 69 6e 61 6c 20 69 6e 74 20 43 4f 4c     final int COL
1990: 55 4d 4e 5f 49 4d 41 47 45 5f 49 4e 44 45 58 20  UMN_IMAGE_INDEX 
19a0: 3d 20 33 3b 0a 0a 20 20 20 20 20 20 20 20 43 75  = 3;..        Cu
19b0: 72 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 6d 44  rsor cursor = mD
19c0: 61 74 61 62 61 73 65 2e 71 75 65 72 79 28 22 74  atabase.query("t
19d0: 65 73 74 22 2c 20 6e 65 77 20 53 74 72 69 6e 67  est", new String
19e0: 5b 5d 20 7b 20 22 74 65 78 74 31 22 2c 20 22 74  [] { "text1", "t
19f0: 65 78 74 32 22 2c 20 22 6e 75 6d 31 22 2c 20 22  ext2", "num1", "
1a00: 69 6d 61 67 65 22 20 7d 2c 0a 20 20 20 20 20 20  image" },.      
1a10: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1a20: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  null, null, null
1a30: 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20  , null);.       
1a40: 20 61 73 73 65 72 74 4e 6f 74 4e 75 6c 6c 28 63   assertNotNull(c
1a50: 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
1a60: 61 73 73 65 72 74 45 71 75 61 6c 73 28 31 2c 20  assertEquals(1, 
1a70: 63 75 72 73 6f 72 2e 67 65 74 43 6f 75 6e 74 28  cursor.getCount(
1a80: 29 29 3b 0a 20 20 20 20 20 20 20 20 63 75 72 73  ));.        curs
1a90: 6f 72 2e 6d 6f 76 65 54 6f 46 69 72 73 74 28 29  or.moveToFirst()
1aa0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1ab0: 45 71 75 61 6c 73 28 22 73 74 72 69 6e 67 31 22  Equals("string1"
1ac0: 2c 20 63 75 72 73 6f 72 2e 67 65 74 53 74 72 69  , cursor.getStri
1ad0: 6e 67 28 43 4f 4c 55 4d 4e 5f 54 45 58 54 31 5f  ng(COLUMN_TEXT1_
1ae0: 49 4e 44 45 58 29 29 3b 0a 20 20 20 20 20 20 20  INDEX));.       
1af0: 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 22 73   assertEquals("s
1b00: 74 72 69 6e 67 32 22 2c 20 63 75 72 73 6f 72 2e  tring2", cursor.
1b10: 67 65 74 53 74 72 69 6e 67 28 43 4f 4c 55 4d 4e  getString(COLUMN
1b20: 5f 54 45 58 54 32 5f 49 4e 44 45 58 29 29 3b 0a  _TEXT2_INDEX));.
1b30: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45 71          assertEq
1b40: 75 61 6c 73 28 31 30 30 2c 20 63 75 72 73 6f 72  uals(100, cursor
1b50: 2e 67 65 74 49 6e 74 28 43 4f 4c 55 4d 4e 5f 4e  .getInt(COLUMN_N
1b60: 55 4d 31 5f 49 4e 44 45 58 29 29 3b 0a 20 20 20  UM1_INDEX));.   
1b70: 20 20 20 20 20 62 79 74 65 5b 5d 20 76 61 6c 75       byte[] valu
1b80: 65 20 3d 20 63 75 72 73 6f 72 2e 67 65 74 42 6c  e = cursor.getBl
1b90: 6f 62 28 43 4f 4c 55 4d 4e 5f 49 4d 41 47 45 5f  ob(COLUMN_IMAGE_
1ba0: 49 4e 44 45 58 29 3b 0a 20 20 20 20 20 20 20 20  INDEX);.        
1bb0: 4d 6f 72 65 41 73 73 65 72 74 73 2e 61 73 73 65  MoreAsserts.asse
1bc0: 72 74 45 71 75 61 6c 73 28 62 6c 6f 62 2c 20 76  rtEquals(blob, v
1bd0: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 63  alue);.        c
1be0: 75 72 73 6f 72 2e 63 6c 6f 73 65 28 29 3b 0a 20  ursor.close();. 
1bf0: 20 20 20 7d 0a 7d 0a                                }.}.