SQLite Android Bindings
Hex Artifact Content
Not logged in

Artifact 11e2e3fe07f48b8179c37fd6b8941e81b0690f63:


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 36 20 54 68 65 20 41 6e 64  (C) 2006 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 3b  database.sqlite;
0290: 0a 0a 69 6d 70 6f 72 74 20 61 6e 64 72 6f 69 64  ..import android
02a0: 2e 64 61 74 61 62 61 73 65 2e 44 61 74 61 62 61  .database.Databa
02b0: 73 65 55 74 69 6c 73 3b 0a 69 6d 70 6f 72 74 20  seUtils;.import 
02c0: 61 6e 64 72 6f 69 64 2e 6f 73 2e 43 61 6e 63 65  android.os.Cance
02d0: 6c 6c 61 74 69 6f 6e 53 69 67 6e 61 6c 3b 0a 0a  llationSignal;..
02e0: 69 6d 70 6f 72 74 20 6a 61 76 61 2e 75 74 69 6c  import java.util
02f0: 2e 41 72 72 61 79 73 3b 0a 0a 2f 2a 2a 0a 20 2a  .Arrays;../**. *
0300: 20 41 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f   A base class fo
0310: 72 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 69 74  r compiled SQLit
0320: 65 20 70 72 6f 67 72 61 6d 73 2e 0a 20 2a 20 3c  e programs.. * <
0330: 70 3e 0a 20 2a 20 54 68 69 73 20 63 6c 61 73 73  p>. * This class
0340: 20 69 73 20 6e 6f 74 20 74 68 72 65 61 64 2d 73   is not thread-s
0350: 61 66 65 2e 0a 20 2a 20 3c 2f 70 3e 0a 20 2a 2f  afe.. * </p>. */
0360: 0a 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74  .public abstract
0370: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 50 72 6f   class SQLitePro
0380: 67 72 61 6d 20 65 78 74 65 6e 64 73 20 53 51 4c  gram extends SQL
0390: 69 74 65 43 6c 6f 73 61 62 6c 65 20 7b 0a 20 20  iteClosable {.  
03a0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
03b0: 20 66 69 6e 61 6c 20 53 74 72 69 6e 67 5b 5d 20   final String[] 
03c0: 45 4d 50 54 59 5f 53 54 52 49 4e 47 5f 41 52 52  EMPTY_STRING_ARR
03d0: 41 59 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 5b  AY = new String[
03e0: 30 5d 3b 0a 0a 20 20 20 20 70 72 69 76 61 74 65  0];..    private
03f0: 20 66 69 6e 61 6c 20 53 51 4c 69 74 65 44 61 74   final SQLiteDat
0400: 61 62 61 73 65 20 6d 44 61 74 61 62 61 73 65 3b  abase mDatabase;
0410: 0a 20 20 20 20 70 72 69 76 61 74 65 20 66 69 6e  .    private fin
0420: 61 6c 20 53 74 72 69 6e 67 20 6d 53 71 6c 3b 0a  al String mSql;.
0430: 20 20 20 20 70 72 69 76 61 74 65 20 66 69 6e 61      private fina
0440: 6c 20 62 6f 6f 6c 65 61 6e 20 6d 52 65 61 64 4f  l boolean mReadO
0450: 6e 6c 79 3b 0a 20 20 20 20 70 72 69 76 61 74 65  nly;.    private
0460: 20 66 69 6e 61 6c 20 53 74 72 69 6e 67 5b 5d 20   final String[] 
0470: 6d 43 6f 6c 75 6d 6e 4e 61 6d 65 73 3b 0a 20 20  mColumnNames;.  
0480: 20 20 70 72 69 76 61 74 65 20 66 69 6e 61 6c 20    private final 
0490: 69 6e 74 20 6d 4e 75 6d 50 61 72 61 6d 65 74 65  int mNumParamete
04a0: 72 73 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  rs;.    private 
04b0: 66 69 6e 61 6c 20 4f 62 6a 65 63 74 5b 5d 20 6d  final Object[] m
04c0: 42 69 6e 64 41 72 67 73 3b 0a 0a 20 20 20 20 53  BindArgs;..    S
04d0: 51 4c 69 74 65 50 72 6f 67 72 61 6d 28 53 51 4c  QLiteProgram(SQL
04e0: 69 74 65 44 61 74 61 62 61 73 65 20 64 62 2c 20  iteDatabase db, 
04f0: 53 74 72 69 6e 67 20 73 71 6c 2c 20 4f 62 6a 65  String sql, Obje
0500: 63 74 5b 5d 20 62 69 6e 64 41 72 67 73 2c 0a 20  ct[] bindArgs,. 
0510: 20 20 20 20 20 20 20 20 20 20 20 43 61 6e 63 65             Cance
0520: 6c 6c 61 74 69 6f 6e 53 69 67 6e 61 6c 20 63 61  llationSignal ca
0530: 6e 63 65 6c 6c 61 74 69 6f 6e 53 69 67 6e 61 6c  ncellationSignal
0540: 46 6f 72 50 72 65 70 61 72 65 29 20 7b 0a 20 20  ForPrepare) {.  
0550: 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 20        mDatabase 
0560: 3d 20 64 62 3b 0a 20 20 20 20 20 20 20 20 6d 53  = db;.        mS
0570: 71 6c 20 3d 20 73 71 6c 2e 74 72 69 6d 28 29 3b  ql = sql.trim();
0580: 0a 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20  ..        int n 
0590: 3d 20 44 61 74 61 62 61 73 65 55 74 69 6c 73 2e  = DatabaseUtils.
05a0: 67 65 74 53 71 6c 53 74 61 74 65 6d 65 6e 74 54  getSqlStatementT
05b0: 79 70 65 28 6d 53 71 6c 29 3b 0a 20 20 20 20 20  ype(mSql);.     
05c0: 20 20 20 73 77 69 74 63 68 20 28 6e 29 20 7b 0a     switch (n) {.
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
05e0: 20 44 61 74 61 62 61 73 65 55 74 69 6c 73 2e 53   DatabaseUtils.S
05f0: 54 41 54 45 4d 45 4e 54 5f 42 45 47 49 4e 3a 0a  TATEMENT_BEGIN:.
0600: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
0610: 20 44 61 74 61 62 61 73 65 55 74 69 6c 73 2e 53   DatabaseUtils.S
0620: 54 41 54 45 4d 45 4e 54 5f 43 4f 4d 4d 49 54 3a  TATEMENT_COMMIT:
0630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
0640: 65 20 44 61 74 61 62 61 73 65 55 74 69 6c 73 2e  e DatabaseUtils.
0650: 53 54 41 54 45 4d 45 4e 54 5f 41 42 4f 52 54 3a  STATEMENT_ABORT:
0660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0670: 20 6d 52 65 61 64 4f 6e 6c 79 20 3d 20 66 61 6c   mReadOnly = fal
0680: 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se;.            
0690: 20 20 20 20 6d 43 6f 6c 75 6d 6e 4e 61 6d 65 73      mColumnNames
06a0: 20 3d 20 45 4d 50 54 59 5f 53 54 52 49 4e 47 5f   = EMPTY_STRING_
06b0: 41 52 52 41 59 3b 0a 20 20 20 20 20 20 20 20 20  ARRAY;.         
06c0: 20 20 20 20 20 20 20 6d 4e 75 6d 50 61 72 61 6d         mNumParam
06d0: 65 74 65 72 73 20 3d 20 30 3b 0a 20 20 20 20 20  eters = 0;.     
06e0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
06f0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
0700: 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20  efault:.        
0710: 20 20 20 20 20 20 20 20 62 6f 6f 6c 65 61 6e 20          boolean 
0720: 61 73 73 75 6d 65 52 65 61 64 4f 6e 6c 79 20 3d  assumeReadOnly =
0730: 20 28 6e 20 3d 3d 20 44 61 74 61 62 61 73 65 55   (n == DatabaseU
0740: 74 69 6c 73 2e 53 54 41 54 45 4d 45 4e 54 5f 53  tils.STATEMENT_S
0750: 45 4c 45 43 54 29 3b 0a 20 20 20 20 20 20 20 20  ELECT);.        
0760: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
0770: 61 74 65 6d 65 6e 74 49 6e 66 6f 20 69 6e 66 6f  atementInfo info
0780: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
0790: 74 65 6d 65 6e 74 49 6e 66 6f 28 29 3b 0a 20 20  tementInfo();.  
07a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
07b0: 2e 67 65 74 54 68 72 65 61 64 53 65 73 73 69 6f  .getThreadSessio
07c0: 6e 28 29 2e 70 72 65 70 61 72 65 28 6d 53 71 6c  n().prepare(mSql
07d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
07e0: 20 20 20 20 20 20 20 20 20 20 64 62 2e 67 65 74            db.get
07f0: 54 68 72 65 61 64 44 65 66 61 75 6c 74 43 6f 6e  ThreadDefaultCon
0800: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 28 61 73 73  nectionFlags(ass
0810: 75 6d 65 52 65 61 64 4f 6e 6c 79 29 2c 0a 20 20  umeReadOnly),.  
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0830: 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69        cancellati
0840: 6f 6e 53 69 67 6e 61 6c 46 6f 72 50 72 65 70 61  onSignalForPrepa
0850: 72 65 2c 20 69 6e 66 6f 29 3b 0a 20 20 20 20 20  re, info);.     
0860: 20 20 20 20 20 20 20 20 20 20 20 6d 52 65 61 64             mRead
0870: 4f 6e 6c 79 20 3d 20 69 6e 66 6f 2e 72 65 61 64  Only = info.read
0880: 4f 6e 6c 79 3b 0a 20 20 20 20 20 20 20 20 20 20  Only;.          
0890: 20 20 20 20 20 20 6d 43 6f 6c 75 6d 6e 4e 61 6d        mColumnNam
08a0: 65 73 20 3d 20 69 6e 66 6f 2e 63 6f 6c 75 6d 6e  es = info.column
08b0: 4e 61 6d 65 73 3b 0a 20 20 20 20 20 20 20 20 20  Names;.         
08c0: 20 20 20 20 20 20 20 6d 4e 75 6d 50 61 72 61 6d         mNumParam
08d0: 65 74 65 72 73 20 3d 20 69 6e 66 6f 2e 6e 75 6d  eters = info.num
08e0: 50 61 72 61 6d 65 74 65 72 73 3b 0a 20 20 20 20  Parameters;.    
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
0900: 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  k;.        }..  
0910: 20 20 20 20 20 20 69 66 20 28 62 69 6e 64 41 72        if (bindAr
0920: 67 73 20 21 3d 20 6e 75 6c 6c 20 26 26 20 62 69  gs != null && bi
0930: 6e 64 41 72 67 73 2e 6c 65 6e 67 74 68 20 3e 20  ndArgs.length > 
0940: 6d 4e 75 6d 50 61 72 61 6d 65 74 65 72 73 29 20  mNumParameters) 
0950: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  {.            th
0960: 72 6f 77 20 6e 65 77 20 49 6c 6c 65 67 61 6c 41  row new IllegalA
0970: 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
0980: 28 22 54 6f 6f 20 6d 61 6e 79 20 62 69 6e 64 20  ("Too many bind 
0990: 61 72 67 75 6d 65 6e 74 73 2e 20 20 22 0a 20 20  arguments.  ".  
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 20 2b 20 62 69 6e 64 41 72 67 73 2e 6c 65 6e    + bindArgs.len
09c0: 67 74 68 20 2b 20 22 20 61 72 67 75 6d 65 6e 74  gth + " argument
09d0: 73 20 77 65 72 65 20 70 72 6f 76 69 64 65 64 20  s were provided 
09e0: 62 75 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e  but the statemen
09f0: 74 20 6e 65 65 64 73 20 22 0a 20 20 20 20 20 20  t needs ".      
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
0a10: 6d 4e 75 6d 50 61 72 61 6d 65 74 65 72 73 20 2b  mNumParameters +
0a20: 20 22 20 61 72 67 75 6d 65 6e 74 73 2e 22 29 3b   " arguments.");
0a30: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
0a40: 20 20 20 20 69 66 20 28 6d 4e 75 6d 50 61 72 61      if (mNumPara
0a50: 6d 65 74 65 72 73 20 21 3d 20 30 29 20 7b 0a 20  meters != 0) {. 
0a60: 20 20 20 20 20 20 20 20 20 20 20 6d 42 69 6e 64             mBind
0a70: 41 72 67 73 20 3d 20 6e 65 77 20 4f 62 6a 65 63  Args = new Objec
0a80: 74 5b 6d 4e 75 6d 50 61 72 61 6d 65 74 65 72 73  t[mNumParameters
0a90: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ];.            i
0aa0: 66 20 28 62 69 6e 64 41 72 67 73 20 21 3d 20 6e  f (bindArgs != n
0ab0: 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ull) {.         
0ac0: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 61 72         System.ar
0ad0: 72 61 79 63 6f 70 79 28 62 69 6e 64 41 72 67 73  raycopy(bindArgs
0ae0: 2c 20 30 2c 20 6d 42 69 6e 64 41 72 67 73 2c 20  , 0, mBindArgs, 
0af0: 30 2c 20 62 69 6e 64 41 72 67 73 2e 6c 65 6e 67  0, bindArgs.leng
0b00: 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  th);.           
0b10: 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73   }.        } els
0b20: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
0b30: 6d 42 69 6e 64 41 72 67 73 20 3d 20 6e 75 6c 6c  mBindArgs = null
0b40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0b50: 7d 0a 0a 20 20 20 20 66 69 6e 61 6c 20 53 51 4c  }..    final SQL
0b60: 69 74 65 44 61 74 61 62 61 73 65 20 67 65 74 44  iteDatabase getD
0b70: 61 74 61 62 61 73 65 28 29 20 7b 0a 20 20 20 20  atabase() {.    
0b80: 20 20 20 20 72 65 74 75 72 6e 20 6d 44 61 74 61      return mData
0b90: 62 61 73 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  base;.    }..   
0ba0: 20 66 69 6e 61 6c 20 53 74 72 69 6e 67 20 67 65   final String ge
0bb0: 74 53 71 6c 28 29 20 7b 0a 20 20 20 20 20 20 20  tSql() {.       
0bc0: 20 72 65 74 75 72 6e 20 6d 53 71 6c 3b 0a 20 20   return mSql;.  
0bd0: 20 20 7d 0a 0a 20 20 20 20 66 69 6e 61 6c 20 4f    }..    final O
0be0: 62 6a 65 63 74 5b 5d 20 67 65 74 42 69 6e 64 41  bject[] getBindA
0bf0: 72 67 73 28 29 20 7b 0a 20 20 20 20 20 20 20 20  rgs() {.        
0c00: 72 65 74 75 72 6e 20 6d 42 69 6e 64 41 72 67 73  return mBindArgs
0c10: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 69 6e  ;.    }..    fin
0c20: 61 6c 20 53 74 72 69 6e 67 5b 5d 20 67 65 74 43  al String[] getC
0c30: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 29 20 7b 0a 20  olumnNames() {. 
0c40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 43         return mC
0c50: 6f 6c 75 6d 6e 4e 61 6d 65 73 3b 0a 20 20 20 20  olumnNames;.    
0c60: 7d 0a 0a 20 20 20 20 2f 2a 2a 20 40 68 69 64 65  }..    /** @hide
0c70: 20 2a 2f 0a 20 20 20 20 70 72 6f 74 65 63 74 65   */.    protecte
0c80: 64 20 66 69 6e 61 6c 20 53 51 4c 69 74 65 53 65  d final SQLiteSe
0c90: 73 73 69 6f 6e 20 67 65 74 53 65 73 73 69 6f 6e  ssion getSession
0ca0: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  () {.        ret
0cb0: 75 72 6e 20 6d 44 61 74 61 62 61 73 65 2e 67 65  urn mDatabase.ge
0cc0: 74 54 68 72 65 61 64 53 65 73 73 69 6f 6e 28 29  tThreadSession()
0cd0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a  ;.    }..    /**
0ce0: 20 40 68 69 64 65 20 2a 2f 0a 20 20 20 20 70 72   @hide */.    pr
0cf0: 6f 74 65 63 74 65 64 20 66 69 6e 61 6c 20 69 6e  otected final in
0d00: 74 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46  t getConnectionF
0d10: 6c 61 67 73 28 29 20 7b 0a 20 20 20 20 20 20 20  lags() {.       
0d20: 20 72 65 74 75 72 6e 20 6d 44 61 74 61 62 61 73   return mDatabas
0d30: 65 2e 67 65 74 54 68 72 65 61 64 44 65 66 61 75  e.getThreadDefau
0d40: 6c 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  ltConnectionFlag
0d50: 73 28 6d 52 65 61 64 4f 6e 6c 79 29 3b 0a 20 20  s(mReadOnly);.  
0d60: 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 20 40 68 69    }..    /** @hi
0d70: 64 65 20 2a 2f 0a 20 20 20 20 70 72 6f 74 65 63  de */.    protec
0d80: 74 65 64 20 66 69 6e 61 6c 20 76 6f 69 64 20 6f  ted final void o
0d90: 6e 43 6f 72 72 75 70 74 69 6f 6e 28 29 20 7b 0a  nCorruption() {.
0da0: 20 20 20 20 20 20 20 20 6d 44 61 74 61 62 61 73          mDatabas
0db0: 65 2e 6f 6e 43 6f 72 72 75 70 74 69 6f 6e 28 29  e.onCorruption()
0dc0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a  ;.    }..    /**
0dd0: 0a 20 20 20 20 20 2a 20 55 6e 69 6d 70 6c 65 6d  .     * Unimplem
0de0: 65 6e 74 65 64 2e 0a 20 20 20 20 20 2a 20 40 64  ented..     * @d
0df0: 65 70 72 65 63 61 74 65 64 20 54 68 69 73 20 6d  eprecated This m
0e00: 65 74 68 6f 64 20 69 73 20 64 65 70 72 65 63 61  ethod is depreca
0e10: 74 65 64 20 61 6e 64 20 6d 75 73 74 20 6e 6f 74  ted and must not
0e20: 20 62 65 20 75 73 65 64 2e 0a 20 20 20 20 20 2a   be used..     *
0e30: 2f 0a 20 20 20 20 40 44 65 70 72 65 63 61 74 65  /.    @Deprecate
0e40: 64 0a 20 20 20 20 70 75 62 6c 69 63 20 66 69 6e  d.    public fin
0e50: 61 6c 20 69 6e 74 20 67 65 74 55 6e 69 71 75 65  al int getUnique
0e60: 49 64 28 29 20 7b 0a 20 20 20 20 20 20 20 20 72  Id() {.        r
0e70: 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20 20 7d 0a  eturn -1;.    }.
0e80: 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20  .    /**.     * 
0e90: 42 69 6e 64 20 61 20 4e 55 4c 4c 20 76 61 6c 75  Bind a NULL valu
0ea0: 65 20 74 6f 20 74 68 69 73 20 73 74 61 74 65 6d  e to this statem
0eb0: 65 6e 74 2e 20 54 68 65 20 76 61 6c 75 65 20 72  ent. The value r
0ec0: 65 6d 61 69 6e 73 20 62 6f 75 6e 64 20 75 6e 74  emains bound unt
0ed0: 69 6c 0a 20 20 20 20 20 2a 20 7b 40 6c 69 6e 6b  il.     * {@link
0ee0: 20 23 63 6c 65 61 72 42 69 6e 64 69 6e 67 73 7d   #clearBindings}
0ef0: 20 69 73 20 63 61 6c 6c 65 64 2e 0a 20 20 20 20   is called..    
0f00: 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d   *.     * @param
0f10: 20 69 6e 64 65 78 20 54 68 65 20 31 2d 62 61 73   index The 1-bas
0f20: 65 64 20 69 6e 64 65 78 20 74 6f 20 74 68 65 20  ed index to the 
0f30: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 69 6e  parameter to bin
0f40: 64 20 6e 75 6c 6c 20 74 6f 0a 20 20 20 20 20 2a  d null to.     *
0f50: 2f 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69  /.    public voi
0f60: 64 20 62 69 6e 64 4e 75 6c 6c 28 69 6e 74 20 69  d bindNull(int i
0f70: 6e 64 65 78 29 20 7b 0a 20 20 20 20 20 20 20 20  ndex) {.        
0f80: 62 69 6e 64 28 69 6e 64 65 78 2c 20 6e 75 6c 6c  bind(index, null
0f90: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  );.    }..    /*
0fa0: 2a 0a 20 20 20 20 20 2a 20 42 69 6e 64 20 61 20  *.     * Bind a 
0fb0: 6c 6f 6e 67 20 76 61 6c 75 65 20 74 6f 20 74 68  long value to th
0fc0: 69 73 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  is statement. Th
0fd0: 65 20 76 61 6c 75 65 20 72 65 6d 61 69 6e 73 20  e value remains 
0fe0: 62 6f 75 6e 64 20 75 6e 74 69 6c 0a 20 20 20 20  bound until.    
0ff0: 20 2a 20 7b 40 6c 69 6e 6b 20 23 63 6c 65 61 72   * {@link #clear
1000: 42 69 6e 64 69 6e 67 73 7d 20 69 73 20 63 61 6c  Bindings} is cal
1010: 6c 65 64 2e 0a 20 20 20 20 20 2a 61 64 64 54 6f  led..     *addTo
1020: 42 69 6e 64 41 72 67 73 0a 20 20 20 20 20 2a 20  BindArgs.     * 
1030: 40 70 61 72 61 6d 20 69 6e 64 65 78 20 54 68 65  @param index The
1040: 20 31 2d 62 61 73 65 64 20 69 6e 64 65 78 20 74   1-based index t
1050: 6f 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  o the parameter 
1060: 74 6f 20 62 69 6e 64 0a 20 20 20 20 20 2a 20 40  to bind.     * @
1070: 70 61 72 61 6d 20 76 61 6c 75 65 20 54 68 65 20  param value The 
1080: 76 61 6c 75 65 20 74 6f 20 62 69 6e 64 0a 20 20  value to bind.  
1090: 20 20 20 2a 2f 0a 20 20 20 20 70 75 62 6c 69 63     */.    public
10a0: 20 76 6f 69 64 20 62 69 6e 64 4c 6f 6e 67 28 69   void bindLong(i
10b0: 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76  nt index, long v
10c0: 61 6c 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20  alue) {.        
10d0: 62 69 6e 64 28 69 6e 64 65 78 2c 20 76 61 6c 75  bind(index, valu
10e0: 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  e);.    }..    /
10f0: 2a 2a 0a 20 20 20 20 20 2a 20 42 69 6e 64 20 61  **.     * Bind a
1100: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20 74 6f   double value to
1110: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 2e   this statement.
1120: 20 54 68 65 20 76 61 6c 75 65 20 72 65 6d 61 69   The value remai
1130: 6e 73 20 62 6f 75 6e 64 20 75 6e 74 69 6c 0a 20  ns bound until. 
1140: 20 20 20 20 2a 20 7b 40 6c 69 6e 6b 20 23 63 6c      * {@link #cl
1150: 65 61 72 42 69 6e 64 69 6e 67 73 7d 20 69 73 20  earBindings} is 
1160: 63 61 6c 6c 65 64 2e 0a 20 20 20 20 20 2a 0a 20  called..     *. 
1170: 20 20 20 20 2a 20 40 70 61 72 61 6d 20 69 6e 64      * @param ind
1180: 65 78 20 54 68 65 20 31 2d 62 61 73 65 64 20 69  ex The 1-based i
1190: 6e 64 65 78 20 74 6f 20 74 68 65 20 70 61 72 61  ndex to the para
11a0: 6d 65 74 65 72 20 74 6f 20 62 69 6e 64 0a 20 20  meter to bind.  
11b0: 20 20 20 2a 20 40 70 61 72 61 6d 20 76 61 6c 75     * @param valu
11c0: 65 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 62  e The value to b
11d0: 69 6e 64 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20  ind.     */.    
11e0: 70 75 62 6c 69 63 20 76 6f 69 64 20 62 69 6e 64  public void bind
11f0: 44 6f 75 62 6c 65 28 69 6e 74 20 69 6e 64 65 78  Double(int index
1200: 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 20  , double value) 
1210: 7b 0a 20 20 20 20 20 20 20 20 62 69 6e 64 28 69  {.        bind(i
1220: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20  ndex, value);.  
1230: 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20    }..    /**.   
1240: 20 20 2a 20 42 69 6e 64 20 61 20 53 74 72 69 6e    * Bind a Strin
1250: 67 20 76 61 6c 75 65 20 74 6f 20 74 68 69 73 20  g value to this 
1260: 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 76  statement. The v
1270: 61 6c 75 65 20 72 65 6d 61 69 6e 73 20 62 6f 75  alue remains bou
1280: 6e 64 20 75 6e 74 69 6c 0a 20 20 20 20 20 2a 20  nd until.     * 
1290: 7b 40 6c 69 6e 6b 20 23 63 6c 65 61 72 42 69 6e  {@link #clearBin
12a0: 64 69 6e 67 73 7d 20 69 73 20 63 61 6c 6c 65 64  dings} is called
12b0: 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20  ..     *.     * 
12c0: 40 70 61 72 61 6d 20 69 6e 64 65 78 20 54 68 65  @param index The
12d0: 20 31 2d 62 61 73 65 64 20 69 6e 64 65 78 20 74   1-based index t
12e0: 6f 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  o the parameter 
12f0: 74 6f 20 62 69 6e 64 0a 20 20 20 20 20 2a 20 40  to bind.     * @
1300: 70 61 72 61 6d 20 76 61 6c 75 65 20 54 68 65 20  param value The 
1310: 76 61 6c 75 65 20 74 6f 20 62 69 6e 64 2c 20 6d  value to bind, m
1320: 75 73 74 20 6e 6f 74 20 62 65 20 6e 75 6c 6c 0a  ust not be null.
1330: 20 20 20 20 20 2a 2f 0a 20 20 20 20 70 75 62 6c       */.    publ
1340: 69 63 20 76 6f 69 64 20 62 69 6e 64 53 74 72 69  ic void bindStri
1350: 6e 67 28 69 6e 74 20 69 6e 64 65 78 2c 20 53 74  ng(int index, St
1360: 72 69 6e 67 20 76 61 6c 75 65 29 20 7b 0a 20 20  ring value) {.  
1370: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1380: 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20  == null) {.     
1390: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
13a0: 20 49 6c 6c 65 67 61 6c 41 72 67 75 6d 65 6e 74   IllegalArgument
13b0: 45 78 63 65 70 74 69 6f 6e 28 22 74 68 65 20 62  Exception("the b
13c0: 69 6e 64 20 76 61 6c 75 65 20 61 74 20 69 6e 64  ind value at ind
13d0: 65 78 20 22 20 2b 20 69 6e 64 65 78 20 2b 20 22  ex " + index + "
13e0: 20 69 73 20 6e 75 6c 6c 22 29 3b 0a 20 20 20 20   is null");.    
13f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 69      }.        bi
1400: 6e 64 28 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  nd(index, value)
1410: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a  ;.    }..    /**
1420: 0a 20 20 20 20 20 2a 20 42 69 6e 64 20 61 20 62  .     * Bind a b
1430: 79 74 65 20 61 72 72 61 79 20 76 61 6c 75 65 20  yte array value 
1440: 74 6f 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  to this statemen
1450: 74 2e 20 54 68 65 20 76 61 6c 75 65 20 72 65 6d  t. The value rem
1460: 61 69 6e 73 20 62 6f 75 6e 64 20 75 6e 74 69 6c  ains bound until
1470: 0a 20 20 20 20 20 2a 20 7b 40 6c 69 6e 6b 20 23  .     * {@link #
1480: 63 6c 65 61 72 42 69 6e 64 69 6e 67 73 7d 20 69  clearBindings} i
1490: 73 20 63 61 6c 6c 65 64 2e 0a 20 20 20 20 20 2a  s called..     *
14a0: 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 69  .     * @param i
14b0: 6e 64 65 78 20 54 68 65 20 31 2d 62 61 73 65 64  ndex The 1-based
14c0: 20 69 6e 64 65 78 20 74 6f 20 74 68 65 20 70 61   index to the pa
14d0: 72 61 6d 65 74 65 72 20 74 6f 20 62 69 6e 64 0a  rameter to bind.
14e0: 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 76 61       * @param va
14f0: 6c 75 65 20 54 68 65 20 76 61 6c 75 65 20 74 6f  lue The value to
1500: 20 62 69 6e 64 2c 20 6d 75 73 74 20 6e 6f 74 20   bind, must not 
1510: 62 65 20 6e 75 6c 6c 0a 20 20 20 20 20 2a 2f 0a  be null.     */.
1520: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
1530: 62 69 6e 64 42 6c 6f 62 28 69 6e 74 20 69 6e 64  bindBlob(int ind
1540: 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65  ex, byte[] value
1550: 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ) {.        if (
1560: 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 20 7b  value == null) {
1570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1580: 6f 77 20 6e 65 77 20 49 6c 6c 65 67 61 6c 41 72  ow new IllegalAr
1590: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
15a0: 22 74 68 65 20 62 69 6e 64 20 76 61 6c 75 65 20  "the bind value 
15b0: 61 74 20 69 6e 64 65 78 20 22 20 2b 20 69 6e 64  at index " + ind
15c0: 65 78 20 2b 20 22 20 69 73 20 6e 75 6c 6c 22 29  ex + " is null")
15d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
15e0: 20 20 20 20 62 69 6e 64 28 69 6e 64 65 78 2c 20      bind(index, 
15f0: 76 61 6c 75 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  value);.    }.. 
1600: 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 43 6c     /**.     * Cl
1610: 65 61 72 73 20 61 6c 6c 20 65 78 69 73 74 69 6e  ears all existin
1620: 67 20 62 69 6e 64 69 6e 67 73 2e 20 55 6e 73 65  g bindings. Unse
1630: 74 20 62 69 6e 64 69 6e 67 73 20 61 72 65 20 74  t bindings are t
1640: 72 65 61 74 65 64 20 61 73 20 4e 55 4c 4c 2e 0a  reated as NULL..
1650: 20 20 20 20 20 2a 2f 0a 20 20 20 20 70 75 62 6c       */.    publ
1660: 69 63 20 76 6f 69 64 20 63 6c 65 61 72 42 69 6e  ic void clearBin
1670: 64 69 6e 67 73 28 29 20 7b 0a 20 20 20 20 20 20  dings() {.      
1680: 20 20 69 66 20 28 6d 42 69 6e 64 41 72 67 73 20    if (mBindArgs 
1690: 21 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20  != null) {.     
16a0: 20 20 20 20 20 20 20 41 72 72 61 79 73 2e 66 69         Arrays.fi
16b0: 6c 6c 28 6d 42 69 6e 64 41 72 67 73 2c 20 6e 75  ll(mBindArgs, nu
16c0: 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ll);.        }. 
16d0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20     }..    /**.  
16e0: 20 20 20 2a 20 47 69 76 65 6e 20 61 6e 20 61 72     * Given an ar
16f0: 72 61 79 20 6f 66 20 53 74 72 69 6e 67 20 62 69  ray of String bi
1700: 6e 64 41 72 67 73 2c 20 74 68 69 73 20 6d 65 74  ndArgs, this met
1710: 68 6f 64 20 62 69 6e 64 73 20 61 6c 6c 20 6f 66  hod binds all of
1720: 20 74 68 65 6d 20 69 6e 20 6f 6e 65 20 73 69 6e   them in one sin
1730: 67 6c 65 20 63 61 6c 6c 2e 0a 20 20 20 20 20 2a  gle call..     *
1740: 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 62  .     * @param b
1750: 69 6e 64 41 72 67 73 20 74 68 65 20 53 74 72 69  indArgs the Stri
1760: 6e 67 20 61 72 72 61 79 20 6f 66 20 62 69 6e 64  ng array of bind
1770: 20 61 72 67 73 2c 20 6e 6f 6e 65 20 6f 66 20 77   args, none of w
1780: 68 69 63 68 20 6d 75 73 74 20 62 65 20 6e 75 6c  hich must be nul
1790: 6c 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 70  l..     */.    p
17a0: 75 62 6c 69 63 20 76 6f 69 64 20 62 69 6e 64 41  ublic void bindA
17b0: 6c 6c 41 72 67 73 41 73 53 74 72 69 6e 67 73 28  llArgsAsStrings(
17c0: 53 74 72 69 6e 67 5b 5d 20 62 69 6e 64 41 72 67  String[] bindArg
17d0: 73 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20  s) {.        if 
17e0: 28 62 69 6e 64 41 72 67 73 20 21 3d 20 6e 75 6c  (bindArgs != nul
17f0: 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  l) {.           
1800: 20 66 6f 72 20 28 69 6e 74 20 69 20 3d 20 62 69   for (int i = bi
1810: 6e 64 41 72 67 73 2e 6c 65 6e 67 74 68 3b 20 69  ndArgs.length; i
1820: 20 21 3d 20 30 3b 20 69 2d 2d 29 20 7b 0a 20 20   != 0; i--) {.  
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 69                bi
1840: 6e 64 53 74 72 69 6e 67 28 69 2c 20 62 69 6e 64  ndString(i, bind
1850: 41 72 67 73 5b 69 20 2d 20 31 5d 29 3b 0a 20 20  Args[i - 1]);.  
1860: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1870: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
1880: 20 40 4f 76 65 72 72 69 64 65 0a 20 20 20 20 70   @Override.    p
1890: 72 6f 74 65 63 74 65 64 20 76 6f 69 64 20 6f 6e  rotected void on
18a0: 41 6c 6c 52 65 66 65 72 65 6e 63 65 73 52 65 6c  AllReferencesRel
18b0: 65 61 73 65 64 28 29 20 7b 0a 20 20 20 20 20 20  eased() {.      
18c0: 20 20 63 6c 65 61 72 42 69 6e 64 69 6e 67 73 28    clearBindings(
18d0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  );.    }..    pr
18e0: 69 76 61 74 65 20 76 6f 69 64 20 62 69 6e 64 28  ivate void bind(
18f0: 69 6e 74 20 69 6e 64 65 78 2c 20 4f 62 6a 65 63  int index, Objec
1900: 74 20 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 20  t value) {.     
1910: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 31     if (index < 1
1920: 20 7c 7c 20 69 6e 64 65 78 20 3e 20 6d 4e 75 6d   || index > mNum
1930: 50 61 72 61 6d 65 74 65 72 73 29 20 7b 0a 20 20  Parameters) {.  
1940: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1950: 6e 65 77 20 49 6c 6c 65 67 61 6c 41 72 67 75 6d  new IllegalArgum
1960: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 22 43 61  entException("Ca
1970: 6e 6e 6f 74 20 62 69 6e 64 20 61 72 67 75 6d 65  nnot bind argume
1980: 6e 74 20 61 74 20 69 6e 64 65 78 20 22 0a 20 20  nt at index ".  
1990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a0: 20 20 2b 20 69 6e 64 65 78 20 2b 20 22 20 62 65    + index + " be
19b0: 63 61 75 73 65 20 74 68 65 20 69 6e 64 65 78 20  cause the index 
19c0: 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e  is out of range.
19d0: 20 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20    ".            
19e0: 20 20 20 20 20 20 20 20 2b 20 22 54 68 65 20 73          + "The s
19f0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 22 20 2b  tatement has " +
1a00: 20 6d 4e 75 6d 50 61 72 61 6d 65 74 65 72 73 20   mNumParameters 
1a10: 2b 20 22 20 70 61 72 61 6d 65 74 65 72 73 2e 22  + " parameters."
1a20: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
1a30: 20 20 20 20 20 6d 42 69 6e 64 41 72 67 73 5b 69       mBindArgs[i
1a40: 6e 64 65 78 20 2d 20 31 5d 20 3d 20 76 61 6c 75  ndex - 1] = valu
1a50: 65 3b 0a 20 20 20 20 7d 0a 7d 0a                 e;.    }.}.