1 package SQLite; 2 3 /** 4 * Class to represent compiled SQLite3 statement. 5 * 6 * Note, that all native methods of this class are 7 * not synchronized, i.e. it is up to the caller 8 * to ensure that only one thread is in these 9 * methods at any one time. 10 */ 11 12 public class Stmt { 13 14 /** 15 * Internal handle for the SQLite3 statement. 16 */ 17 18 private long handle = 0; 19 20 /** 21 * Internal last error code for prepare()/step() methods. 22 */ 23 24 protected int error_code = 0; 25 26 /** 27 * Prepare the next SQL statement for the Stmt instance. 28 * @return true when the next piece of the SQL statement sequence 29 * has been prepared, false on end of statement sequence. 30 */ 31 prepare()32 public native boolean prepare() throws SQLite.Exception; 33 34 /** 35 * Perform one step of compiled SQLite3 statement. 36 * 37 * Example:<BR> 38 * <PRE> 39 * ... 40 * try { 41 * Stmt s = db.prepare("select * from x; select * from y;"); 42 * s.bind(...); 43 * ... 44 * s.bind(...); 45 * while (s.step(cb)) { 46 * Object o = s.value(...); 47 * ... 48 * } 49 * // s.reset() for re-execution or 50 * // s.prepare() for the next piece of SQL 51 * while (s.prepare()) { 52 * s.bind(...); 53 * ... 54 * s.bind(...); 55 * while (s.step(cb)) { 56 * Object o = s.value(...); 57 * ... 58 * } 59 * } 60 * } catch (SQLite.Exception e) { 61 * s.close(); 62 * } 63 * </PRE> 64 * 65 * @return true when row data is available, false on end 66 * of result set. 67 */ 68 step()69 public native boolean step() throws SQLite.Exception; 70 71 /** 72 * Close the compiled SQLite3 statement. 73 */ 74 close()75 public native void close() throws SQLite.Exception; 76 77 /** 78 * Reset the compiled SQLite3 statement without 79 * clearing parameter bindings. 80 */ 81 reset()82 public native void reset() throws SQLite.Exception; 83 84 /** 85 * Clear all bound parameters of the compiled SQLite3 statement. 86 */ 87 clear_bindings()88 public native void clear_bindings() throws SQLite.Exception; 89 90 /** 91 * Bind positional integer value to compiled SQLite3 statement. 92 * @param pos parameter index, 1-based 93 * @param value value of parameter 94 */ 95 bind(int pos, int value)96 public native void bind(int pos, int value) throws SQLite.Exception; 97 98 /** 99 * Bind positional long value to compiled SQLite3 statement. 100 * @param pos parameter index, 1-based 101 * @param value value of parameter 102 */ 103 bind(int pos, long value)104 public native void bind(int pos, long value) throws SQLite.Exception; 105 106 /** 107 * Bind positional double value to compiled SQLite3 statement. 108 * @param pos parameter index, 1-based 109 * @param value value of parameter 110 */ 111 bind(int pos, double value)112 public native void bind(int pos, double value) throws SQLite.Exception; 113 114 /** 115 * Bind positional byte array to compiled SQLite3 statement. 116 * @param pos parameter index, 1-based 117 * @param value value of parameter, may be null 118 */ 119 bind(int pos, byte[] value)120 public native void bind(int pos, byte[] value) throws SQLite.Exception; 121 122 /** 123 * Bind positional String to compiled SQLite3 statement. 124 * @param pos parameter index, 1-based 125 * @param value value of parameter, may be null 126 */ 127 bind(int pos, String value)128 public native void bind(int pos, String value) throws SQLite.Exception; 129 130 /** 131 * Bind positional SQL null to compiled SQLite3 statement. 132 * @param pos parameter index, 1-based 133 */ 134 bind(int pos)135 public native void bind(int pos) throws SQLite.Exception; 136 137 /** 138 * Bind positional zero'ed blob to compiled SQLite3 statement. 139 * @param pos parameter index, 1-based 140 * @param length byte size of zero blob 141 */ 142 bind_zeroblob(int pos, int length)143 public native void bind_zeroblob(int pos, int length) 144 throws SQLite.Exception; 145 146 /** 147 * Return number of parameters in compiled SQLite3 statement. 148 * @return int number of parameters 149 */ 150 bind_parameter_count()151 public native int bind_parameter_count() throws SQLite.Exception; 152 153 /** 154 * Return name of parameter in compiled SQLite3 statement. 155 * @param pos parameter index, 1-based 156 * @return String parameter name 157 */ 158 bind_parameter_name(int pos)159 public native String bind_parameter_name(int pos) throws SQLite.Exception; 160 161 /** 162 * Return index of named parameter in compiled SQLite3 statement. 163 * @param name of parameter 164 * @return int index of parameter, 1-based 165 */ 166 bind_parameter_index(String name)167 public native int bind_parameter_index(String name) 168 throws SQLite.Exception; 169 170 171 /** 172 * Retrieve integer column from exec'ed SQLite3 statement. 173 * @param col column number, 0-based 174 * @return int column value 175 */ 176 column_int(int col)177 public native int column_int(int col) throws SQLite.Exception; 178 179 /** 180 * Retrieve long column from exec'ed SQLite3 statement. 181 * @param col column number, 0-based 182 * @return long column value 183 */ column_long(int col)184 public native long column_long(int col) throws SQLite.Exception; 185 186 /** 187 * Retrieve double column from exec'ed SQLite3 statement. 188 * @param col column number, 0-based 189 * @return double column value 190 */ column_double(int col)191 public native double column_double(int col) throws SQLite.Exception; 192 193 /** 194 * Retrieve blob column from exec'ed SQLite3 statement. 195 * @param col column number, 0-based 196 * @return byte[] column value 197 */ column_bytes(int col)198 public native byte[] column_bytes(int col) throws SQLite.Exception; 199 200 /** 201 * Retrieve string column from exec'ed SQLite3 statement. 202 * @param col column number, 0-based 203 * @return String column value 204 */ column_string(int col)205 public native String column_string(int col) throws SQLite.Exception; 206 207 /** 208 * Retrieve column type from exec'ed SQLite3 statement. 209 * @param col column number, 0-based 210 * @return column type code, e.g. SQLite.Constants.SQLITE_INTEGER 211 */ column_type(int col)212 public native int column_type(int col) throws SQLite.Exception; 213 214 /** 215 * Retrieve number of columns of exec'ed SQLite3 statement. 216 * @return int number of columns 217 */ 218 column_count()219 public native int column_count() throws SQLite.Exception; 220 221 /** 222 * Retrieve column data as object from exec'ed SQLite3 statement. 223 * @param col column number, 0-based 224 * @return Object or null 225 */ 226 column(int col)227 public Object column(int col) throws SQLite.Exception { 228 switch (column_type(col)) { 229 case Constants.SQLITE_INTEGER: 230 return Long.valueOf(column_long(col)); // android-changed: performance 231 case Constants.SQLITE_FLOAT: 232 return new Double(column_double(col)); 233 case Constants.SQLITE_BLOB: 234 return column_bytes(col); 235 case Constants.SQLITE3_TEXT: 236 return column_string(col); 237 } 238 return null; 239 } 240 241 /** 242 * Return table name of column of SQLite3 statement. 243 * @param col column number, 0-based 244 * @return String or null 245 */ 246 column_table_name(int col)247 public native String column_table_name(int col) throws SQLite.Exception; 248 249 /** 250 * Return database name of column of SQLite3 statement. 251 * @param col column number, 0-based 252 * @return String or null 253 */ 254 column_database_name(int col)255 public native String column_database_name(int col) throws SQLite.Exception; 256 257 /** 258 * Return declared column type of SQLite3 statement. 259 * @param col column number, 0-based 260 * @return String or null 261 */ 262 column_decltype(int col)263 public native String column_decltype(int col) throws SQLite.Exception; 264 265 /** 266 * Return origin column name of column of SQLite3 statement. 267 * @param col column number, 0-based 268 * @return String or null 269 */ 270 column_origin_name(int col)271 public native String column_origin_name(int col) throws SQLite.Exception; 272 273 /** 274 * Return statement status information. 275 * @param op which counter to report 276 * @param flg reset flag 277 * @return counter 278 */ 279 status(int op, boolean flg)280 public native int status(int op, boolean flg); 281 282 /** 283 * Destructor for object. 284 */ 285 finalize()286 protected native void finalize(); 287 288 /** 289 * Internal native initializer. 290 */ 291 internal_init()292 private static native void internal_init(); 293 294 static { internal_init()295 internal_init(); 296 } 297 } 298