diff options
Diffstat (limited to 'sql/src/main')
74 files changed, 0 insertions, 28869 deletions
diff --git a/sql/src/main/java/SQLite/Authorizer.java b/sql/src/main/java/SQLite/Authorizer.java deleted file mode 100644 index cdc321d..0000000 --- a/sql/src/main/java/SQLite/Authorizer.java +++ /dev/null @@ -1,25 +0,0 @@ -package SQLite; - -/** - * Callback interface for SQLite's authorizer function. - */ - -public interface Authorizer { - - /** - * Callback to authorize access. - * - * @param what integer indicating type of access - * @param arg1 first argument (table, view, index, or trigger name) - * @param arg2 second argument (file, table, or column name) - * @param arg3 third argument (database name) - * @param arg4 third argument (trigger name) - * @return Constants.SQLITE_OK for success, Constants.SQLITE_IGNORE - * for don't allow access but don't raise an error, Constants.SQLITE_DENY - * for abort SQL statement with error. - */ - - public int authorize(int what, String arg1, String arg2, String arg3, - String arg4); -} - diff --git a/sql/src/main/java/SQLite/Blob.java b/sql/src/main/java/SQLite/Blob.java deleted file mode 100644 index 3de9f8a..0000000 --- a/sql/src/main/java/SQLite/Blob.java +++ /dev/null @@ -1,323 +0,0 @@ -package SQLite; - -import java.io.*; - -/** - * Internal class implementing java.io.InputStream on - * SQLite 3.4.0 incremental blob I/O interface. - */ - -class BlobR extends InputStream { - - /** - * Blob instance - */ - - private Blob blob; - - /** - * Read position, file pointer. - */ - - private int pos; - - /** - * Contruct InputStream from blob instance. - */ - - BlobR(Blob blob) { - this.blob = blob; - this.pos = 0; - } - - /** - * Return number of available bytes for reading. - * @return available input bytes - */ - - public int available() throws IOException { - int ret = blob.size - pos; - return (ret < 0) ? 0 : ret; - } - - /** - * Mark method; dummy to satisfy InputStream class. - */ - - public void mark(int limit) { - } - - /** - * Reset method; dummy to satisfy InputStream class. - */ - - public void reset() throws IOException { - } - - /** - * Mark support; not for this class. - * @return always false - */ - - public boolean markSupported() { - return false; - } - - /** - * Close this blob InputStream. - */ - - public void close() throws IOException { - blob.close(); - blob = null; - pos = 0; - } - - /** - * Skip over blob data. - */ - - public long skip(long n) throws IOException { - long ret = pos + n; - if (ret < 0) { - ret = 0; - pos = 0; - } else if (ret > blob.size) { - ret = blob.size; - pos = blob.size; - } else { - pos = (int) ret; - } - return ret; - } - - /** - * Read single byte from blob. - * @return byte read - */ - - public int read() throws IOException { - byte b[] = new byte[1]; - int n = blob.read(b, 0, pos, b.length); - if (n > 0) { - pos += n; - return b[0]; - } - return -1; - } - - /** - * Read byte array from blob. - * @param b byte array to be filled - * @return number of bytes read - */ - - public int read(byte b[]) throws IOException { - int n = blob.read(b, 0, pos, b.length); - if (n > 0) { - pos += n; - return n; - } - return -1; - } - - /** - * Read slice of byte array from blob. - * @param b byte array to be filled - * @param off offset into byte array - * @param len length to be read - * @return number of bytes read - */ - - public int read(byte b[], int off, int len) throws IOException { - if (off + len > b.length) { - len = b.length - off; - } - if (len < 0) { - return -1; - } - if (len == 0) { - return 0; - } - int n = blob.read(b, off, pos, len); - if (n > 0) { - pos += n; - return n; - } - return -1; - } -} - -/** - * Internal class implementing java.io.OutputStream on - * SQLite 3.4.0 incremental blob I/O interface. - */ - -class BlobW extends OutputStream { - - /** - * Blob instance - */ - - private Blob blob; - - /** - * Read position, file pointer. - */ - - private int pos; - - /** - * Contruct OutputStream from blob instance. - */ - - BlobW(Blob blob) { - this.blob = blob; - this.pos = 0; - } - - /** - * Flush blob; dummy to satisfy OutputStream class. - */ - - public void flush() throws IOException { - } - - /** - * Close this blob OutputStream. - */ - - public void close() throws IOException { - blob.close(); - blob = null; - pos = 0; - } - - /** - * Write blob data. - * @param v byte to be written at current position. - */ - - public void write(int v) throws IOException { - byte b[] = new byte[1]; - b[0] = (byte) v; - pos += blob.write(b, 0, pos, 1); - } - - /** - * Write blob data. - * @param b byte array to be written at current position. - */ - - public void write(byte[] b) throws IOException { - if (b != null && b.length > 0) { - pos += blob.write(b, 0, pos, b.length); - } - } - - /** - * Write blob data. - * @param b byte array to be written. - * @param off offset within byte array - * @param len length of data to be written - */ - - public void write(byte[] b, int off, int len) throws IOException { - if (b != null) { - if (off + len > b.length) { - len = b.length - off; - } - if (len <= 0) { - return; - } - pos += blob.write(b, off, pos, len); - } - } -} - -/** - * Class to represent SQLite3 3.4.0 incremental blob I/O interface. - * - * Note, that all native methods of this class are - * not synchronized, i.e. it is up to the caller - * to ensure that only one thread is in these - * methods at any one time. - */ - -public class Blob { - - /** - * Internal handle for the SQLite3 blob. - */ - - private long handle = 0; - - /** - * Cached size of blob, setup right after blob - * has been opened. - */ - - protected int size = 0; - - /** - * Return InputStream for this blob - * @return InputStream - */ - - public InputStream getInputStream() { - return (InputStream) new BlobR(this); - } - - /** - * Return OutputStream for this blob - * @return OutputStream - */ - - public OutputStream getOutputStream() { - return (OutputStream) new BlobW(this); - } - - /** - * Close blob. - */ - - public native void close(); - - /** - * Internal blob write method. - * @param b byte array to be written - * @param off offset into byte array - * @param pos offset into blob - * @param len length to be written - * @return number of bytes written to blob - */ - - native int write(byte[] b, int off, int pos, int len) throws IOException; - - /** - * Internal blob read method. - * @param b byte array to be written - * @param off offset into byte array - * @param pos offset into blob - * @param len length to be written - * @return number of bytes written to blob - */ - - native int read(byte[] b, int off, int pos, int len) throws IOException; - - /** - * Destructor for object. - */ - - protected native void finalize(); - - /** - * Internal native initializer. - */ - - private static native void internal_init(); - - static { - internal_init(); - } -} diff --git a/sql/src/main/java/SQLite/BusyHandler.java b/sql/src/main/java/SQLite/BusyHandler.java deleted file mode 100644 index c39b39d..0000000 --- a/sql/src/main/java/SQLite/BusyHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package SQLite; - -/** - * Callback interface for SQLite's user defined busy handler. - */ - -public interface BusyHandler { - - /** - * Invoked when a table is locked by another process - * or thread. The method should return true for waiting - * until the table becomes unlocked, or false in order - * to abandon the action.<BR><BR> - * - * @param table the name of the locked table - * @param count number of times the table was locked - */ - - public boolean busy(String table, int count); -} diff --git a/sql/src/main/java/SQLite/Callback.java b/sql/src/main/java/SQLite/Callback.java deleted file mode 100644 index 3eeb605..0000000 --- a/sql/src/main/java/SQLite/Callback.java +++ /dev/null @@ -1,68 +0,0 @@ -package SQLite; - -/** - * Callback interface for SQLite's query results. - * <BR><BR> - * Example:<BR> - * - * <PRE> - * class TableFmt implements SQLite.Callback { - * public void columns(String cols[]) { - * System.out.println("<TH><TR>"); - * for (int i = 0; i < cols.length; i++) { - * System.out.println("<TD>" + cols[i] + "</TD>"); - * } - * System.out.println("</TR></TH>"); - * } - * public boolean newrow(String cols[]) { - * System.out.println("<TR>"); - * for (int i = 0; i < cols.length; i++) { - * System.out.println("<TD>" + cols[i] + "</TD>"); - * } - * System.out.println("</TR>"); - * return false; - * } - * } - * ... - * SQLite.Database db = new SQLite.Database(); - * db.open("db", 0); - * System.out.println("<TABLE>"); - * db.exec("select * from TEST", new TableFmt()); - * System.out.println("</TABLE>"); - * ... - * </PRE> - */ - -public interface Callback { - - /** - * Reports column names of the query result. - * This method is invoked first (and once) when - * the SQLite engine returns the result set.<BR><BR> - * - * @param coldata string array holding the column names - */ - - public void columns(String coldata[]); - - /** - * Reports type names of the columns of the query result. - * This is available from SQLite 2.6.0 on and needs - * the PRAGMA show_datatypes to be turned on.<BR><BR> - * - * @param types string array holding column types - */ - - public void types(String types[]); - - /** - * Reports row data of the query result. - * This method is invoked for each row of the - * result set. If true is returned the running - * SQLite query is aborted.<BR><BR> - * - * @param rowdata string array holding the column values of the row - */ - - public boolean newrow(String rowdata[]); -} diff --git a/sql/src/main/java/SQLite/Constants.java b/sql/src/main/java/SQLite/Constants.java deleted file mode 100644 index 4e636b9..0000000 --- a/sql/src/main/java/SQLite/Constants.java +++ /dev/null @@ -1,157 +0,0 @@ -/* DO NOT EDIT */ - -package SQLite; - -/** - * Container for SQLite constants. - */ - -public final class Constants { - /* - * Error code: 0 - */ - public static final int SQLITE_OK = 0; - /* - * Error code: 1 - */ - public static final int SQLITE_ERROR = 1; - /* - * Error code: 2 - */ - public static final int SQLITE_INTERNAL = 2; - /* - * Error code: 3 - */ - public static final int SQLITE_PERM = 3; - /* - * Error code: 4 - */ - public static final int SQLITE_ABORT = 4; - /* - * Error code: 5 - */ - public static final int SQLITE_BUSY = 5; - /* - * Error code: 6 - */ - public static final int SQLITE_LOCKED = 6; - /* - * Error code: 7 - */ - public static final int SQLITE_NOMEM = 7; - /* - * Error code: 8 - */ - public static final int SQLITE_READONLY = 8; - /* - * Error code: 9 - */ - public static final int SQLITE_INTERRUPT = 9; - /* - * Error code: 10 - */ - public static final int SQLITE_IOERR = 10; - /* - * Error code: 11 - */ - public static final int SQLITE_CORRUPT = 11; - /* - * Error code: 12 - */ - public static final int SQLITE_NOTFOUND = 12; - /* - * Error code: 13 - */ - public static final int SQLITE_FULL = 13; - /* - * Error code: 14 - */ - public static final int SQLITE_CANTOPEN = 14; - /* - * Error code: 15 - */ - public static final int SQLITE_PROTOCOL = 15; - /* - * Error code: 16 - */ - public static final int SQLITE_EMPTY = 16; - /* - * Error code: 17 - */ - public static final int SQLITE_SCHEMA = 17; - /* - * Error code: 18 - */ - public static final int SQLITE_TOOBIG = 18; - /* - * Error code: 19 - */ - public static final int SQLITE_CONSTRAINT = 19; - /* - * Error code: 20 - */ - public static final int SQLITE_MISMATCH = 20; - /* - * Error code: 21 - */ - public static final int SQLITE_MISUSE = 21; - /* - * Error code: 22 - */ - public static final int SQLITE_NOLFS = 22; - /* - * Error code: 23 - */ - public static final int SQLITE_AUTH = 23; - /* - * Error code: 24 - */ - public static final int SQLITE_FORMAT = 24; - /* - * Error code: 25 - */ - public static final int SQLITE_RANGE = 25; - /* - * Error code: 26 - */ - public static final int SQLITE_NOTADB = 26; - public static final int SQLITE_ROW = 100; - public static final int SQLITE_DONE = 101; - public static final int SQLITE_INTEGER = 1; - public static final int SQLITE_FLOAT = 2; - public static final int SQLITE_BLOB = 4; - public static final int SQLITE_NULL = 5; - public static final int SQLITE3_TEXT = 3; - public static final int SQLITE_NUMERIC = -1; - public static final int SQLITE_TEXT = 3; - public static final int SQLITE2_TEXT = -2; - public static final int SQLITE_ARGS = -3; - public static final int SQLITE_COPY = 0; - public static final int SQLITE_CREATE_INDEX = 1; - public static final int SQLITE_CREATE_TABLE = 2; - public static final int SQLITE_CREATE_TEMP_INDEX = 3; - public static final int SQLITE_CREATE_TEMP_TABLE = 4; - public static final int SQLITE_CREATE_TEMP_TRIGGER = 5; - public static final int SQLITE_CREATE_TEMP_VIEW = 6; - public static final int SQLITE_CREATE_TRIGGER = 7; - public static final int SQLITE_CREATE_VIEW = 8; - public static final int SQLITE_DELETE = 9; - public static final int SQLITE_DROP_INDEX = 10; - public static final int SQLITE_DROP_TABLE = 11; - public static final int SQLITE_DROP_TEMP_INDEX = 12; - public static final int SQLITE_DROP_TEMP_TABLE = 13; - public static final int SQLITE_DROP_TEMP_TRIGGER = 14; - public static final int SQLITE_DROP_TEMP_VIEW = 15; - public static final int SQLITE_DROP_TRIGGER = 16; - public static final int SQLITE_DROP_VIEW = 17; - public static final int SQLITE_INSERT = 18; - public static final int SQLITE_PRAGMA = 19; - public static final int SQLITE_READ = 20; - public static final int SQLITE_SELECT = 21; - public static final int SQLITE_TRANSACTION = 22; - public static final int SQLITE_UPDATE = 23; - public static final int SQLITE_ATTACH = 24; - public static final int SQLITE_DETACH = 25; - public static final int SQLITE_DENY = 1; - public static final int SQLITE_IGNORE = 2; -} diff --git a/sql/src/main/java/SQLite/Database.java b/sql/src/main/java/SQLite/Database.java deleted file mode 100644 index dcaaf9d..0000000 --- a/sql/src/main/java/SQLite/Database.java +++ /dev/null @@ -1,615 +0,0 @@ -package SQLite; - -/** - * Main class wrapping an SQLite database. - */ - -public class Database { - - /** - * Internal handle for the native SQLite API. - */ - - protected long handle = 0; - - /** - * Internal last error code for exec() methods. - */ - - protected int error_code = 0; - - /** - * Open an SQLite database file. - * - * @param filename the name of the database file - * @param mode open mode, currently ignored - */ - - public void open(String filename, int mode) throws SQLite.Exception { - synchronized(this) { - _open(filename, mode); - } - } - - private native void _open(String filename, int mode) - throws SQLite.Exception; - - /** - * Open SQLite auxiliary database file for temporary - * tables. - * - * @param filename the name of the auxiliary file or null - */ - - public void open_aux_file(String filename) throws SQLite.Exception { - synchronized(this) { - _open_aux_file(filename); - } - } - - private native void _open_aux_file(String filename) - throws SQLite.Exception; - - /** - * Destructor for object. - */ - - protected void finalize() { - synchronized(this) { - _finalize(); - } - } - - private native void _finalize(); - - /** - * Close the underlying SQLite database file. - */ - - public void close() throws SQLite.Exception { - synchronized(this) { - _close(); - } - } - - private native void _close() - throws SQLite.Exception; - - /** - * Execute an SQL statement and invoke callback methods - * for each row of the result set.<P> - * - * It the method fails, an SQLite.Exception is thrown and - * an error code is set, which later can be retrieved by - * the last_error() method. - * - * @param sql the SQL statement to be executed - * @param cb the object implementing the callback methods - */ - - public void exec(String sql, SQLite.Callback cb) throws SQLite.Exception { - synchronized(this) { - _exec(sql, cb); - } - } - - private native void _exec(String sql, SQLite.Callback cb) - throws SQLite.Exception; - - /** - * Execute an SQL statement and invoke callback methods - * for each row of the result set. Each '%q' or %Q in the - * statement string is substituted by its corresponding - * element in the argument vector. - * <BR><BR> - * Example:<BR> - * <PRE> - * String args[] = new String[1]; - * args[0] = "tab%"; - * db.exec("select * from sqlite_master where type like '%q'", - * null, args); - * </PRE> - * - * It the method fails, an SQLite.Exception is thrown and - * an error code is set, which later can be retrieved by - * the last_error() method. - * - * @param sql the SQL statement to be executed - * @param cb the object implementing the callback methods - * @param args arguments for the SQL statement, '%q' substitution - */ - - public void exec(String sql, SQLite.Callback cb, - String args[]) throws SQLite.Exception { - synchronized(this) { - _exec(sql, cb, args); - } - } - - private native void _exec(String sql, SQLite.Callback cb, String args[]) - throws SQLite.Exception; - - /** - * Return the row identifier of the last inserted - * row. - */ - - public long last_insert_rowid() { - synchronized(this) { - return _last_insert_rowid(); - } - } - - private native long _last_insert_rowid(); - - /** - * Abort the current SQLite operation. - */ - - public void interrupt() { - synchronized(this) { - _interrupt(); - } - } - - private native void _interrupt(); - - /** - * Return the number of changed rows for the last statement. - */ - - public long changes() { - synchronized(this) { - return _changes(); - } - } - - private native long _changes(); - - /** - * Establish a busy callback method which gets called when - * an SQLite table is locked. - * - * @param bh the object implementing the busy callback method - */ - - public void busy_handler(SQLite.BusyHandler bh) { - synchronized(this) { - _busy_handler(bh); - } - } - - private native void _busy_handler(SQLite.BusyHandler bh); - - /** - * Set the timeout for waiting for an SQLite table to become - * unlocked. - * - * @param ms number of millisecond to wait - */ - - public void busy_timeout(int ms) { - synchronized(this) { - _busy_timeout(ms); - } - } - - private native void _busy_timeout(int ms); - - /** - * Convenience method to retrieve an entire result - * set into memory. - * - * @param sql the SQL statement to be executed - * @return result set - */ - - public TableResult get_table(String sql) throws SQLite.Exception { - TableResult ret = new TableResult(); - if (!is3()) { - exec(sql, ret); - } else { - synchronized(this) { - /* only one statement !!! */ - Vm vm = compile(sql); - set_last_error(vm.error_code); - while (vm.step(ret)) { - set_last_error(vm.error_code); - } - vm.finalize(); - } - } - return ret; - } - - /** - * Convenience method to retrieve an entire result - * set into memory. - * - * @param sql the SQL statement to be executed - * @param args arguments for the SQL statement, '%q' substitution - * @return result set - */ - - public TableResult get_table(String sql, String args[]) - throws SQLite.Exception { - TableResult ret = new TableResult(); - if (!is3()) { - exec(sql, ret, args); - } else { - synchronized(this) { - /* only one statement !!! */ - Vm vm = compile(sql, args); - set_last_error(vm.error_code); - while (vm.step(ret)) { - set_last_error(vm.error_code); - } - vm.finalize(); - } - } - return ret; - } - - /** - * Convenience method to retrieve an entire result - * set into memory. - * - * @param sql the SQL statement to be executed - * @param args arguments for the SQL statement, '%q' substitution - * @param tbl TableResult to receive result set - * @return result set - */ - - public void get_table(String sql, String args[], TableResult tbl) - throws SQLite.Exception { - tbl.clear(); - if (!is3()) { - exec(sql, tbl, args); - } else { - synchronized(this) { - /* only one statement !!! */ - Vm vm = compile(sql, args); - while (vm.step(tbl)) { - } - vm.finalize(); - } - } - } - - /** - * See if an SQL statement is complete. - * Returns true if the input string comprises - * one or more complete SQL statements. - * - * @param sql the SQL statement to be checked - */ - - public synchronized static boolean complete(String sql) { - return _complete(sql); - } - - private native static boolean _complete(String sql); - - /** - * Return SQLite version number as string. - * Don't rely on this when both SQLite 2 and 3 are compiled - * into the native part. Use the class method in this case. - */ - - public native static String version(); - - /** - * Return SQLite version number as string. - * If the database is not open, <tt>unknown</tt> is returned. - */ - - public native String dbversion(); - - /** - * Create regular function. - * - * @param name the name of the new function - * @param nargs number of arguments to function - * @param f interface of function - */ - - public void create_function(String name, int nargs, Function f) { - synchronized(this) { - _create_function(name, nargs, f); - } - } - - private native void _create_function(String name, int nargs, Function f); - - /** - * Create aggregate function. - * - * @param name the name of the new function - * @param nargs number of arguments to function - * @param f interface of function - */ - - public void create_aggregate(String name, int nargs, Function f) { - synchronized(this) { - _create_aggregate(name, nargs, f); - } - } - - private native void _create_aggregate(String name, int nargs, Function f); - - /** - * Set function return type. Only available in SQLite 2.6.0 and - * above, otherwise a no-op. - * - * @param name the name of the function whose return type is to be set - * @param type return type code, e.g. SQLite.Constants.SQLITE_NUMERIC - */ - - public void function_type(String name, int type) { - synchronized(this) { - _function_type(name, type); - } - } - - private native void _function_type(String name, int type); - - /** - * Return the code of the last error occured in - * any of the exec() methods. The value is valid - * after an Exception has been reported by one of - * these methods. See the <A HREF="Constants.html">Constants</A> - * class for possible values. - * - * @return SQLite error code - */ - - public int last_error() { - return error_code; - } - - /** - * Internal: set error code. - * @param error_code new error code - */ - - protected void set_last_error(int error_code) { - this.error_code = error_code; - } - - /** - * Return last error message of SQLite3 engine. - * - * @return error string or null - */ - - public String error_message() { - synchronized(this) { - return _errmsg(); - } - } - - private native String _errmsg(); - - /** - * Return error string given SQLite error code (SQLite2). - * - * @param error_code the error code - * @return error string - */ - - public static native String error_string(int error_code); - - /** - * Set character encoding. - * @param enc name of encoding - */ - - public void set_encoding(String enc) throws SQLite.Exception { - synchronized(this) { - _set_encoding(enc); - } - } - - private native void _set_encoding(String enc) - throws SQLite.Exception; - - /** - * Set authorizer function. Only available in SQLite 2.7.6 and - * above, otherwise a no-op. - * - * @param auth the authorizer function - */ - - public void set_authorizer(Authorizer auth) { - synchronized(this) { - _set_authorizer(auth); - } - } - - private native void _set_authorizer(Authorizer auth); - - /** - * Set trace function. Only available in SQLite 2.7.6 and above, - * otherwise a no-op. - * - * @param tr the trace function - */ - - public void trace(Trace tr) { - synchronized(this) { - _trace(tr); - } - } - - private native void _trace(Trace tr); - - /** - * Compile and return SQLite VM for SQL statement. Only available - * in SQLite 2.8.0 and above, otherwise a no-op. - * - * @param sql SQL statement to be compiled - * @return a Vm object - */ - - public Vm compile(String sql) throws SQLite.Exception { - synchronized(this) { - Vm vm = new Vm(); - vm_compile(sql, vm); - return vm; - } - } - - /** - * Compile and return SQLite VM for SQL statement. Only available - * in SQLite 3.0 and above, otherwise a no-op. - * - * @param sql SQL statement to be compiled - * @param args arguments for the SQL statement, '%q' substitution - * @return a Vm object - */ - - public Vm compile(String sql, String args[]) throws SQLite.Exception { - synchronized(this) { - Vm vm = new Vm(); - vm_compile_args(sql, vm, args); - return vm; - } - } - - /** - * Prepare and return SQLite3 statement for SQL. Only available - * in SQLite 3.0 and above, otherwise a no-op. - * - * @param sql SQL statement to be prepared - * @return a Stmt object - */ - - public Stmt prepare(String sql) throws SQLite.Exception { - synchronized(this) { - Stmt stmt = new Stmt(); - stmt_prepare(sql, stmt); - return stmt; - } - } - - /** - * Open an SQLite3 blob. Only available in SQLite 3.4.0 and above. - * @param db database name - * @param table table name - * @param column column name - * @param row row identifier - * @param rw if true, open for read-write, else read-only - * @return a Blob object - */ - - public Blob open_blob(String db, String table, String column, - long row, boolean rw) throws SQLite.Exception { - synchronized(this) { - Blob blob = new Blob(); - _open_blob(db, table, column, row, rw, blob); - return blob; - } - } - - /** - * Check type of open database. - * @return true if SQLite3 database - */ - - public native boolean is3(); - - /** - * Internal compile method. - * @param sql SQL statement - * @param vm Vm object - */ - - private native void vm_compile(String sql, Vm vm) - throws SQLite.Exception; - - /** - * Internal compile method, SQLite 3.0 only. - * @param sql SQL statement - * @param args arguments for the SQL statement, '%q' substitution - * @param vm Vm object - */ - - private native void vm_compile_args(String sql, Vm vm, String args[]) - throws SQLite.Exception; - - /** - * Internal SQLite3 prepare method. - * @param sql SQL statement - * @param stmt Stmt object - */ - - private native void stmt_prepare(String sql, Stmt stmt) - throws SQLite.Exception; - - /** - * Internal SQLite open blob method. - * @param db database name - * @param table table name - * @param column column name - * @param row row identifier - * @param rw if true, open for read-write, else read-only - * @param blob Blob object - */ - - private native void _open_blob(String db, String table, String column, - long row, boolean rw, Blob blob) - throws SQLite.Exception; - - /** - * Establish a progress callback method which gets called after - * N SQLite VM opcodes. - * - * @param n number of SQLite VM opcodes until callback is invoked - * @param p the object implementing the progress callback method - */ - - public void progress_handler(int n, SQLite.ProgressHandler p) { - synchronized(this) { - _progress_handler(n, p); - } - } - - private native void _progress_handler(int n, SQLite.ProgressHandler p); - - /** - * Internal native initializer. - */ - - private static native void internal_init(); - - /** - * Static initializer to load the native part. - */ - - static { - try { -// String path = System.getProperty("SQLite.library.path"); -// if (path == null || path.length() == 0){ -// System.loadLibrary("sqlite_jni"); -// } else { -// try { -// java.lang.reflect.Method mapLibraryName; -// Class param[] = new Class[1]; -// param[0] = String.class; -// mapLibraryName = System.class.getMethod("mapLibraryName", -// param); -// Object args[] = new Object[1]; -// args[0] = "sqlite_jni"; -// String mapped = (String) mapLibraryName.invoke(null, args); -// System.load(path + java.io.File.separator + mapped); -// } catch (Throwable t) { -// System.loadLibrary("sqlite_jni"); -// } -// } - internal_init(); - } catch (Throwable t) { - System.err.println("Unable to load sqlite: " + t); - } - } -} - diff --git a/sql/src/main/java/SQLite/Exception.java b/sql/src/main/java/SQLite/Exception.java deleted file mode 100644 index cc26b99..0000000 --- a/sql/src/main/java/SQLite/Exception.java +++ /dev/null @@ -1,18 +0,0 @@ -package SQLite; - -/** - * Class for SQLite related exceptions. - */ - -public class Exception extends java.lang.Exception { - - /** - * Construct a new SQLite exception. - * - * @param string error message - */ - - public Exception(String string) { - super(string); - } -} diff --git a/sql/src/main/java/SQLite/Function.java b/sql/src/main/java/SQLite/Function.java deleted file mode 100644 index 5aa5e33..0000000 --- a/sql/src/main/java/SQLite/Function.java +++ /dev/null @@ -1,59 +0,0 @@ -package SQLite; - -/** - * Callback interface for SQLite's user defined functions. - * Each callback method receives a - * <A HREF="FunctionContext.html">FunctionContext</A> object - * which is used to set the function result or error code. - * <BR><BR> - * Example:<BR> - * - * <PRE> - * class SinFunc implements SQLite.Function { - * public void function(SQLite.FunctionContext fc, String args[]) { - * try { - * Double d = new Double(args[0]); - * fc.set_result(Math.sin(d.doubleValue())); - * } catch (Exception e) { - * fc.set_error("sin(" + args[0] + "):" + e); - * } - * } - * ... - * } - * SQLite.Database db = new SQLite.Database(); - * db.open("db", 0); - * db.create_function("sin", 1, SinFunc); - * ... - * db.exec("select sin(1.0) from test", null); - * </PRE> - */ - -public interface Function { - - /** - * Callback for regular function. - * - * @param fc function's context for reporting result - * @param args String array of arguments - */ - - public void function(FunctionContext fc, String args[]); - - /** - * Callback for one step in aggregate function. - * - * @param fc function's context for reporting result - * @param args String array of arguments - */ - - public void step(FunctionContext fc, String args[]); - - /** - * Callback for final step in aggregate function. - * - * @param fc function's context for reporting result - */ - - public void last_step(FunctionContext fc); - -} diff --git a/sql/src/main/java/SQLite/FunctionContext.java b/sql/src/main/java/SQLite/FunctionContext.java deleted file mode 100644 index d0b5182..0000000 --- a/sql/src/main/java/SQLite/FunctionContext.java +++ /dev/null @@ -1,82 +0,0 @@ -package SQLite; - -/** - * Context for execution of SQLite's user defined functions. - * A reference to an instance of this class is passed to - * user defined functions. - */ - -public class FunctionContext { - - /** - * Internal handle for the native SQLite API. - */ - - private long handle = 0; - - /** - * Set function result from string. - * - * @param r result string - */ - - public native void set_result(String r); - - /** - * Set function result from integer. - * - * @param r result integer - */ - - public native void set_result(int r); - - /** - * Set function result from double. - * - * @param r result double - */ - - public native void set_result(double r); - - /** - * Set function result from error message. - * - * @param r result string (error message) - */ - - public native void set_error(String r); - - /** - * Set function result from byte array. - * Only provided by SQLite3 databases. - * - * @param r result byte array - */ - - public native void set_result(byte[] r); - - /** - * Set function result as empty blob given size. - * Only provided by SQLite3 databases. - * - * @param n size for empty blob - */ - - public native void set_result_zeroblob(int n); - - /** - * Retrieve number of rows for aggregate function. - */ - - public native int count(); - - /** - * Internal native initializer. - */ - - private static native void internal_init(); - - static { - internal_init(); - } -} diff --git a/sql/src/main/java/SQLite/JDBC2y/JDBCConnection.java b/sql/src/main/java/SQLite/JDBC2y/JDBCConnection.java deleted file mode 100644 index 20c98e3..0000000 --- a/sql/src/main/java/SQLite/JDBC2y/JDBCConnection.java +++ /dev/null @@ -1,452 +0,0 @@ -package SQLite.JDBC2y; - -import java.sql.*; -import java.util.*; - -public class JDBCConnection - implements java.sql.Connection, SQLite.BusyHandler { - - /** - * Open database. - */ - protected DatabaseX db; - - /** - * Database URL. - */ - protected String url; - - /** - * Character encoding. - */ - protected String enc; - - /** - * Autocommit flag, true means autocommit. - */ - protected boolean autocommit = true; - - /** - * In-transaction flag. - * Can be true only when autocommit false. - */ - protected boolean intrans = false; - - /** - * Timeout for Database.exec() - */ - protected int timeout = 1000000; - - /** - * File name of database. - */ - private String dbfile = null; - - /** - * Reference to meta data or null. - */ - private JDBCDatabaseMetaData meta = null; - - /** - * Base time value for timeout handling. - */ - private long t0; - - /** - * Database in readonly mode. - */ - private boolean readonly = false; - - - private boolean busy0(DatabaseX db, int count) { - if (count <= 1) { - t0 = System.currentTimeMillis(); - } - if (db != null) { - long t1 = System.currentTimeMillis(); - if (t1 - t0 > timeout) { - return false; - } - db.wait(100); - return true; - } - return false; - } - - public boolean busy(String table, int count) { - return busy0(db, count); - } - - protected boolean busy3(DatabaseX db, int count) { - if (count <= 1) { - t0 = System.currentTimeMillis(); - } - if (db != null) { - long t1 = System.currentTimeMillis(); - if (t1 - t0 > timeout) { - return false; - } - return true; - } - return false; - } - - private DatabaseX open(boolean readonly) throws SQLException { - DatabaseX db = null; - try { - db = new DatabaseX(); - db.open(dbfile, readonly ? 0444 : 0644); - db.set_encoding(enc); - } catch (SQLite.Exception e) { - throw new SQLException(e.toString()); - } - int loop = 0; - while (true) { - try { - db.exec("PRAGMA short_column_names = off;", null); - db.exec("PRAGMA full_column_names = on;", null); - db.exec("PRAGMA empty_result_callbacks = on;", null); - if (SQLite.Database.version().compareTo("2.6.0") >= 0) { - db.exec("PRAGMA show_datatypes = on;", null); - } - } catch (SQLite.Exception e) { - if (db.last_error() != SQLite.Constants.SQLITE_BUSY || - !busy0(db, ++loop)) { - try { - db.close(); - } catch (SQLite.Exception ee) { - } - throw new SQLException(e.toString()); - } - continue; - } - break; - } - return db; - } - - public JDBCConnection(String url, String enc) throws SQLException { - if (url.startsWith("sqlite:/")) { - dbfile = url.substring(8); - } else if (url.startsWith("jdbc:sqlite:/")) { - dbfile = url.substring(13); - } else { - throw new SQLException("unsupported url"); - } - this.url = url; - this.enc = enc; - try { - db = open(readonly); - db.busy_handler(this); - } catch (SQLException e) { - if (db != null) { - try { - db.close(); - } catch (SQLite.Exception ee) { - } - } - throw e; - } - } - - /* non-standard */ - public SQLite.Database getSQLiteDatabase() { - return (SQLite.Database) db; - } - - public Statement createStatement() { - JDBCStatement s = new JDBCStatement(this); - return s; - } - - public Statement createStatement(int resultSetType, - int resultSetConcurrency) - throws SQLException { - JDBCStatement s = new JDBCStatement(this); - return s; - } - - public DatabaseMetaData getMetaData() throws SQLException { - if (meta == null) { - meta = new JDBCDatabaseMetaData(this); - } - return meta; - } - - public void close() throws SQLException { - try { - rollback(); - } catch (SQLException e) { - /* ignored */ - } - intrans = false; - if (db != null) { - try { - db.close(); - db = null; - } catch (SQLite.Exception e) { - throw new SQLException(e.toString()); - } - } - } - - public boolean isClosed() throws SQLException { - return db == null; - } - - public boolean isReadOnly() throws SQLException { - return readonly; - } - - public void clearWarnings() throws SQLException { - } - - public void commit() throws SQLException { - if (db == null) { - throw new SQLException("stale connection"); - } - if (!intrans) { - return; - } - try { - db.exec("COMMIT", null); - intrans = false; - } catch (SQLite.Exception e) { - throw new SQLException(e.toString()); - } - } - - public boolean getAutoCommit() throws SQLException { - return autocommit; - } - - public String getCatalog() throws SQLException { - return null; - } - - public int getTransactionIsolation() throws SQLException { - return TRANSACTION_SERIALIZABLE; - } - - public SQLWarning getWarnings() throws SQLException { - return null; - } - - public String nativeSQL(String sql) throws SQLException { - throw new SQLException("not supported"); - } - - public CallableStatement prepareCall(String sql) throws SQLException { - throw new SQLException("not supported"); - } - - public CallableStatement prepareCall(String sql, int x, int y) - throws SQLException { - throw new SQLException("not supported"); - } - - public PreparedStatement prepareStatement(String sql) throws SQLException { - JDBCPreparedStatement s = new JDBCPreparedStatement(this, sql); - return s; - } - - public PreparedStatement prepareStatement(String sql, int resultSetType, - int resultSetConcurrency) - throws SQLException { - JDBCPreparedStatement s = new JDBCPreparedStatement(this, sql); - return s; - } - - public void rollback() throws SQLException { - if (db == null) { - throw new SQLException("stale connection"); - } - if (!intrans) { - return; - } - try { - db.exec("ROLLBACK", null); - intrans = false; - } catch (SQLite.Exception e) { - throw new SQLException(e.toString()); - } - } - - public void setAutoCommit(boolean ac) throws SQLException { - if (ac && intrans && db != null) { - try { - db.exec("ROLLBACK", null); - } catch (SQLite.Exception e) { - throw new SQLException(e.toString()); - } - } - intrans = false; - autocommit = ac; - } - - public void setCatalog(String catalog) throws SQLException { - } - - public void setReadOnly(boolean ro) throws SQLException { - if (intrans) { - throw new SQLException("incomplete transaction"); - } - if (ro != readonly) { - DatabaseX db = null; - try { - db = open(ro); - this.db.close(); - this.db = db; - db = null; - readonly = ro; - } catch (SQLException e) { - throw e; - } catch (SQLite.Exception ee) { - if (db != null) { - try { - db.close(); - } catch (SQLite.Exception eee) { - } - } - throw new SQLException(ee.toString()); - } - } - } - - public void setTransactionIsolation(int level) throws SQLException { - if (level != TRANSACTION_SERIALIZABLE) { - throw new SQLException("not supported"); - } - } - - public java.util.Map<String, Class<?>> getTypeMap() throws SQLException { - throw new SQLException("not supported"); - } - - public void setTypeMap(java.util.Map map) throws SQLException { - throw new SQLException("not supported"); - } - - public int getHoldability() throws SQLException { - return ResultSet.HOLD_CURSORS_OVER_COMMIT; - } - - public void setHoldability(int holdability) throws SQLException { - if (holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT) { - return; - } - throw new SQLException("not supported"); - } - - public Savepoint setSavepoint() throws SQLException { - throw new SQLException("not supported"); - } - - public Savepoint setSavepoint(String name) throws SQLException { - throw new SQLException("not supported"); - } - - public void rollback(Savepoint x) throws SQLException { - throw new SQLException("not supported"); - } - - public void releaseSavepoint(Savepoint x) throws SQLException { - throw new SQLException("not supported"); - } - - public Statement createStatement(int resultSetType, - int resultSetConcurrency, - int resultSetHoldability) - throws SQLException { - if (resultSetHoldability != ResultSet.HOLD_CURSORS_OVER_COMMIT) { - throw new SQLException("not supported"); - } - return createStatement(resultSetType, resultSetConcurrency); - } - - public PreparedStatement prepareStatement(String sql, int resultSetType, - int resultSetConcurrency, - int resultSetHoldability) - throws SQLException { - if (resultSetHoldability != ResultSet.HOLD_CURSORS_OVER_COMMIT) { - throw new SQLException("not supported"); - } - return prepareStatement(sql, resultSetType, resultSetConcurrency); - } - - public CallableStatement prepareCall(String sql, int x, int y, int z) - throws SQLException { - throw new SQLException("not supported"); - } - - public PreparedStatement prepareStatement(String sql, int autokeys) - throws SQLException { - if (autokeys != Statement.NO_GENERATED_KEYS) { - throw new SQLException("not supported"); - } - return prepareStatement(sql); - } - - public PreparedStatement prepareStatement(String sql, int colIndexes[]) - throws SQLException { - throw new SQLException("not supported"); - } - - public PreparedStatement prepareStatement(String sql, String columns[]) - throws SQLException { - throw new SQLException("not supported"); - } - -} - -class DatabaseX extends SQLite.Database { - - static Object lock = new Object(); - - public DatabaseX() { - super(); - } - - void wait(int ms) { - try { - synchronized (lock) { - lock.wait(ms); - } - } catch (java.lang.Exception e) { - } - } - - public void exec(String sql, SQLite.Callback cb) - throws SQLite.Exception { - super.exec(sql, cb); - synchronized (lock) { - lock.notifyAll(); - } - } - - public void exec(String sql, SQLite.Callback cb, String args[]) - throws SQLite.Exception { - super.exec(sql, cb, args); - synchronized (lock) { - lock.notifyAll(); - } - } - - public SQLite.TableResult get_table(String sql, String args[]) - throws SQLite.Exception { - SQLite.TableResult ret = super.get_table(sql, args); - synchronized (lock) { - lock.notifyAll(); - } - return ret; - } - - public void get_table(String sql, String args[], SQLite.TableResult tbl) - throws SQLite.Exception { - super.get_table(sql, args, tbl); - synchronized (lock) { - lock.notifyAll(); - } - } - -} diff --git a/sql/src/main/java/SQLite/JDBC2y/JDBCDatabaseMetaData.java b/sql/src/main/java/SQLite/JDBC2y/JDBCDatabaseMetaData.java deleted file mode 100644 index 8c14d1d..0000000 --- a/sql/src/main/java/SQLite/JDBC2y/JDBCDatabaseMetaData.java +++ /dev/null @@ -1,1578 +0,0 @@ -package SQLite.JDBC2y; - -import java.sql.*; -import java.util.Hashtable; - -public class JDBCDatabaseMetaData implements DatabaseMetaData { - - private JDBCConnection conn; - - public JDBCDatabaseMetaData(JDBCConnection conn) { - this.conn = conn; - } - - public boolean allProceduresAreCallable() throws SQLException { - return false; - } - - public boolean allTablesAreSelectable() throws SQLException { - return true; - } - - public String getURL() throws SQLException { - return conn.url; - } - - public String getUserName() throws SQLException { - return ""; - } - - public boolean isReadOnly() throws SQLException { - return false; - } - - public boolean nullsAreSortedHigh() throws SQLException { - return false; - } - - public boolean nullsAreSortedLow() throws SQLException { - return false; - } - - public boolean nullsAreSortedAtStart() throws SQLException { - return false; - } - - public boolean nullsAreSortedAtEnd() throws SQLException { - return false; - } - - public String getDatabaseProductName() throws SQLException { - return "SQLite"; - } - - public String getDatabaseProductVersion() throws SQLException { - return SQLite.Database.version(); - } - - public String getDriverName() throws SQLException { - return "SQLite/JDBC"; - } - - public String getDriverVersion() throws SQLException { - return "" + SQLite.JDBCDriver.MAJORVERSION + "." + - SQLite.JDBCDriver.MINORVERSION; - } - - public int getDriverMajorVersion() { - return SQLite.JDBCDriver.MAJORVERSION; - } - - public int getDriverMinorVersion() { - return SQLite.JDBCDriver.MINORVERSION; - } - - public boolean usesLocalFiles() throws SQLException { - return true; - } - - public boolean usesLocalFilePerTable() throws SQLException { - return false; - } - - public boolean supportsMixedCaseIdentifiers() throws SQLException { - return false; - } - - public boolean storesUpperCaseIdentifiers() throws SQLException { - return false; - } - - public boolean storesLowerCaseIdentifiers() throws SQLException { - return false; - } - - public boolean storesMixedCaseIdentifiers() throws SQLException { - return true; - } - - public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException { - return false; - } - - public boolean storesUpperCaseQuotedIdentifiers() throws SQLException { - return false; - } - - public boolean storesLowerCaseQuotedIdentifiers() throws SQLException { - return false; - } - - public boolean storesMixedCaseQuotedIdentifiers() throws SQLException { - return true; - } - - public String getIdentifierQuoteString() throws SQLException { - return "\""; - } - - public String getSQLKeywords() throws SQLException { - return "SELECT,UPDATE,CREATE,TABLE,VIEW,DELETE,FROM,WHERE" + - ",COMMIT,ROLLBACK,TRIGGER"; - } - - public String getNumericFunctions() throws SQLException { - return ""; - } - - public String getStringFunctions() throws SQLException { - return ""; - } - - public String getSystemFunctions() throws SQLException { - return ""; - } - - public String getTimeDateFunctions() throws SQLException { - return ""; - } - - public String getSearchStringEscape() throws SQLException { - return "\\"; - } - - public String getExtraNameCharacters() throws SQLException { - return ""; - } - - public boolean supportsAlterTableWithAddColumn() throws SQLException { - return false; - } - - public boolean supportsAlterTableWithDropColumn() throws SQLException { - return false; - } - - public boolean supportsColumnAliasing() throws SQLException { - return true; - } - - public boolean nullPlusNonNullIsNull() throws SQLException { - return false; - } - - public boolean supportsConvert() throws SQLException { - return false; - } - - public boolean supportsConvert(int fromType, int toType) - throws SQLException { - return false; - } - - public boolean supportsTableCorrelationNames() throws SQLException { - return true; - } - - public boolean supportsDifferentTableCorrelationNames() - throws SQLException { - return false; - } - - public boolean supportsExpressionsInOrderBy() throws SQLException { - return true; - } - - public boolean supportsOrderByUnrelated() throws SQLException { - return true; - } - - public boolean supportsGroupBy() throws SQLException { - return true; - } - - public boolean supportsGroupByUnrelated() throws SQLException { - return true; - } - - public boolean supportsGroupByBeyondSelect() throws SQLException { - return false; - } - - public boolean supportsLikeEscapeClause() throws SQLException { - return false; - } - - public boolean supportsMultipleResultSets() throws SQLException { - return false; - } - - public boolean supportsMultipleTransactions() throws SQLException { - return false; - } - - public boolean supportsNonNullableColumns() throws SQLException { - return true; - } - - public boolean supportsMinimumSQLGrammar() throws SQLException { - return true; - } - - public boolean supportsCoreSQLGrammar() throws SQLException { - return false; - } - - public boolean supportsExtendedSQLGrammar() throws SQLException { - return false; - } - - public boolean supportsANSI92EntryLevelSQL() throws SQLException { - return true; - } - - public boolean supportsANSI92IntermediateSQL() throws SQLException { - return false; - } - - public boolean supportsANSI92FullSQL() throws SQLException { - return false; - } - - public boolean supportsIntegrityEnhancementFacility() - throws SQLException { - return false; - } - - public boolean supportsOuterJoins() throws SQLException { - return false; - } - - public boolean supportsFullOuterJoins() throws SQLException { - return false; - } - - public boolean supportsLimitedOuterJoins() throws SQLException { - return false; - } - - public String getSchemaTerm() throws SQLException { - return ""; - } - - public String getProcedureTerm() throws SQLException { - return ""; - } - - public String getCatalogTerm() throws SQLException { - return ""; - } - - public boolean isCatalogAtStart() throws SQLException { - return false; - } - - public String getCatalogSeparator() throws SQLException { - return ""; - } - - public boolean supportsSchemasInDataManipulation() throws SQLException { - return false; - } - - public boolean supportsSchemasInProcedureCalls() throws SQLException { - return false; - } - - public boolean supportsSchemasInTableDefinitions() throws SQLException { - return false; - } - - public boolean supportsSchemasInIndexDefinitions() throws SQLException { - return false; - } - - public boolean supportsSchemasInPrivilegeDefinitions() - throws SQLException { - return false; - } - - public boolean supportsCatalogsInDataManipulation() throws SQLException { - return false; - } - - public boolean supportsCatalogsInProcedureCalls() throws SQLException { - return false; - } - - public boolean supportsCatalogsInTableDefinitions() throws SQLException { - return false; - } - - public boolean supportsCatalogsInIndexDefinitions() throws SQLException { - return false; - } - - public boolean supportsCatalogsInPrivilegeDefinitions() - throws SQLException { - return false; - } - - public boolean supportsPositionedDelete() throws SQLException { - return false; - } - - public boolean supportsPositionedUpdate() throws SQLException { - return false; - } - - public boolean supportsSelectForUpdate() throws SQLException { - return true; - } - - public boolean supportsStoredProcedures() throws SQLException { - return false; - } - - public boolean supportsSubqueriesInComparisons() throws SQLException { - return true; - } - - public boolean supportsSubqueriesInExists() throws SQLException { - return true; - } - - public boolean supportsSubqueriesInIns() throws SQLException { - return true; - } - - public boolean supportsSubqueriesInQuantifieds() throws SQLException { - return false; - } - - public boolean supportsCorrelatedSubqueries() throws SQLException { - return false; - } - - public boolean supportsUnion() throws SQLException { - return false; - } - - public boolean supportsUnionAll() throws SQLException { - return false; - } - - public boolean supportsOpenCursorsAcrossCommit() throws SQLException { - return false; - } - - public boolean supportsOpenCursorsAcrossRollback() throws SQLException { - return false; - } - - public boolean supportsOpenStatementsAcrossCommit() throws SQLException { - return false; - } - - public boolean supportsOpenStatementsAcrossRollback() throws SQLException { - return false; - } - - public int getMaxBinaryLiteralLength() throws SQLException { - return 0; - } - - public int getMaxCharLiteralLength() throws SQLException { - return 0; - } - - public int getMaxColumnNameLength() throws SQLException { - return 0; - } - - public int getMaxColumnsInGroupBy() throws SQLException { - return 0; - } - - public int getMaxColumnsInIndex() throws SQLException { - return 0; - } - - public int getMaxColumnsInOrderBy() throws SQLException { - return 0; - } - - public int getMaxColumnsInSelect() throws SQLException { - return 0; - } - - public int getMaxColumnsInTable() throws SQLException { - return 0; - } - - public int getMaxConnections() throws SQLException { - return 0; - } - - public int getMaxCursorNameLength() throws SQLException { - return 8; - } - - public int getMaxIndexLength() throws SQLException { - return 0; - } - - public int getMaxSchemaNameLength() throws SQLException { - return 0; - } - - public int getMaxProcedureNameLength() throws SQLException { - return 0; - } - - public int getMaxCatalogNameLength() throws SQLException { - return 0; - } - - public int getMaxRowSize() throws SQLException { - return 0; - } - - public boolean doesMaxRowSizeIncludeBlobs() throws SQLException { - return true; - } - - public int getMaxStatementLength() throws SQLException { - return 0; - } - - public int getMaxStatements() throws SQLException { - return 0; - } - - public int getMaxTableNameLength() throws SQLException { - return 0; - } - - public int getMaxTablesInSelect() throws SQLException { - return 0; - } - - public int getMaxUserNameLength() throws SQLException { - return 0; - } - - public int getDefaultTransactionIsolation() throws SQLException { - return Connection.TRANSACTION_SERIALIZABLE; - } - - public boolean supportsTransactions() throws SQLException { - return true; - } - - public boolean supportsTransactionIsolationLevel(int level) - throws SQLException { - return level == Connection.TRANSACTION_SERIALIZABLE; - } - - public boolean supportsDataDefinitionAndDataManipulationTransactions() - throws SQLException { - return true; - } - - public boolean supportsDataManipulationTransactionsOnly() - throws SQLException { - return false; - } - - public boolean dataDefinitionCausesTransactionCommit() - throws SQLException { - return false; - } - - public boolean dataDefinitionIgnoredInTransactions() throws SQLException { - return false; - } - - public ResultSet getProcedures(String catalog, String schemaPattern, - String procedureNamePattern) - throws SQLException { - return null; - } - - public ResultSet getProcedureColumns(String catalog, - String schemaPattern, - String procedureNamePattern, - String columnNamePattern) - throws SQLException { - return null; - } - - public ResultSet getTables(String catalog, String schemaPattern, - String tableNamePattern, String types[]) - throws SQLException { - JDBCStatement s = new JDBCStatement(conn); - StringBuffer sb = new StringBuffer(); - sb.append("SELECT '' AS 'TABLE_CAT', " + - "'' AS 'TABLE_SCHEM', " + - "tbl_name AS 'TABLE_NAME', " + - "upper(type) AS 'TABLE_TYPE', " + - "'' AS REMARKS FROM sqlite_master " + - "WHERE tbl_name like "); - if (tableNamePattern != null) { - sb.append(SQLite.Shell.sql_quote(tableNamePattern)); - } else { - sb.append("'%'"); - } - sb.append(" AND "); - if (types == null || types.length == 0) { - sb.append("(type = 'table' or type = 'view')"); - } else { - sb.append("("); - String sep = ""; - for (int i = 0; i < types.length; i++) { - sb.append(sep); - sb.append("type = "); - sb.append(SQLite.Shell.sql_quote(types[i].toLowerCase())); - sep = " or "; - } - sb.append(")"); - } - ResultSet rs = null; - try { - rs = s.executeQuery(sb.toString()); - s.close(); - } catch (SQLException e) { - throw e; - } finally { - s.close(); - } - return rs; - } - - public ResultSet getSchemas() throws SQLException { - String cols[] = { "TABLE_SCHEM" }; - SQLite.TableResult tr = new SQLite.TableResult(); - tr.columns(cols); - String row[] = { "" }; - tr.newrow(row); - JDBCResultSet rs = new JDBCResultSet(tr, null); - return (ResultSet) rs; - } - - public ResultSet getCatalogs() throws SQLException { - String cols[] = { "TABLE_CAT" }; - SQLite.TableResult tr = new SQLite.TableResult(); - tr.columns(cols); - String row[] = { "" }; - tr.newrow(row); - JDBCResultSet rs = new JDBCResultSet(tr, null); - return (ResultSet) rs; - } - - public ResultSet getTableTypes() throws SQLException { - String cols[] = { "TABLE_TYPE" }; - SQLite.TableResult tr = new SQLite.TableResult(); - tr.columns(cols); - String row[] = new String[1]; - row[0] = "TABLE"; - tr.newrow(row); - row = new String[1]; - row[0] = "VIEW"; - tr.newrow(row); - JDBCResultSet rs = new JDBCResultSet(tr, null); - return (ResultSet) rs; - } - - public ResultSet getColumns(String catalog, String schemaPattern, - String tableNamePattern, - String columnNamePattern) - throws SQLException { - JDBCStatement s = new JDBCStatement(conn); - JDBCResultSet rs0 = null; - try { - rs0 = (JDBCResultSet) - (s.executeQuery("PRAGMA table_info(" + - SQLite.Shell.sql_quote(tableNamePattern) + - ")")); - s.close(); - } catch (SQLException e) { - throw e; - } finally { - s.close(); - } - String cols[] = { - "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", - "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", - "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_POINTS", - "NUM_PREC_RADIX", "NULLABLE", "REMARKS", - "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", - "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE" - }; - int types[] = { - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.SMALLINT, Types.VARCHAR, - Types.INTEGER, Types.INTEGER, Types.INTEGER, - Types.INTEGER, Types.INTEGER, Types.VARCHAR, - Types.VARCHAR, Types.INTEGER, Types.INTEGER, - Types.INTEGER, Types.INTEGER, Types.VARCHAR - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet((SQLite.TableResult) tr, null); - if (rs0 != null && rs0.tr != null && rs0.tr.nrows > 0) { - Hashtable<String, Integer> h = new Hashtable<String, Integer>(); - for (int i = 0; i < rs0.tr.ncolumns; i++) { - h.put(rs0.tr.column[i], new Integer(i)); - } - if (columnNamePattern != null && - columnNamePattern.charAt(0) == '%') { - columnNamePattern = null; - } - for (int i = 0; i < rs0.tr.nrows; i++) { - String r0[] = (String [])(rs0.tr.rows.elementAt(i)); - int col = ((Integer) h.get("name")).intValue(); - if (columnNamePattern != null) { - if (r0[col].compareTo(columnNamePattern) != 0) { - continue; - } - } - String row[] = new String[cols.length]; - row[0] = ""; - row[1] = ""; - row[2] = tableNamePattern; - row[3] = r0[col]; - col = ((Integer) h.get("type")).intValue(); - String typeStr = r0[col]; - int type = mapSqlType(typeStr); - row[4] = "" + type; - row[5] = mapTypeName(type); - row[6] = "" + getD(typeStr, type); - row[7] = "" + getM(typeStr, type); - row[8] = "10"; - row[9] = "0"; - row[11] = null; - col = ((Integer) h.get("dflt_value")).intValue(); - row[12] = r0[col]; - row[13] = "0"; - row[14] = "0"; - row[15] = "65536"; - col = ((Integer) h.get("cid")).intValue(); - Integer cid = new Integer(r0[col]); - row[16] = "" + (cid.intValue() + 1); - col = ((Integer) h.get("notnull")).intValue(); - row[17] = (r0[col].charAt(0) == '0') ? "YES" : "NO"; - row[10] = (r0[col].charAt(0) == '0') ? "" + columnNullable : - "" + columnNoNulls; - tr.newrow(row); - } - } - return rs; - } - - public ResultSet getColumnPrivileges(String catalog, String schema, - String table, - String columnNamePattern) - throws SQLException { - String cols[] = { - "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", - "COLUMN_NAME", "GRANTOR", "GRANTEE", - "PRIVILEGE", "IS_GRANTABLE" - }; - int types[] = { - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet((SQLite.TableResult) tr, null); - return rs; - } - - public ResultSet getTablePrivileges(String catalog, String schemaPattern, - String tableNamePattern) - throws SQLException { - String cols[] = { - "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", - "COLUMN_NAME", "GRANTOR", "GRANTEE", - "PRIVILEGE", "IS_GRANTABLE" - }; - int types[] = { - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet((SQLite.TableResult) tr, null); - return rs; - } - - public ResultSet getBestRowIdentifier(String catalog, String schema, - String table, int scope, - boolean nullable) - throws SQLException { - JDBCStatement s0 = new JDBCStatement(conn); - JDBCResultSet rs0 = null; - JDBCStatement s1 = new JDBCStatement(conn); - JDBCResultSet rs1 = null; - try { - rs0 = (JDBCResultSet) - (s0.executeQuery("PRAGMA index_list(" + - SQLite.Shell.sql_quote(table) + ")")); - rs1 = (JDBCResultSet) - (s1.executeQuery("PRAGMA table_info(" + - SQLite.Shell.sql_quote(table) + ")")); - } catch (SQLException e) { - throw e; - } finally { - s0.close(); - s1.close(); - } - String cols[] = { - "SCOPE", "COLUMN_NAME", "DATA_TYPE", - "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", - "DECIMAL_DIGITS", "PSEUDO_COLUMN" - }; - int types[] = { - Types.SMALLINT, Types.VARCHAR, Types.SMALLINT, - Types.VARCHAR, Types.INTEGER, Types.INTEGER, - Types.SMALLINT, Types.SMALLINT - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet((SQLite.TableResult) tr, null); - if (rs0 != null && rs0.tr != null && rs0.tr.nrows > 0 && - rs1 != null && rs1.tr != null && rs1.tr.nrows > 0) { - Hashtable<String, Integer> h0 = new Hashtable<String, Integer>(); - for (int i = 0; i < rs0.tr.ncolumns; i++) { - h0.put(rs0.tr.column[i], new Integer(i)); - } - Hashtable<String, Integer> h1 = new Hashtable<String, Integer>(); - for (int i = 0; i < rs1.tr.ncolumns; i++) { - h1.put(rs1.tr.column[i], new Integer(i)); - } - for (int i = 0; i < rs0.tr.nrows; i++) { - String r0[] = (String [])(rs0.tr.rows.elementAt(i)); - int col = ((Integer) h0.get("unique")).intValue(); - String uniq = r0[col]; - col = ((Integer) h0.get("name")).intValue(); - String iname = r0[col]; - if (uniq.charAt(0) == '0') { - continue; - } - JDBCStatement s2 = new JDBCStatement(conn); - JDBCResultSet rs2 = null; - try { - rs2 = (JDBCResultSet) - (s2.executeQuery("PRAGMA index_info(" + - SQLite.Shell.sql_quote(iname) + ")")); - } catch (SQLException e) { - } finally { - s2.close(); - } - if (rs2 == null || rs2.tr == null || rs2.tr.nrows <= 0) { - continue; - } - Hashtable<String, Integer> h2 = - new Hashtable<String, Integer>(); - for (int k = 0; k < rs2.tr.ncolumns; k++) { - h2.put(rs2.tr.column[k], new Integer(k)); - } - for (int k = 0; k < rs2.tr.nrows; k++) { - String r2[] = (String [])(rs2.tr.rows.elementAt(k)); - col = ((Integer) h2.get("name")).intValue(); - String cname = r2[col]; - for (int m = 0; m < rs1.tr.nrows; m++) { - String r1[] = (String [])(rs1.tr.rows.elementAt(m)); - col = ((Integer) h1.get("name")).intValue(); - if (cname.compareTo(r1[col]) == 0) { - String row[] = new String[cols.length]; - row[0] = "" + scope; - row[1] = cname; - row[2] = "" + Types.VARCHAR; - row[3] = "VARCHAR"; - row[4] = "65536"; - row[5] = "0"; - row[6] = "0"; - row[7] = "" + bestRowNotPseudo; - tr.newrow(row); - } - } - } - } - } - if (tr.nrows <= 0) { - String row[] = new String[cols.length]; - row[0] = "" + scope; - row[1] = "_ROWID_"; - row[2] = "" + Types.INTEGER; - row[3] = "INTEGER"; - row[4] = "10"; - row[5] = "0"; - row[6] = "0"; - row[7] = "" + bestRowPseudo; - tr.newrow(row); - } - return rs; - } - - public ResultSet getVersionColumns(String catalog, String schema, - String table) throws SQLException { - String cols[] = { - "SCOPE", "COLUMN_NAME", "DATA_TYPE", - "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", - "DECIMAL_DIGITS", "PSEUDO_COLUMN" - }; - int types[] = { - Types.SMALLINT, Types.VARCHAR, Types.SMALLINT, - Types.VARCHAR, Types.INTEGER, Types.INTEGER, - Types.SMALLINT, Types.SMALLINT - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet((SQLite.TableResult) tr, null); - return rs; - } - - public ResultSet getPrimaryKeys(String catalog, String schema, - String table) throws SQLException { - JDBCStatement s0 = new JDBCStatement(conn); - JDBCResultSet rs0 = null; - try { - rs0 = (JDBCResultSet) - (s0.executeQuery("PRAGMA index_list(" + - SQLite.Shell.sql_quote(table) + ")")); - } catch (SQLException e) { - throw e; - } finally { - s0.close(); - } - String cols[] = { - "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", - "COLUMN_NAME", "KEY_SEQ", "PK_NAME" - }; - int types[] = { - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.SMALLINT, Types.VARCHAR - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet((SQLite.TableResult) tr, null); - if (rs0 != null && rs0.tr != null && rs0.tr.nrows > 0) { - Hashtable<String, Integer> h0 = new Hashtable<String, Integer>(); - for (int i = 0; i < rs0.tr.ncolumns; i++) { - h0.put(rs0.tr.column[i], new Integer(i)); - } - for (int i = 0; i < rs0.tr.nrows; i++) { - String r0[] = (String [])(rs0.tr.rows.elementAt(i)); - int col = ((Integer) h0.get("unique")).intValue(); - String uniq = r0[col]; - col = ((Integer) h0.get("name")).intValue(); - String iname = r0[col]; - if (uniq.charAt(0) == '0') { - continue; - } - JDBCStatement s1 = new JDBCStatement(conn); - JDBCResultSet rs1 = null; - try { - rs1 = (JDBCResultSet) - (s1.executeQuery("PRAGMA index_info(" + - SQLite.Shell.sql_quote(iname) + ")")); - } catch (SQLException e) { - } finally { - s1.close(); - } - if (rs1 == null || rs1.tr == null || rs1.tr.nrows <= 0) { - continue; - } - Hashtable<String, Integer> h1 = - new Hashtable<String, Integer>(); - for (int k = 0; k < rs1.tr.ncolumns; k++) { - h1.put(rs1.tr.column[k], new Integer(k)); - } - for (int k = 0; k < rs1.tr.nrows; k++) { - String r1[] = (String [])(rs1.tr.rows.elementAt(k)); - String row[] = new String[cols.length]; - row[0] = ""; - row[1] = ""; - row[2] = table; - col = ((Integer) h1.get("name")).intValue(); - row[3] = r1[col]; - col = ((Integer) h1.get("seqno")).intValue(); -// BEGIN android-changed - row[4] = "" + (Integer.parseInt(r1[col]) + 1); -// END android-changed - row[5] = iname; - tr.newrow(row); - } - } - } - JDBCStatement s1 = new JDBCStatement(conn); - try { - rs0 = (JDBCResultSet) - (s1.executeQuery("PRAGMA table_info(" + - SQLite.Shell.sql_quote(table) + ")")); - } catch (SQLException e) { - throw e; - } finally { - s1.close(); - } - if (rs0 != null && rs0.tr != null && rs0.tr.nrows > 0) { - Hashtable<String, Integer> h0 = new Hashtable<String, Integer>(); - for (int i = 0; i < rs0.tr.ncolumns; i++) { - h0.put(rs0.tr.column[i], new Integer(i)); - } - for (int i = 0; i < rs0.tr.nrows; i++) { - String r0[] = (String [])(rs0.tr.rows.elementAt(i)); - int col = ((Integer) h0.get("type")).intValue(); - String type = r0[col]; - if (!type.equalsIgnoreCase("integer")) { - continue; - } - col = ((Integer) h0.get("pk")).intValue(); - String pk = r0[col]; - if (pk.charAt(0) == '0') { - continue; - } - String row[] = new String[cols.length]; - row[0] = ""; - row[1] = ""; - row[2] = table; - col = ((Integer) h0.get("name")).intValue(); - row[3] = r0[col]; - col = ((Integer) h0.get("cid")).intValue(); -// BEGIN android-changed - row[4] = "" + (Integer.parseInt(r0[col]) + 1); -// END android-changed - row[5] = ""; - tr.newrow(row); - } - } - return rs; - } - - private void internalImportedKeys(String table, String pktable, - JDBCResultSet in, TableResultX out) { - Hashtable<String, Integer> h0 = new Hashtable<String, Integer>(); - for (int i = 0; i < in.tr.ncolumns; i++) { - h0.put(in.tr.column[i], new Integer(i)); - } - for (int i = 0; i < in.tr.nrows; i++) { - String r0[] = (String [])(in.tr.rows.elementAt(i)); - int col = ((Integer) h0.get("table")).intValue(); - String pktab = r0[col]; - if (pktable != null && !pktable.equalsIgnoreCase(pktab)) { - continue; - } - col = ((Integer) h0.get("from")).intValue(); - String pkcol = r0[col]; - col = ((Integer) h0.get("to")).intValue(); - String fkcol = r0[col]; - col = ((Integer) h0.get("seq")).intValue(); - String seq = r0[col]; - String row[] = new String[out.ncolumns]; - row[0] = ""; - row[1] = ""; - row[2] = pktab; - row[3] = pkcol; - row[4] = ""; - row[5] = ""; - row[6] = table; - row[7] = fkcol == null ? pkcol : fkcol; -// BEGIN android-changed - row[8] = "" + ((Integer.parseInt(seq)) + 1); -// END android-changed - row[9] = - "" + java.sql.DatabaseMetaData.importedKeyNoAction; - row[10] = - "" + java.sql.DatabaseMetaData.importedKeyNoAction; - row[11] = null; - row[12] = null; - row[13] = - "" + java.sql.DatabaseMetaData.importedKeyNotDeferrable; - out.newrow(row); - } - } - - public ResultSet getImportedKeys(String catalog, String schema, - String table) throws SQLException { - JDBCStatement s0 = new JDBCStatement(conn); - JDBCResultSet rs0 = null; - try { - rs0 = (JDBCResultSet) - (s0.executeQuery("PRAGMA foreign_key_list(" + - SQLite.Shell.sql_quote(table) + ")")); - } catch (SQLException e) { - throw e; - } finally { - s0.close(); - } - String cols[] = { - "PKTABLE_CAT", "PKTABLE_SCHEM", "PKTABLE_NAME", - "PKCOLUMN_NAME", "FKTABLE_CAT", "FKTABLE_SCHEM", - "FKTABLE_NAME", "FKCOLUMN_NAME", "KEY_SEQ", - "UPDATE_RULE", "DELETE_RULE", "FK_NAME", - "PK_NAME", "DEFERRABILITY" - }; - int types[] = { - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, - Types.SMALLINT, Types.SMALLINT, Types.VARCHAR, - Types.VARCHAR, Types.SMALLINT - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet((SQLite.TableResult) tr, null); - if (rs0 != null && rs0.tr != null && rs0.tr.nrows > 0) { - internalImportedKeys(table, null, rs0, tr); - } - return rs; - } - - public ResultSet getExportedKeys(String catalog, String schema, - String table) throws SQLException { - String cols[] = { - "PKTABLE_CAT", "PKTABLE_SCHEM", "PKTABLE_NAME", - "PKCOLUMN_NAME", "FKTABLE_CAT", "FKTABLE_SCHEM", - "FKTABLE_NAME", "FKCOLUMN_NAME", "KEY_SEQ", - "UPDATE_RULE", "DELETE_RULE", "FK_NAME", - "PK_NAME", "DEFERRABILITY" - }; - int types[] = { - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, - Types.SMALLINT, Types.SMALLINT, Types.VARCHAR, - Types.VARCHAR, Types.SMALLINT - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet(tr, null); - return rs; - } - - public ResultSet getCrossReference(String primaryCatalog, - String primarySchema, - String primaryTable, - String foreignCatalog, - String foreignSchema, - String foreignTable) - throws SQLException { - JDBCResultSet rs0 = null; - if (foreignTable != null && foreignTable.charAt(0) != '%') { - JDBCStatement s0 = new JDBCStatement(conn); - try { - rs0 = (JDBCResultSet) - (s0.executeQuery("PRAGMA foreign_key_list(" + - SQLite.Shell.sql_quote(foreignTable) + ")")); - } catch (SQLException e) { - throw e; - } finally { - s0.close(); - } - } - String cols[] = { - "PKTABLE_CAT", "PKTABLE_SCHEM", "PKTABLE_NAME", - "PKCOLUMN_NAME", "FKTABLE_CAT", "FKTABLE_SCHEM", - "FKTABLE_NAME", "FKCOLUMN_NAME", "KEY_SEQ", - "UPDATE_RULE", "DELETE_RULE", "FK_NAME", - "PK_NAME", "DEFERRABILITY" - }; - int types[] = { - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, - Types.SMALLINT, Types.SMALLINT, Types.VARCHAR, - Types.VARCHAR, Types.SMALLINT - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet(tr, null); - if (rs0 != null && rs0.tr != null && rs0.tr.nrows > 0) { - String pktable = null; - if (primaryTable != null && primaryTable.charAt(0) != '%') { - pktable = primaryTable; - } - internalImportedKeys(foreignTable, pktable, rs0, tr); - } - return rs; - } - - public ResultSet getTypeInfo() throws SQLException { - String cols[] = { - "TYPE_NAME", "DATA_TYPE", "PRECISION", - "LITERAL_PREFIX", "LITERAL_SUFFIX", "CREATE_PARAMS", - "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", - "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_INCREMENT", - "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", - "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX" - }; - int types[] = { - Types.VARCHAR, Types.SMALLINT, Types.INTEGER, - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.SMALLINT, Types.BIT, Types.SMALLINT, - Types.BIT, Types.BIT, Types.BIT, - Types.VARCHAR, Types.SMALLINT, Types.SMALLINT, - Types.INTEGER, Types.INTEGER, Types.INTEGER - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet(tr, null); - String row1[] = { - "VARCHAR", "" + Types.VARCHAR, "65536", - "'", "'", null, - "" + typeNullable, "1", "" + typeSearchable, - "0", "0", "0", - null, "0", "0", - "0", "0", "0" - }; - tr.newrow(row1); - String row2[] = { - "INTEGER", "" + Types.INTEGER, "32", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "2" - }; - tr.newrow(row2); - String row3[] = { - "DOUBLE", "" + Types.DOUBLE, "16", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "10" - }; - tr.newrow(row3); - String row4[] = { - "FLOAT", "" + Types.FLOAT, "7", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "10" - }; - tr.newrow(row4); - String row5[] = { - "SMALLINT", "" + Types.SMALLINT, "16", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "2" - }; - tr.newrow(row5); - String row6[] = { - "BIT", "" + Types.BIT, "1", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "2" - }; - tr.newrow(row6); - String row7[] = { - "TIMESTAMP", "" + Types.TIMESTAMP, "30", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "0" - }; - tr.newrow(row7); - String row8[] = { - "DATE", "" + Types.DATE, "10", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "0" - }; - tr.newrow(row8); - String row9[] = { - "TIME", "" + Types.TIME, "8", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "0" - }; - tr.newrow(row9); - String row10[] = { - "BINARY", "" + Types.BINARY, "65536", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "0" - }; - tr.newrow(row10); - String row11[] = { - "VARBINARY", "" + Types.VARBINARY, "65536", - null, null, null, - "" + typeNullable, "0", "" + typeSearchable, - "0", "0", "1", - null, "0", "0", - "0", "0", "0" - }; - tr.newrow(row11); - return rs; - } - - public ResultSet getIndexInfo(String catalog, String schema, String table, - boolean unique, boolean approximate) - throws SQLException { - JDBCStatement s0 = new JDBCStatement(conn); - JDBCResultSet rs0 = null; - try { - rs0 = (JDBCResultSet) - (s0.executeQuery("PRAGMA index_list(" + - SQLite.Shell.sql_quote(table) + ")")); - } catch (SQLException e) { - throw e; - } finally { - s0.close(); - } - String cols[] = { - "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", - "NON_UNIQUE", "INDEX_QUALIFIER", "INDEX_NAME", - "TYPE", "ORDINAL_POSITION", "COLUMN_NAME", - "ASC_OR_DESC", "CARDINALITY", "PAGES", - "FILTER_CONDITION" - }; - int types[] = { - Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, - Types.BIT, Types.VARCHAR, Types.VARCHAR, - Types.SMALLINT, Types.SMALLINT, Types.VARCHAR, - Types.VARCHAR, Types.INTEGER, Types.INTEGER, - Types.VARCHAR - }; - TableResultX tr = new TableResultX(); - tr.columns(cols); - tr.sql_types(types); - JDBCResultSet rs = new JDBCResultSet(tr, null); - if (rs0 != null && rs0.tr != null && rs0.tr.nrows > 0) { - Hashtable<String, Integer> h0 = new Hashtable<String, Integer>(); - for (int i = 0; i < rs0.tr.ncolumns; i++) { - h0.put(rs0.tr.column[i], new Integer(i)); - } - for (int i = 0; i < rs0.tr.nrows; i++) { - String r0[] = (String [])(rs0.tr.rows.elementAt(i)); - int col = ((Integer) h0.get("unique")).intValue(); - String uniq = r0[col]; - col = ((Integer) h0.get("name")).intValue(); - String iname = r0[col]; - if (unique && uniq.charAt(0) == '0') { - continue; - } - JDBCStatement s1 = new JDBCStatement(conn); - JDBCResultSet rs1 = null; - try { - rs1 = (JDBCResultSet) - (s1.executeQuery("PRAGMA index_info(" + - SQLite.Shell.sql_quote(iname) + ")")); - } catch (SQLException e) { - } finally { - s1.close(); - } - if (rs1 == null || rs1.tr == null || rs1.tr.nrows <= 0) { - continue; - } - Hashtable<String, Integer> h1 = - new Hashtable<String, Integer>(); - for (int k = 0; k < rs1.tr.ncolumns; k++) { - h1.put(rs1.tr.column[k], new Integer(k)); - } - for (int k = 0; k < rs1.tr.nrows; k++) { - String r1[] = (String [])(rs1.tr.rows.elementAt(k)); - String row[] = new String[cols.length]; - row[0] = ""; - row[1] = ""; - row[2] = table; - row[3] = (uniq.charAt(0) != '0' || - (iname.charAt(0) == '(' && - iname.indexOf(" autoindex ") > 0)) ? "0" : "1"; - row[4] = ""; - row[5] = iname; - row[6] = "" + tableIndexOther; - col = ((Integer) h1.get("seqno")).intValue(); -// BEGIN android-changed - row[7] = "" + (Integer.parseInt(r1[col]) + 1); -// END android-changed - col = ((Integer) h1.get("name")).intValue(); - row[8] = r1[col]; - row[9] = "A"; - row[10] = "0"; - row[11] = "0"; - row[12] = null; - tr.newrow(row); - } - } - } - return rs; - } - - public boolean supportsResultSetType(int type) throws SQLException { - return type == ResultSet.CONCUR_READ_ONLY; - } - - public boolean supportsResultSetConcurrency(int type, int concurrency) - throws SQLException { - return false; - } - - public boolean ownUpdatesAreVisible(int type) throws SQLException { - return false; - } - - public boolean ownDeletesAreVisible(int type) throws SQLException { - return false; - } - - public boolean ownInsertsAreVisible(int type) throws SQLException { - return false; - } - - public boolean othersUpdatesAreVisible(int type) throws SQLException { - return false; - } - - public boolean othersDeletesAreVisible(int type) throws SQLException { - return false; - } - - public boolean othersInsertsAreVisible(int type) throws SQLException { - return false; - } - - public boolean updatesAreDetected(int type) throws SQLException { - return false; - } - - public boolean deletesAreDetected(int type) throws SQLException { - return false; - } - - public boolean insertsAreDetected(int type) throws SQLException { - return false; - } - - public boolean supportsBatchUpdates() throws SQLException { - return false; - } - - public ResultSet getUDTs(String catalog, String schemaPattern, - String typeNamePattern, int[] types) - throws SQLException { - return null; - } - - public Connection getConnection() throws SQLException { - return conn; - } - - static String mapTypeName(int type) { - switch (type) { - case Types.INTEGER: return "integer"; - case Types.SMALLINT: return "smallint"; - case Types.FLOAT: return "float"; - case Types.DOUBLE: return "double"; - case Types.TIMESTAMP: return "timestamp"; - case Types.DATE: return "date"; - case Types.TIME: return "time"; - case Types.BINARY: return "binary"; - case Types.VARBINARY: return "varbinary"; - } - return "varchar"; - } - - static int mapSqlType(String type) { - if (type == null) { - return Types.VARCHAR; - } - type = type.toLowerCase(); - if (type.startsWith("inter")) { - return Types.VARCHAR; - } - if (type.startsWith("numeric") || - type.startsWith("int")) { - return Types.INTEGER; - } - if (type.startsWith("tinyint") || - type.startsWith("smallint")) { - return Types.SMALLINT; - } - if (type.startsWith("float")) { - return Types.FLOAT; - } - if (type.startsWith("double")) { - return Types.DOUBLE; - } - if (type.startsWith("datetime") || - type.startsWith("timestamp")) { - return Types.TIMESTAMP; - } - if (type.startsWith("date")) { - return Types.DATE; - } - if (type.startsWith("time")) { - return Types.TIME; - } - if (type.startsWith("blob")) { - return Types.BINARY; - } - if (type.startsWith("binary")) { - return Types.BINARY; - } - if (type.startsWith("varbinary")) { - return Types.VARBINARY; - } - return Types.VARCHAR; - } - - static int getM(String typeStr, int type) { - int m = 65536; - switch (type) { - case Types.INTEGER: m = 11; break; - case Types.SMALLINT: m = 6; break; - case Types.FLOAT: m = 25; break; - case Types.DOUBLE: m = 54; break; - case Types.TIMESTAMP: return 30; - case Types.DATE: return 10; - case Types.TIME: return 8; - } - typeStr = typeStr.toLowerCase(); - int i1 = typeStr.indexOf('('); - if (i1 > 0) { - ++i1; - int i2 = typeStr.indexOf(',', i1); - if (i2 < 0) { - i2 = typeStr.indexOf(')', i1); - } - if (i2 - i1 > 0) { - String num = typeStr.substring(i1, i2); - try { - m = java.lang.Integer.parseInt(num, 10); - } catch (NumberFormatException e) { - } - } - } - return m; - } - - static int getD(String typeStr, int type) { - int d = 0; - switch (type) { - case Types.INTEGER: d = 10; break; - case Types.SMALLINT: d = 5; break; - case Types.FLOAT: d = 24; break; - case Types.DOUBLE: d = 53; break; - default: return getM(typeStr, type); - } - typeStr = typeStr.toLowerCase(); - int i1 = typeStr.indexOf('('); - if (i1 > 0) { - ++i1; - int i2 = typeStr.indexOf(',', i1); - if (i2 < 0) { - return getM(typeStr, type); - } - i1 = i2; - i2 = typeStr.indexOf(')', i1); - if (i2 - i1 > 0) { - String num = typeStr.substring(i1, i2); - try { - d = java.lang.Integer.parseInt(num, 10); - } catch (NumberFormatException e) { - } - } - } - return d; - } - - public boolean supportsSavepoints() { - return false; - } - - public boolean supportsNamedParameters() { - return false; - } - - public boolean supportsMultipleOpenResults() { - return false; - } - - public boolean supportsGetGeneratedKeys() { - return false; - } - - public boolean supportsResultSetHoldability(int x) { - return false; - } - - public boolean supportsStatementPooling() { - return false; - } - - public boolean locatorsUpdateCopy() throws SQLException { - throw new SQLException("not supported"); - } - - public ResultSet getSuperTypes(String catalog, String schemaPattern, - String typeNamePattern) - throws SQLException { - throw new SQLException("not supported"); - } - - public ResultSet getSuperTables(String catalog, String schemaPattern, - String tableNamePattern) - throws SQLException { - throw new SQLException("not supported"); - } - - public ResultSet getAttributes(String catalog, String schemaPattern, - String typeNamePattern, - String attributeNamePattern) - throws SQLException { - throw new SQLException("not supported"); - } - - public int getResultSetHoldability() throws SQLException { - return ResultSet.HOLD_CURSORS_OVER_COMMIT; - } - - public int getDatabaseMajorVersion() { - return SQLite.JDBCDriver.MAJORVERSION; - } - - public int getDatabaseMinorVersion() { - return SQLite.JDBCDriver.MINORVERSION; - } - - public int getJDBCMajorVersion() { - return 1; - } - - public int getJDBCMinorVersion() { - return 0; - } - - public int getSQLStateType() throws SQLException { - return sqlStateXOpen; - } - -} diff --git a/sql/src/main/java/SQLite/JDBC2y/JDBCPreparedStatement.java b/sql/src/main/java/SQLite/JDBC2y/JDBCPreparedStatement.java deleted file mode 100644 index ab81867..0000000 --- a/sql/src/main/java/SQLite/JDBC2y/JDBCPreparedStatement.java +++ /dev/null @@ -1,752 +0,0 @@ -package SQLite.JDBC2y; - -import java.sql.*; -import java.math.BigDecimal; -import java.util.*; - -class BatchArg { - String arg; - boolean blob; - - BatchArg(String arg, boolean blob) { - if (arg == null) { - this.arg = null; - } else { - this.arg = new String(arg); - } - this.blob = blob; - } -} - -public class JDBCPreparedStatement extends JDBCStatement - implements java.sql.PreparedStatement { - - private String sql; - private String args[]; - private boolean blobs[]; - private ArrayList<BatchArg> batch; - private static final boolean nullrepl = - SQLite.Database.version().compareTo("2.5.0") < 0; - - public JDBCPreparedStatement(JDBCConnection conn, String sql) { - super(conn); - this.args = null; - this.blobs = null; - this.batch = null; - this.sql = fixup(sql); - } - - private String fixup(String sql) { - StringBuffer sb = new StringBuffer(); - boolean inq = false; - int nparm = 0; - for (int i = 0; i < sql.length(); i++) { - char c = sql.charAt(i); - if (c == '\'') { - if (inq) { - char nextChar = 0; - if(i + 1 < sql.length()) { - nextChar = sql.charAt(i + 1); - } - if (nextChar == '\'') { - sb.append(c); - sb.append(nextChar); - i++; - } else { - inq = false; - sb.append(c); - } - } else { - inq = true; - sb.append(c); - } - } else if (c == '?') { - if (inq) { - sb.append(c); - } else { - ++nparm; - sb.append(nullrepl ? "'%q'" : "%Q"); - } - } else if (c == ';') { - if (!inq) { - break; - } - sb.append(c); - } else if (c == '%') { - sb.append("%%"); - } else { - sb.append(c); - } - } - args = new String[nparm]; - blobs = new boolean[nparm]; - try { - clearParameters(); - } catch (SQLException e) { - } - return sb.toString(); - } - - private String fixup2(String sql) { - if (!conn.db.is3()) { - return sql; - } - StringBuffer sb = new StringBuffer(); - int parm = -1; - for (int i = 0; i < sql.length(); i++) { - char c = sql.charAt(i); - if (c == '%') { - sb.append(c); - ++i; - c = sql.charAt(i); - if (c == 'Q') { - parm++; - if (blobs[parm]) { - c = 's'; - } - } - } - sb.append(c); - } - return sb.toString(); - } - - public ResultSet executeQuery() throws SQLException { - return executeQuery(fixup2(sql), args, false); - } - - public int executeUpdate() throws SQLException { - executeQuery(fixup2(sql), args, true); - return updcnt; - } - - public void setNull(int parameterIndex, int sqlType) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - args[parameterIndex - 1] = nullrepl ? "" : null; - blobs[parameterIndex - 1] = false; - } - - public void setBoolean(int parameterIndex, boolean x) - throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - args[parameterIndex - 1] = x ? "1" : "0"; - blobs[parameterIndex - 1] = false; - } - - public void setByte(int parameterIndex, byte x) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - args[parameterIndex - 1] = "" + x; - blobs[parameterIndex - 1] = false; - } - - public void setShort(int parameterIndex, short x) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - args[parameterIndex - 1] = "" + x; - blobs[parameterIndex - 1] = false; - } - - public void setInt(int parameterIndex, int x) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - args[parameterIndex - 1] = "" + x; - blobs[parameterIndex - 1] = false; - } - - public void setLong(int parameterIndex, long x) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - args[parameterIndex - 1] = "" + x; - blobs[parameterIndex - 1] = false; - } - - public void setFloat(int parameterIndex, float x) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - args[parameterIndex - 1] = "" + x; - blobs[parameterIndex - 1] = false; - } - - public void setDouble(int parameterIndex, double x) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - args[parameterIndex - 1] = "" + x; - blobs[parameterIndex - 1] = false; - } - - public void setBigDecimal(int parameterIndex, BigDecimal x) - throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - args[parameterIndex - 1] = "" + x; - } - blobs[parameterIndex - 1] = false; - } - - public void setString(int parameterIndex, String x) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - args[parameterIndex - 1] = x; - } - blobs[parameterIndex - 1] = false; - } - - public void setBytes(int parameterIndex, byte x[]) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - blobs[parameterIndex - 1] = false; - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - if (conn.db.is3()) { - args[parameterIndex - 1] = SQLite.StringEncoder.encodeX(x); - blobs[parameterIndex - 1] = true; - } else { - args[parameterIndex - 1] = SQLite.StringEncoder.encode(x); - } - } - } - - public void setDate(int parameterIndex, java.sql.Date x) - throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - args[parameterIndex - 1] = x.toString(); - } - blobs[parameterIndex - 1] = false; - } - - public void setTime(int parameterIndex, java.sql.Time x) - throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - args[parameterIndex - 1] = x.toString(); - } - blobs[parameterIndex - 1] = false; - } - - public void setTimestamp(int parameterIndex, java.sql.Timestamp x) - throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - args[parameterIndex - 1] = x.toString(); - } - blobs[parameterIndex - 1] = false; - } - - public void setAsciiStream(int parameterIndex, java.io.InputStream x, - int length) throws SQLException { - throw new SQLException("not supported"); - } - - @Deprecated - public void setUnicodeStream(int parameterIndex, java.io.InputStream x, - int length) throws SQLException { - throw new SQLException("not supported"); - } - - public void setBinaryStream(int parameterIndex, java.io.InputStream x, - int length) throws SQLException { - throw new SQLException("not supported"); - } - - public void clearParameters() throws SQLException { - for (int i = 0; i < args.length; i++) { - args[i] = nullrepl ? "" : null; - blobs[i] = false; - } - } - - public void setObject(int parameterIndex, Object x, int targetSqlType, - int scale) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - if (x instanceof byte[]) { - byte[] bx = (byte[]) x; - if (conn.db.is3()) { - args[parameterIndex - 1] = - SQLite.StringEncoder.encodeX(bx); - blobs[parameterIndex - 1] = true; - return; - } - args[parameterIndex - 1] = SQLite.StringEncoder.encode(bx); - } else { - args[parameterIndex - 1] = x.toString(); - } - } - blobs[parameterIndex - 1] = false; - } - - public void setObject(int parameterIndex, Object x, int targetSqlType) - throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - if (x instanceof byte[]) { - byte[] bx = (byte[]) x; - if (conn.db.is3()) { - args[parameterIndex - 1] = - SQLite.StringEncoder.encodeX(bx); - blobs[parameterIndex - 1] = true; - return; - } - args[parameterIndex - 1] = SQLite.StringEncoder.encode(bx); - } else { - args[parameterIndex - 1] = x.toString(); - } - } - blobs[parameterIndex - 1] = false; - } - - public void setObject(int parameterIndex, Object x) throws SQLException { - if (parameterIndex < 1 || parameterIndex > args.length) { - throw new SQLException("bad parameter index"); - } - if (x == null) { - args[parameterIndex - 1] = nullrepl ? "" : null; - } else { - if (x instanceof byte[]) { - byte[] bx = (byte[]) x; - if (conn.db.is3()) { - args[parameterIndex - 1] = - SQLite.StringEncoder.encodeX(bx); - blobs[parameterIndex - 1] = true; - return; - } - args[parameterIndex - 1] = SQLite.StringEncoder.encode(bx); - } else { - args[parameterIndex - 1] = x.toString(); - } - } - blobs[parameterIndex - 1] = false; - } - - public boolean execute() throws SQLException { - return executeQuery(fixup2(sql), args, false) != null; - } - - public void addBatch() throws SQLException { - if (batch == null) { - batch = new ArrayList<BatchArg>(args.length); - } - for (int i = 0; i < args.length; i++) { - batch.add(new BatchArg(args[i], blobs[i])); - } - } - - public int[] executeBatch() throws SQLException { - if (batch == null) { - return new int[0]; - } - int[] ret = new int[batch.size() / args.length]; - for (int i = 0; i < ret.length; i++) { - ret[i] = EXECUTE_FAILED; - } - int errs = 0; - int index = 0; - for (int i = 0; i < ret.length; i++) { - for (int k = 0; k < args.length; k++) { - BatchArg b = (BatchArg) batch.get(index++); - - args[i] = b.arg; - blobs[i] = b.blob; - } - try { - ret[i] = executeUpdate(); - } catch (SQLException e) { - ++errs; - } - } - if (errs > 0) { - throw new BatchUpdateException("batch failed", ret); - } - return ret; - } - - public void clearBatch() throws SQLException { - if (batch != null) { - batch.clear(); - batch = null; - } - } - - public void setCharacterStream(int parameterIndex, - java.io.Reader reader, - int length) throws SQLException { - throw new SQLException("not supported"); - } - - public void setRef(int i, Ref x) throws SQLException { - throw new SQLException("not supported"); - } - - public void setBlob(int i, Blob x) throws SQLException { - throw new SQLException("not supported"); - } - - public void setClob(int i, Clob x) throws SQLException { - throw new SQLException("not supported"); - } - - public void setArray(int i, Array x) throws SQLException { - throw new SQLException("not supported"); - } - - public ResultSetMetaData getMetaData() throws SQLException { - return rs.getMetaData(); - } - - public void setDate(int parameterIndex, java.sql.Date x, Calendar cal) - throws SQLException { - setDate(parameterIndex, x); - } - - public void setTime(int parameterIndex, java.sql.Time x, Calendar cal) - throws SQLException { - setTime(parameterIndex, x); - } - - public void setTimestamp(int parameterIndex, java.sql.Timestamp x, - Calendar cal) throws SQLException { - setTimestamp(parameterIndex, x); - } - - public void setNull(int parameterIndex, int sqlType, String typeName) - throws SQLException { - setNull(parameterIndex, sqlType); - } - - public ParameterMetaData getParameterMetaData() throws SQLException { - throw new SQLException("not supported"); - } - - public void registerOutputParameter(String parameterName, int sqlType) - throws SQLException { - throw new SQLException("not supported"); - } - - public void registerOutputParameter(String parameterName, int sqlType, - int scale) - throws SQLException { - throw new SQLException("not supported"); - } - - public void registerOutputParameter(String parameterName, int sqlType, - String typeName) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.net.URL getURL(int parameterIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public void setURL(int parameterIndex, java.net.URL url) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setNull(String parameterName, int sqlType) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setBoolean(String parameterName, boolean val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setByte(String parameterName, byte val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setShort(String parameterName, short val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setInt(String parameterName, int val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setLong(String parameterName, long val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setFloat(String parameterName, float val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setDouble(String parameterName, double val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setBigDecimal(String parameterName, BigDecimal val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setString(String parameterName, String val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setBytes(String parameterName, byte val[]) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setDate(String parameterName, java.sql.Date val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setTime(String parameterName, java.sql.Time val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setTimestamp(String parameterName, java.sql.Timestamp val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setAsciiStream(String parameterName, - java.io.InputStream s, int length) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setBinaryStream(String parameterName, - java.io.InputStream s, int length) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setObject(String parameterName, Object val, int targetSqlType, - int scale) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setObject(String parameterName, Object val, int targetSqlType) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setObject(String parameterName, Object val) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setCharacterStream(String parameterName, - java.io.Reader r, int length) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setDate(String parameterName, java.sql.Date val, - Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setTime(String parameterName, java.sql.Time val, - Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setTimestamp(String parameterName, java.sql.Timestamp val, - Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public void setNull(String parameterName, int sqlType, String typeName) - throws SQLException { - throw new SQLException("not supported"); - } - - public String getString(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public boolean getBoolean(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public byte getByte(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public short getShort(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public int getInt(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public long getLong(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public float getFloat(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public double getDouble(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public byte[] getBytes(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Date getDate(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Time getTime(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Timestamp getTimestamp(String parameterName) - throws SQLException { - throw new SQLException("not supported"); - } - - public Object getObject(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public Object getObject(int parameterIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public BigDecimal getBigDecimal(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public Object getObject(String parameterName, Map map) - throws SQLException { - throw new SQLException("not supported"); - } - - public Object getObject(int parameterIndex, Map map) - throws SQLException { - throw new SQLException("not supported"); - } - - public Ref getRef(int parameterIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public Ref getRef(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public Blob getBlob(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public Blob getBlob(int parameterIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public Clob getClob(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public Clob getClob(int parameterIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public Array getArray(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - - public Array getArray(int parameterIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Date getDate(String parameterName, Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Date getDate(int parameterIndex, Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Time getTime(String parameterName, Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Time getTime(int parameterIndex, Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Timestamp getTimestamp(String parameterName, Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Timestamp getTimestamp(int parameterIndex, Calendar cal) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.net.URL getURL(String parameterName) throws SQLException { - throw new SQLException("not supported"); - } - -} diff --git a/sql/src/main/java/SQLite/JDBC2y/JDBCResultSet.java b/sql/src/main/java/SQLite/JDBC2y/JDBCResultSet.java deleted file mode 100644 index 06384eb..0000000 --- a/sql/src/main/java/SQLite/JDBC2y/JDBCResultSet.java +++ /dev/null @@ -1,932 +0,0 @@ -package SQLite.JDBC2y; - -import java.sql.*; -import java.math.BigDecimal; - -public class JDBCResultSet implements java.sql.ResultSet { - - /** - * Current row to be retrieved. - */ - private int row; - - /** - * Table returned by Database.get_table() - */ - protected SQLite.TableResult tr; - - /** - * Statement from which result set was produced. - */ - private JDBCStatement s; - - /** - * Meta data for result set or null. - */ - private JDBCResultSetMetaData m; - - /** - * Last result cell retrieved or null. - */ - private String lastg; - - - public JDBCResultSet(SQLite.TableResult tr, JDBCStatement s) { - this.tr = tr; - this.s = s; - this.m = null; - this.lastg = null; - this.row = -1; - } - - public boolean next() throws SQLException { - if (tr == null) { - return false; - } - row++; - return row < tr.nrows; - } - - public int findColumn(String columnName) throws SQLException { - JDBCResultSetMetaData m = (JDBCResultSetMetaData) getMetaData(); - return m.findColByName(columnName); - } - - public int getRow() throws SQLException { - if (tr == null) { - throw new SQLException("no rows"); - } - return row + 1; - } - - public boolean previous() throws SQLException { - if (tr == null) { - return false; - } - if (row >= 0) { - row--; - } - return row >= 0; - } - - public boolean absolute(int row) throws SQLException { - if (tr == null) { - return false; - } - if (row < 0) { - row = tr.nrows + 1 + row; - } - row--; - if (row < 0 || row > tr.nrows) { - return false; - } - this.row = row; - return true; - } - - public boolean relative(int row) throws SQLException { - if (tr == null) { - return false; - } - if (this.row + row < 0 || this.row + row >= tr.nrows) { - return false; - } - this.row += row; - return true; - } - - public void setFetchDirection(int dir) throws SQLException { - throw new SQLException("not supported"); - } - - public int getFetchDirection() throws SQLException { - throw new SQLException("not supported"); - } - - public void setFetchSize(int fsize) throws SQLException { - throw new SQLException("not supported"); - } - - public int getFetchSize() throws SQLException { - throw new SQLException("not supported"); - } - - public String getString(int columnIndex) throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - return lastg; - } - - public String getString(String columnName) throws SQLException { - int col = findColumn(columnName); - return getString(col); - } - - public int getInt(int columnIndex) throws SQLException { - Integer i = internalGetInt(columnIndex); - if (i != null) { - return i.intValue(); - } - return 0; - } - - private Integer internalGetInt(int columnIndex) throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - try { - return Integer.valueOf(lastg); - } catch (java.lang.Exception e) { - lastg = null; - } - return null; - } - - public int getInt(String columnName) throws SQLException { - int col = findColumn(columnName); - return getInt(col); - } - - public boolean getBoolean(int columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public boolean getBoolean(String columnName) throws SQLException { - throw new SQLException("not supported"); - } - - public ResultSetMetaData getMetaData() throws SQLException { - if (m == null) { - m = new JDBCResultSetMetaData(this); - } - return m; - } - - public short getShort(int columnIndex) throws SQLException { - Short s = internalGetShort(columnIndex); - if (s != null) { - return s.shortValue(); - } - return 0; - } - - private Short internalGetShort(int columnIndex) throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - try { - return Short.valueOf(lastg); - } catch (java.lang.Exception e) { - lastg = null; - } - return null; - } - - public short getShort(String columnName) throws SQLException { - int col = findColumn(columnName); - return getShort(col); - } - - public java.sql.Time getTime(int columnIndex) throws SQLException { - return internalGetTime(columnIndex, null); - } - - private java.sql.Time internalGetTime(int columnIndex, - java.util.Calendar cal) - throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - try { - return java.sql.Time.valueOf(lastg); - } catch (java.lang.Exception e) { - lastg = null; - } - return null; - } - - public java.sql.Time getTime(String columnName) throws SQLException { - int col = findColumn(columnName); - return getTime(col); - } - - public java.sql.Time getTime(int columnIndex, java.util.Calendar cal) - throws SQLException { - return internalGetTime(columnIndex, cal); - } - - public java.sql.Time getTime(String columnName, java.util.Calendar cal) - throws SQLException{ - int col = findColumn(columnName); - return getTime(col, cal); - } - - public java.sql.Timestamp getTimestamp(int columnIndex) - throws SQLException{ - return internalGetTimestamp(columnIndex, null); - } - - private java.sql.Timestamp internalGetTimestamp(int columnIndex, - java.util.Calendar cal) - throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - try { - return java.sql.Timestamp.valueOf(lastg); - } catch (java.lang.Exception e) { - lastg = null; - } - return null; - } - - public java.sql.Timestamp getTimestamp(String columnName) - throws SQLException{ - int col = findColumn(columnName); - return getTimestamp(col); - } - - public java.sql.Timestamp getTimestamp(int columnIndex, - java.util.Calendar cal) - throws SQLException { - return internalGetTimestamp(columnIndex, cal); - } - - public java.sql.Timestamp getTimestamp(String columnName, - java.util.Calendar cal) - throws SQLException { - int col = findColumn(columnName); - return getTimestamp(col, cal); - } - - public java.sql.Date getDate(int columnIndex) throws SQLException { - return internalGetDate(columnIndex, null); - } - - private java.sql.Date internalGetDate(int columnIndex, - java.util.Calendar cal) - throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - try { - return java.sql.Date.valueOf(lastg); - } catch (java.lang.Exception e) { - lastg = null; - } - return null; - } - - public java.sql.Date getDate(String columnName) throws SQLException { - int col = findColumn(columnName); - return getDate(col); - } - - public java.sql.Date getDate(int columnIndex, java.util.Calendar cal) - throws SQLException{ - return internalGetDate(columnIndex, cal); - } - - public java.sql.Date getDate(String columnName, java.util.Calendar cal) - throws SQLException{ - int col = findColumn(columnName); - return getDate(col, cal); - } - - public double getDouble(int columnIndex) throws SQLException { - Double d = internalGetDouble(columnIndex); - if (d != null) { - return d.doubleValue(); - } - return 0; - } - - private Double internalGetDouble(int columnIndex) throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - try { - return Double.valueOf(lastg); - } catch (java.lang.Exception e) { - lastg = null; - } - return null; - } - - public double getDouble(String columnName) throws SQLException { - int col = findColumn(columnName); - return getDouble(col); - } - - public float getFloat(int columnIndex) throws SQLException { - Float f = internalGetFloat(columnIndex); - if (f != null) { - return f.floatValue(); - } - return 0; - } - - private Float internalGetFloat(int columnIndex) throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - try { - return Float.valueOf(lastg); - } catch (java.lang.Exception e) { - lastg = null; - } - return null; - } - - public float getFloat(String columnName) throws SQLException { - int col = findColumn(columnName); - return getFloat(col); - } - - public long getLong(int columnIndex) throws SQLException { - Long l = internalGetLong(columnIndex); - if (l != null) { - return l.longValue(); - } - return 0; - } - - private Long internalGetLong(int columnIndex) throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - try { - return Long.valueOf(lastg); - } catch (java.lang.Exception e) { - lastg = null; - } - return null; - } - - public long getLong(String columnName) throws SQLException { - int col = findColumn(columnName); - return getLong(col); - } - - @Deprecated - public java.io.InputStream getUnicodeStream(int columnIndex) - throws SQLException { - throw new SQLException("not supported"); - } - - @Deprecated - public java.io.InputStream getUnicodeStream(String columnName) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.io.InputStream getAsciiStream(String columnName) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.io.InputStream getAsciiStream(int columnIndex) - throws SQLException { - throw new SQLException("not supported"); - } - - public BigDecimal getBigDecimal(String columnName) - throws SQLException { - throw new SQLException("not supported"); - } - - @Deprecated - public BigDecimal getBigDecimal(String columnName, int scale) - throws SQLException { - throw new SQLException("not supported"); - } - - public BigDecimal getBigDecimal(int columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - @Deprecated - public BigDecimal getBigDecimal(int columnIndex, int scale) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.io.InputStream getBinaryStream(int columnIndex) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.io.InputStream getBinaryStream(String columnName) - throws SQLException { - throw new SQLException("not supported"); - } - - public byte getByte(int columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public byte getByte(String columnName) throws SQLException { - throw new SQLException("not supported"); - } - - public byte[] getBytes(int columnIndex) throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - byte ret[] = null; - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - if (lastg != null) { - ret = SQLite.StringEncoder.decode(lastg); - } - return ret; - } - - public byte[] getBytes(String columnName) throws SQLException { - int col = findColumn(columnName); - return getBytes(col); - } - - public String getCursorName() throws SQLException { - return null; - } - - public Object getObject(int columnIndex) throws SQLException { - if (tr == null || columnIndex < 1 || columnIndex > tr.ncolumns) { - throw new SQLException("column " + columnIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[columnIndex - 1]; - Object ret = lastg; - if (tr instanceof TableResultX) { - switch (((TableResultX) tr).sql_type[columnIndex - 1]) { - case Types.SMALLINT: - ret = internalGetShort(columnIndex); - break; - case Types.INTEGER: - ret = internalGetInt(columnIndex); - break; - case Types.DOUBLE: - ret = internalGetDouble(columnIndex); - break; - case Types.FLOAT: - ret = internalGetFloat(columnIndex); - break; - case Types.BIGINT: - ret = internalGetLong(columnIndex); - break; - case Types.BINARY: - case Types.VARBINARY: - case Types.LONGVARBINARY: - ret = getBytes(columnIndex); - break; - case Types.NULL: - ret = null; - break; - /* defaults to String below */ - } - } - return ret; - } - - public Object getObject(String columnName) throws SQLException { - int col = findColumn(columnName); - return getObject(col); - } - - public Object getObject(int columnIndex, java.util.Map map) - throws SQLException { - throw new SQLException("not supported"); - } - - public Object getObject(String columnIndex, java.util.Map map) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Ref getRef(int columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Ref getRef(String columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Blob getBlob(int columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Blob getBlob(String columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Clob getClob(int columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Clob getClob(String columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Array getArray(int columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.sql.Array getArray(String columnIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public java.io.Reader getCharacterStream(int columnIndex) - throws SQLException { - throw new SQLException("not supported"); - } - - public java.io.Reader getCharacterStream(String columnName) - throws SQLException { - throw new SQLException("not supported"); - } - - public SQLWarning getWarnings() throws SQLException { - throw new SQLException("not supported"); - } - - public boolean wasNull() throws SQLException { - return lastg == null; - } - - public void clearWarnings() throws SQLException { - throw new SQLException("not supported"); - } - - public boolean isFirst() throws SQLException { - if (tr == null) { - return true; - } - return row == 0; - } - - public boolean isBeforeFirst() throws SQLException { - if (tr == null || tr.nrows <= 0) { - return false; - } - return row < 0; - } - - public void beforeFirst() throws SQLException { - if (tr == null) { - return; - } - row = -1; - } - - public boolean first() throws SQLException { - if (tr == null || tr.nrows <= 0) { - return false; - } - row = 0; - return true; - } - - public boolean isAfterLast() throws SQLException { - if (tr == null || tr.nrows <= 0) { - return false; - } - return row >= tr.nrows; - } - - public void afterLast() throws SQLException { - if (tr == null) { - return; - } - row = tr.nrows; - } - - public boolean isLast() throws SQLException { - if (tr == null) { - return true; - } - return row == tr.nrows - 1; - } - - public boolean last() throws SQLException { - if (tr == null || tr.nrows <= 0) { - return false; - } - row = tr.nrows -1; - return true; - } - - public int getType() throws SQLException { - return TYPE_SCROLL_INSENSITIVE; - } - - public int getConcurrency() throws SQLException { - return CONCUR_READ_ONLY; - } - - public boolean rowUpdated() throws SQLException { - throw new SQLException("not supported"); - } - - public boolean rowInserted() throws SQLException { - throw new SQLException("not supported"); - } - - public boolean rowDeleted() throws SQLException { - throw new SQLException("not supported"); - } - - public void insertRow() throws SQLException { - throw new SQLException("not supported"); - } - - public void updateRow() throws SQLException { - throw new SQLException("not supported"); - } - - public void deleteRow() throws SQLException { - throw new SQLException("not supported"); - } - - public void refreshRow() throws SQLException { - throw new SQLException("not supported"); - } - - public void cancelRowUpdates() throws SQLException { - throw new SQLException("not supported"); - } - - public void moveToInsertRow() throws SQLException { - throw new SQLException("not supported"); - } - - public void moveToCurrentRow() throws SQLException { - throw new SQLException("not supported"); - } - - public void updateNull(int colIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBoolean(int colIndex, boolean b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateByte(int colIndex, byte b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateShort(int colIndex, short b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateInt(int colIndex, int b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateLong(int colIndex, long b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateFloat(int colIndex, float f) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateDouble(int colIndex, double f) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBigDecimal(int colIndex, BigDecimal f) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateString(int colIndex, String s) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBytes(int colIndex, byte[] s) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateDate(int colIndex, java.sql.Date d) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateTime(int colIndex, java.sql.Time t) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateTimestamp(int colIndex, java.sql.Timestamp t) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateAsciiStream(int colIndex, java.io.InputStream in, int s) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBinaryStream(int colIndex, java.io.InputStream in, int s) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateCharacterStream(int colIndex, java.io.Reader in, int s) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateObject(int colIndex, Object obj) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateObject(int colIndex, Object obj, int s) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateNull(String colIndex) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBoolean(String colIndex, boolean b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateByte(String colIndex, byte b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateShort(String colIndex, short b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateInt(String colIndex, int b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateLong(String colIndex, long b) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateFloat(String colIndex, float f) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateDouble(String colIndex, double f) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBigDecimal(String colIndex, BigDecimal f) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateString(String colIndex, String s) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBytes(String colIndex, byte[] s) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateDate(String colIndex, java.sql.Date d) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateTime(String colIndex, java.sql.Time t) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateTimestamp(String colIndex, java.sql.Timestamp t) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateAsciiStream(String colIndex, java.io.InputStream in, - int s) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBinaryStream(String colIndex, java.io.InputStream in, - int s) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateCharacterStream(String colIndex, java.io.Reader in, - int s) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateObject(String colIndex, Object obj) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateObject(String colIndex, Object obj, int s) - throws SQLException { - throw new SQLException("not supported"); - } - - public Statement getStatement() throws SQLException { - if (s == null) { - throw new SQLException("stale result set"); - } - return s; - } - - public void close() throws SQLException { - s = null; - tr = null; - lastg = null; - row = -1; - } - - public java.net.URL getURL(int colIndex) throws SQLException { - if (tr == null || colIndex < 1 || colIndex > tr.ncolumns) { - throw new SQLException("column " + colIndex + " not found"); - } - String rd[] = (String []) tr.rows.elementAt(row); - lastg = rd[colIndex - 1]; - java.net.URL url = null; - if (lastg == null) { - return url; - } - try { - url = new java.net.URL(lastg); - } catch (java.lang.Exception e) { - url = null; - } - return url; - } - - public java.net.URL getURL(String colIndex) throws SQLException { - int col = findColumn(colIndex); - return getURL(col); - } - - public void updateRef(int colIndex, java.sql.Ref x) throws SQLException { - throw new SQLException("not supported"); - } - - public void updateRef(String colIndex, java.sql.Ref x) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBlob(int colIndex, java.sql.Blob x) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateBlob(String colIndex, java.sql.Blob x) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateClob(int colIndex, java.sql.Clob x) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateClob(String colIndex, java.sql.Clob x) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateArray(int colIndex, java.sql.Array x) - throws SQLException { - throw new SQLException("not supported"); - } - - public void updateArray(String colIndex, java.sql.Array x) - throws SQLException { - throw new SQLException("not supported"); - } - -} diff --git a/sql/src/main/java/SQLite/JDBC2y/JDBCResultSetMetaData.java b/sql/src/main/java/SQLite/JDBC2y/JDBCResultSetMetaData.java deleted file mode 100644 index 934ca78..0000000 --- a/sql/src/main/java/SQLite/JDBC2y/JDBCResultSetMetaData.java +++ /dev/null @@ -1,212 +0,0 @@ -package SQLite.JDBC2y; - -import java.sql.*; - -public class JDBCResultSetMetaData implements java.sql.ResultSetMetaData { - - private JDBCResultSet r; - - public JDBCResultSetMetaData(JDBCResultSet r) { - this.r = r; - } - - public String getCatalogName(int column) throws java.sql.SQLException { - return null; - } - - public String getColumnClassName(int column) throws java.sql.SQLException { - column--; - if (r != null && r.tr != null) { - if (column < 0 || column >= r.tr.ncolumns) { - return null; - } - if (r.tr instanceof TableResultX) { - switch (((TableResultX) r.tr).sql_type[column]) { - case Types.SMALLINT: return "java.lang.Short"; - case Types.INTEGER: return "java.lang.Integer"; - case Types.DOUBLE: return "java.lang.Double"; - case Types.FLOAT: return "java.lang.Float"; - case Types.BIGINT: return "java.lang.Long"; - case Types.DATE: return "java.sql.Date"; - case Types.TIME: return "java.sql.Time"; - case Types.TIMESTAMP: return "java.sql.Timestamp"; - case Types.BINARY: - case Types.VARBINARY: return "[B"; - /* defaults to varchar below */ - } - } - return "java.lang.String"; - } - return null; - } - - public int getColumnCount() throws java.sql.SQLException { - if (r != null && r.tr != null) { - return r.tr.ncolumns; - } - return 0; - } - - public int getColumnDisplaySize(int column) throws java.sql.SQLException { - return 0; - } - - public String getColumnLabel(int column) throws java.sql.SQLException { - column--; - String c = null; - if (r != null && r.tr != null) { - if (column < 0 || column >= r.tr.ncolumns) { - return c; - } - c = r.tr.column[column]; - } - return c; - } - - public String getColumnName(int column) throws java.sql.SQLException { - column--; - String c = null; - if (r != null && r.tr != null) { - if (column < 0 || column >= r.tr.ncolumns) { - return c; - } - c = r.tr.column[column]; - if (c != null) { - int i = c.indexOf('.'); - if (i > 0) { - return c.substring(i + 1); - } - } - } - return c; - } - - public int getColumnType(int column) throws java.sql.SQLException { - column--; - if (r != null && r.tr != null) { - if (column >= 0 && column < r.tr.ncolumns) { - if (r.tr instanceof TableResultX) { - return ((TableResultX) r.tr).sql_type[column]; - } - return Types.VARCHAR; - } - } - throw new SQLException("bad column index"); - } - - public String getColumnTypeName(int column) throws java.sql.SQLException { - column--; - if (r != null && r.tr != null) { - if (column >= 0 && column < r.tr.ncolumns) { - if (r.tr instanceof TableResultX) { - switch (((TableResultX) r.tr).sql_type[column]) { - case Types.SMALLINT: return "smallint"; - case Types.INTEGER: return "integer"; - case Types.DOUBLE: return "double"; - case Types.FLOAT: return "float"; - case Types.BIGINT: return "bigint"; - case Types.DATE: return "date"; - case Types.TIME: return "time"; - case Types.TIMESTAMP: return "timestamp"; - case Types.BINARY: return "binary"; - case Types.VARBINARY: return "varbinary"; - /* defaults to varchar below */ - } - } - return "varchar"; - } - } - throw new SQLException("bad column index"); - } - - public int getPrecision(int column) throws java.sql.SQLException { - return 0; - } - - public int getScale(int column) throws java.sql.SQLException { - return 0; - } - - public String getSchemaName(int column) throws java.sql.SQLException { - return null; - } - - public String getTableName(int column) throws java.sql.SQLException { - column--; - String c = null; - if (r != null && r.tr != null) { - if (column < 0 || column >= r.tr.ncolumns) { - return c; - } - c = r.tr.column[column]; - if (c != null) { - int i = c.indexOf('.'); - if (i > 0) { - return c.substring(0, i); - } - c = null; - } - } - return c; - } - - public boolean isAutoIncrement(int column) throws java.sql.SQLException { - return false; - } - - public boolean isCaseSensitive(int column) throws java.sql.SQLException { - return false; - } - - public boolean isCurrency(int column) throws java.sql.SQLException { - return false; - } - - public boolean isDefinitelyWritable(int column) - throws java.sql.SQLException { - return true; - } - - public int isNullable(int column) throws java.sql.SQLException { - return columnNullableUnknown; - } - - public boolean isReadOnly(int column) throws java.sql.SQLException { - return false; - } - - public boolean isSearchable(int column) throws java.sql.SQLException { - return true; - } - - public boolean isSigned(int column) throws java.sql.SQLException { - return false; - } - - public boolean isWritable(int column) throws java.sql.SQLException { - return true; - } - - int findColByName(String columnName) throws java.sql.SQLException { - String c = null; - if (r != null && r.tr != null) { - for (int i = 0; i < r.tr.ncolumns; i++) { - c = r.tr.column[i]; - if (c != null) { - if (c.compareToIgnoreCase(columnName) == 0) { - return i + 1; - } - int k = c.indexOf('.'); - if (k > 0) { - c = c.substring(k + 1); - if (c.compareToIgnoreCase(columnName) == 0) { - return i + 1; - } - } - } - c = null; - } - } - throw new SQLException("column " + columnName + " not found"); - } -} diff --git a/sql/src/main/java/SQLite/JDBC2y/JDBCStatement.java b/sql/src/main/java/SQLite/JDBC2y/JDBCStatement.java deleted file mode 100644 index 99d12d3..0000000 --- a/sql/src/main/java/SQLite/JDBC2y/JDBCStatement.java +++ /dev/null @@ -1,287 +0,0 @@ -package SQLite.JDBC2y; - -import java.sql.*; -import java.util.*; - -public class JDBCStatement implements java.sql.Statement { - - protected JDBCConnection conn; - protected JDBCResultSet rs; - protected int updcnt; - private ArrayList<String> batch; - - public JDBCStatement(JDBCConnection conn) { - this.conn = conn; - this.updcnt = 0; - this.rs = null; - this.batch = null; - } - - public void setFetchSize(int fetchSize) throws SQLException { - throw new SQLException("not supported"); - } - - public int getFetchSize() throws SQLException { - return 1; - } - - public int getMaxRows() throws SQLException { - return 0; - } - - public void setMaxRows(int max) throws SQLException { - throw new SQLException("not supported"); - } - - public void setFetchDirection(int fetchDirection) throws SQLException { - throw new SQLException("not supported"); - } - - public int getFetchDirection() throws SQLException { - return ResultSet.FETCH_UNKNOWN; - } - - public int getResultSetConcurrency() throws SQLException { - return ResultSet.CONCUR_READ_ONLY; - } - - public int getResultSetType() throws SQLException { - return ResultSet.TYPE_SCROLL_INSENSITIVE; - } - - public void setQueryTimeout(int seconds) throws SQLException { - conn.timeout = seconds * 1000; - if (conn.timeout < 0) { - conn.timeout = 120000; - } else if (conn.timeout < 1000) { - conn.timeout = 5000; - } - } - - public int getQueryTimeout() throws SQLException { - return conn.timeout; - } - - public ResultSet getResultSet() throws SQLException { - return rs; - } - - ResultSet executeQuery(String sql, String args[], boolean updonly) - throws SQLException { - SQLite.TableResult tr = null; - if (rs != null) { - rs.close(); - rs = null; - } - updcnt = -1; - if (conn == null || conn.db == null) { - throw new SQLException("stale connection"); - } - int busy = 0; - boolean starttrans = !conn.autocommit && !conn.intrans; - while (true) { - try { - if (starttrans) { - conn.db.exec("BEGIN TRANSACTION", null); - conn.intrans = true; - } - if (args == null) { - if (updonly) { - conn.db.exec(sql, null); - } else { - tr = conn.db.get_table(sql); - } - } else { - if (updonly) { - conn.db.exec(sql, null, args); - } else { - tr = conn.db.get_table(sql, args); - } - } - updcnt = (int) conn.db.changes(); - } catch (SQLite.Exception e) { - if (conn.db.is3() && - conn.db.last_error() == SQLite.Constants.SQLITE_BUSY && - conn.busy3(conn.db, ++busy)) { - try { - if (starttrans && conn.intrans) { - conn.db.exec("ROLLBACK", null); - conn.intrans = false; - } - } catch (SQLite.Exception ee) { - } - try { - int ms = 20 + busy * 10; - if (ms > 1000) { - ms = 1000; - } - synchronized (this) { - this.wait(ms); - } - } catch (java.lang.Exception eee) { - } - continue; - } - throw new SQLException(e.toString()); - } - break; - } - if (!updonly && tr == null) { - throw new SQLException("no result set produced"); - } - if (!updonly && tr != null) { - rs = new JDBCResultSet(new TableResultX(tr), this); - } - return rs; - } - - public ResultSet executeQuery(String sql) throws SQLException { - return executeQuery(sql, null, false); - } - - public boolean execute(String sql) throws SQLException { - return executeQuery(sql) != null; - } - - public void cancel() throws SQLException { - if (conn == null || conn.db == null) { - throw new SQLException("stale connection"); - } - conn.db.interrupt(); - } - - public void clearWarnings() throws SQLException { - } - - public Connection getConnection() throws SQLException { - return conn; - } - - public void addBatch(String sql) throws SQLException { - if (batch == null) { - batch = new ArrayList<String>(1); - } - batch.add(sql); - } - - public int[] executeBatch() throws SQLException { - if (batch == null) { - return new int[0]; - } - int[] ret = new int[batch.size()]; - for (int i = 0; i < ret.length; i++) { - ret[i] = EXECUTE_FAILED; - } - int errs = 0; - for (int i = 0; i < ret.length; i++) { - try { - execute((String) batch.get(i)); - ret[i] = updcnt; - } catch (SQLException e) { - ++errs; - } - } - if (errs > 0) { - throw new BatchUpdateException("batch failed", ret); - } - return ret; - } - - public void clearBatch() throws SQLException { - if (batch != null) { - batch.clear(); - batch = null; - } - } - - public void close() throws SQLException { - clearBatch(); - conn = null; - } - - public int executeUpdate(String sql) throws SQLException { - executeQuery(sql, null, true); - return updcnt; - } - - public int getMaxFieldSize() throws SQLException { - return 0; - } - - public boolean getMoreResults() throws SQLException { - if (rs != null) { - rs.close(); - rs = null; - } - return false; - } - - public int getUpdateCount() throws SQLException { - return updcnt; - } - - public SQLWarning getWarnings() throws SQLException { - return null; - } - - public void setCursorName(String name) throws SQLException { - throw new SQLException("not supported"); - } - - public void setEscapeProcessing(boolean enable) throws SQLException { - throw new SQLException("not supported"); - } - - public void setMaxFieldSize(int max) throws SQLException { - throw new SQLException("not supported"); - } - - public boolean getMoreResults(int x) throws SQLException { - throw new SQLException("not supported"); - } - - public ResultSet getGeneratedKeys() throws SQLException { - throw new SQLException("not supported"); - } - - public int executeUpdate(String sql, int autokeys) - throws SQLException { - if (autokeys != Statement.NO_GENERATED_KEYS) { - throw new SQLException("not supported"); - } - return executeUpdate(sql); - } - - public int executeUpdate(String sql, int colIndexes[]) - throws SQLException { - throw new SQLException("not supported"); - } - - public int executeUpdate(String sql, String colIndexes[]) - throws SQLException { - throw new SQLException("not supported"); - } - - public boolean execute(String sql, int autokeys) - throws SQLException { - if (autokeys != Statement.NO_GENERATED_KEYS) { - throw new SQLException("not supported"); - } - return execute(sql); - } - - public boolean execute(String sql, int colIndexes[]) - throws SQLException { - throw new SQLException("not supported"); - } - - public boolean execute(String sql, String colIndexes[]) - throws SQLException { - throw new SQLException("not supported"); - } - - public int getResultSetHoldability() throws SQLException { - return ResultSet.HOLD_CURSORS_OVER_COMMIT; - } - -} diff --git a/sql/src/main/java/SQLite/JDBC2y/TableResultX.java b/sql/src/main/java/SQLite/JDBC2y/TableResultX.java deleted file mode 100644 index 205372f..0000000 --- a/sql/src/main/java/SQLite/JDBC2y/TableResultX.java +++ /dev/null @@ -1,37 +0,0 @@ -package SQLite.JDBC2y; - -import java.sql.Types; -import java.util.Vector; - -public class TableResultX extends SQLite.TableResult { - public int sql_type[]; - - public TableResultX() { - super(); - sql_type = new int[this.ncolumns]; - for (int i = 0; i < this.ncolumns; i++) { - sql_type[i] = Types.VARCHAR; - } - } - - public TableResultX(SQLite.TableResult tr) { - this.column = tr.column; - this.rows = tr.rows; - this.ncolumns = tr.ncolumns; - this.nrows = tr.nrows; - this.types = tr.types; - sql_type = new int[tr.ncolumns]; - for (int i = 0; i < this.ncolumns; i++) { - sql_type[i] = Types.VARCHAR; - } - if (tr.types != null) { - for (int i = 0; i < tr.types.length; i++) { - sql_type[i] = JDBCDatabaseMetaData.mapSqlType(tr.types[i]); - } - } - } - - void sql_types(int types[]) { - sql_type = types; - } -} diff --git a/sql/src/main/java/SQLite/JDBCDriver.java b/sql/src/main/java/SQLite/JDBCDriver.java deleted file mode 100644 index 63b95ee..0000000 --- a/sql/src/main/java/SQLite/JDBCDriver.java +++ /dev/null @@ -1,109 +0,0 @@ -package SQLite; - -import java.sql.*; -import java.util.Properties; - -public class JDBCDriver implements java.sql.Driver { - - public static final int MAJORVERSION = 1; - public static final int MINORVERSION = 2; - - private static java.lang.reflect.Constructor makeConn = null; - - protected Connection conn; - - static { - try { - Class connClass = null; - Class args[] = new Class[2]; - args[0] = Class.forName("java.lang.String"); - args[1] = args[0]; - String jvers = java.lang.System.getProperty("java.version"); - String cvers; - if (jvers == null || jvers.startsWith("1.0")) { - throw new java.lang.Exception("unsupported java version"); - } else if (jvers.startsWith("1.1")) { - cvers = "SQLite.JDBC1.JDBCConnection"; - } else if (jvers.startsWith("1.2") || jvers.startsWith("1.3")) { - cvers = "SQLite.JDBC2.JDBCConnection"; - } else if (jvers.startsWith("1.4")) { - cvers = "SQLite.JDBC2x.JDBCConnection"; - } else if (jvers.startsWith("1.5")) { - cvers = "SQLite.JDBC2y.JDBCConnection"; - try { - Class.forName(cvers); - } catch (java.lang.Exception e) { - cvers = "SQLite.JDBC2x.JDBCConnection"; - } - } else { - cvers = "SQLite.JDBC2z.JDBCConnection"; - try { - Class.forName(cvers); - } catch (java.lang.Exception e) { - cvers = "SQLite.JDBC2y.JDBCConnection"; - try { - Class.forName(cvers); - } catch (java.lang.Exception ee) { - cvers = "SQLite.JDBC2x.JDBCConnection"; - } - } - } - connClass = Class.forName(cvers); - makeConn = connClass.getConstructor(args); - java.sql.DriverManager.registerDriver(new JDBCDriver()); - } catch (java.lang.Exception e) { - System.err.println(e); - } - } - - public JDBCDriver() { - } - - public boolean acceptsURL(String url) throws SQLException { - return url.startsWith("sqlite:/") || - url.startsWith("jdbc:sqlite:/"); - } - - public Connection connect(String url, Properties info) - throws SQLException { - if (!acceptsURL(url)) { - return null; - } - Object args[] = new Object[2]; - args[0] = url; - if (info != null) { - args[1] = info.getProperty("encoding"); - } - if (args[1] == null) { - args[1] = java.lang.System.getProperty("SQLite.encoding"); - } - try { - conn = (Connection) makeConn.newInstance(args); - } catch (java.lang.reflect.InvocationTargetException ie) { - throw new SQLException(ie.getTargetException().toString()); - } catch (java.lang.Exception e) { - throw new SQLException(e.toString()); - } - return conn; - } - - public int getMajorVersion() { - return MAJORVERSION; - } - - public int getMinorVersion() { - return MINORVERSION; - } - - public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) - throws SQLException { - DriverPropertyInfo p[] = new DriverPropertyInfo[1]; - DriverPropertyInfo pp = new DriverPropertyInfo("encoding", ""); - p[0] = pp; - return p; - } - - public boolean jdbcCompliant() { - return false; - } -} diff --git a/sql/src/main/java/SQLite/ProgressHandler.java b/sql/src/main/java/SQLite/ProgressHandler.java deleted file mode 100644 index b2ec7c0..0000000 --- a/sql/src/main/java/SQLite/ProgressHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package SQLite; - -/** - * Callback interface for SQLite's user defined progress handler. - */ - -public interface ProgressHandler { - - /** - * Invoked for N SQLite VM opcodes. - * The method should return true to continue the - * current query, or false in order - * to abandon the action.<BR><BR> - */ - - public boolean progress(); -} diff --git a/sql/src/main/java/SQLite/Shell.java b/sql/src/main/java/SQLite/Shell.java deleted file mode 100644 index 78d37a1..0000000 --- a/sql/src/main/java/SQLite/Shell.java +++ /dev/null @@ -1,669 +0,0 @@ -package SQLite; - -import SQLite.*; -import java.io.*; -import java.util.*; - -/** - * SQLite command line shell. This is a partial reimplementaion - * of sqlite/src/shell.c and can be invoked by:<P> - * - * <verb> - * java SQLite.Shell [OPTIONS] database [SHELLCMD] - * or - * java -jar sqlite.jar [OPTIONS] database [SHELLCMD] - * </verb> - */ - -public class Shell implements Callback { - Database db; - boolean echo; - int count; - int mode; - boolean showHeader; - String tableName; - String sep; - String cols[]; - int colwidth[]; - String destTable; - PrintWriter pw; - PrintWriter err; - - static final int MODE_Line = 0; - static final int MODE_Column = 1; - static final int MODE_List = 2; - static final int MODE_Semi = 3; - static final int MODE_Html = 4; - static final int MODE_Insert = 5; - static final int MODE_Insert2 = 6; - - public Shell(PrintWriter pw, PrintWriter err) { - this.pw = pw; - this.err = err; - } - - public Shell(PrintStream ps, PrintStream errs) { - pw = new PrintWriter(ps); - err = new PrintWriter(errs); - } - - protected Object clone() { - Shell s = new Shell(this.pw, this.err); - s.db = db; - s.echo = echo; - s.mode = mode; - s.count = 0; - s.showHeader = showHeader; - s.tableName = tableName; - s.sep = sep; - s.colwidth = colwidth; - return s; - } - - static public String sql_quote_dbl(String str) { - if (str == null) { - return "NULL"; - } - int i, single = 0, dbl = 0; - for (i = 0; i < str.length(); i++) { - if (str.charAt(i) == '\'') { - single++; - } else if (str.charAt(i) == '"') { - dbl++; - } - } - if (dbl == 0) { - return "\"" + str + "\""; - } - StringBuffer sb = new StringBuffer("\""); - for (i = 0; i < str.length(); i++) { - char c = str.charAt(i); - if (c == '"') { - sb.append("\"\""); - } else { - sb.append(c); - } - } - return sb.toString(); - } - - static public String sql_quote(String str) { - if (str == null) { - return "NULL"; - } - int i, single = 0, dbl = 0; - for (i = 0; i < str.length(); i++) { - if (str.charAt(i) == '\'') { - single++; - } else if (str.charAt(i) == '"') { - dbl++; - } - } - if (single == 0) { - return "'" + str + "'"; - } - if (dbl == 0) { - return "\"" + str + "\""; - } - StringBuffer sb = new StringBuffer("'"); - for (i = 0; i < str.length(); i++) { - char c = str.charAt(i); - if (c == '\'') { - sb.append("''"); - } else { - sb.append(c); - } - } - return sb.toString(); - } - - static String html_quote(String str) { - if (str == null) { - return "NULL"; - } - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < str.length(); i++) { - char c = str.charAt(i); - if (c == '<') { - sb.append("<"); - } else if (c == '>') { - sb.append(">"); - } else if (c == '&') { - sb.append("&"); - } else { - int x = c; - if (x < 32 || x > 127) { - sb.append("&#" + x + ";"); - } else { - sb.append(c); - } - } - } - return sb.toString(); - } - - static boolean is_numeric(String str) { - try { - Double d = Double.valueOf(str); - } catch (java.lang.Exception e) { - return false; - } - return true; - } - - void set_table_name(String str) { - if (str == null) { - tableName = ""; - return; - } - tableName = Shell.sql_quote(str); - } - - public void columns(String args[]) { - cols = args; - } - - public void types(String args[]) { - /* Empty body to satisfy SQLite.Callback interface. */ - } - - public boolean newrow(String args[]) { - int i; - String tname; - switch (mode) { - case Shell.MODE_Line: - if (args.length == 0) { - break; - } - if (count++ > 0) { - pw.println(""); - } - for (i = 0; i < args.length; i++) { - pw.println(cols[i] + " = " + - args[i] == null ? "NULL" : args[i]); - } - break; - case Shell.MODE_Column: - String csep = ""; - if (count++ == 0) { - colwidth = new int[args.length]; - for (i = 0; i < args.length; i++) { - int w, n; - w = cols[i].length(); - if (w < 10) { - w = 10; - } - colwidth[i] = w; - if (showHeader) { - pw.print(csep + cols[i]); - csep = " "; - } - } - if (showHeader) { - pw.println(""); - } - } - if (args.length == 0) { - break; - } - csep = ""; - for (i = 0; i < args.length; i++) { - pw.print(csep + (args[i] == null ? "NULL" : args[i])); - csep = " "; - } - pw.println(""); - break; - case Shell.MODE_Semi: - case Shell.MODE_List: - if (count++ == 0 && showHeader) { - for (i = 0; i < args.length; i++) { - pw.print(cols[i] + - (i == args.length - 1 ? "\n" : sep)); - } - } - if (args.length == 0) { - break; - } - for (i = 0; i < args.length; i++) { - pw.print(args[i] == null ? "NULL" : args[i]); - if (mode == Shell.MODE_Semi) { - pw.print(";"); - } else if (i < args.length - 1) { - pw.print(sep); - } - } - pw.println(""); - break; - case MODE_Html: - if (count++ == 0 && showHeader) { - pw.print("<TR>"); - for (i = 0; i < args.length; i++) { - pw.print("<TH>" + html_quote(cols[i]) + "</TH>"); - } - pw.println("</TR>"); - } - if (args.length == 0) { - break; - } - pw.print("<TR>"); - for (i = 0; i < args.length; i++) { - pw.print("<TD>" + html_quote(args[i]) + "</TD>"); - } - pw.println("</TR>"); - break; - case MODE_Insert: - if (args.length == 0) { - break; - } - tname = tableName; - if (destTable != null) { - tname = destTable; - } - pw.print("INSERT INTO " + tname + " VALUES("); - for (i = 0; i < args.length; i++) { - String tsep = i > 0 ? "," : ""; - if (args[i] == null) { - pw.print(tsep + "NULL"); - } else if (is_numeric(args[i])) { - pw.print(tsep + args[i]); - } else { - pw.print(tsep + sql_quote(args[i])); - } - } - pw.println(");"); - break; - case MODE_Insert2: - if (args.length == 0) { - break; - } - tname = tableName; - if (destTable != null) { - tname = destTable; - } - pw.print("INSERT INTO " + tname + " VALUES("); - for (i = 0; i < args.length; i++) { - String tsep = i > 0 ? "," : ""; - pw.print(tsep + args[i]); - } - pw.println(");"); - break; - } - return false; - } - - void do_meta(String line) { - StringTokenizer st = new StringTokenizer(line.toLowerCase()); - int n = st.countTokens(); - if (n <= 0) { - return; - } - String cmd = st.nextToken(); - String args[] = new String[n - 1]; - int i = 0; - while (st.hasMoreTokens()) { - args[i] = st.nextToken(); - ++i; - } - if (cmd.compareTo(".dump") == 0) { - new DBDump(this, args); - return; - } - if (cmd.compareTo(".echo") == 0) { - if (args.length > 0 && - (args[0].startsWith("y") || args[0].startsWith("on"))) { - echo = true; - } - return; - } - if (cmd.compareTo(".exit") == 0) { - try { - db.close(); - } catch (Exception e) { - } - System.exit(0); - } - if (cmd.compareTo(".header") == 0) { - if (args.length > 0 && - (args[0].startsWith("y") || args[0].startsWith("on"))) { - showHeader = true; - } - return; - } - if (cmd.compareTo(".help") == 0) { - pw.println(".dump ?TABLE? ... Dump database in text fmt"); - pw.println(".echo ON|OFF Command echo on or off"); - pw.println(".enc ?NAME? Change encoding"); - pw.println(".exit Exit program"); - pw.println(".header ON|OFF Display headers on or off"); - pw.println(".help This message"); - pw.println(".mode MODE Set output mode to\n" + - " line, column, insert\n" + - " list, or html"); - pw.println(".mode insert TABLE Generate SQL insert stmts"); - pw.println(".schema ?PATTERN? List table schema"); - pw.println(".separator STRING Set separator string"); - pw.println(".tables ?PATTERN? List table names"); - return; - } - if (cmd.compareTo(".mode") == 0) { - if (args.length > 0) { - if (args[0].compareTo("line") == 0) { - mode = Shell.MODE_Line; - } else if (args[0].compareTo("column") == 0) { - mode = Shell.MODE_Column; - } else if (args[0].compareTo("list") == 0) { - mode = Shell.MODE_List; - } else if (args[0].compareTo("html") == 0) { - mode = Shell.MODE_Html; - } else if (args[0].compareTo("insert") == 0) { - mode = Shell.MODE_Insert; - if (args.length > 1) { - destTable = args[1]; - } - } - } - return; - } - if (cmd.compareTo(".separator") == 0) { - if (args.length > 0) { - sep = args[0]; - } - return; - } - if (cmd.compareTo(".tables") == 0) { - TableResult t = null; - if (args.length > 0) { - try { - String qarg[] = new String[1]; - qarg[0] = args[0]; - t = db.get_table("SELECT name FROM sqlite_master " + - "WHERE type='table' AND " + - "name LIKE '%%%q%%' " + - "ORDER BY name", qarg); - } catch (Exception e) { - err.println("SQL Error: " + e); - err.flush(); - } - } else { - try { - t = db.get_table("SELECT name FROM sqlite_master " + - "WHERE type='table' ORDER BY name"); - } catch (Exception e) { - err.println("SQL Error: " + e); - err.flush(); - } - } - if (t != null) { - for (i = 0; i < t.nrows; i++) { - String tab = ((String[]) t.rows.elementAt(i))[0]; - if (tab != null) { - pw.println(tab); - } - } - } - return; - } - if (cmd.compareTo(".schema") == 0) { - if (args.length > 0) { - try { - String qarg[] = new String[1]; - qarg[0] = args[0]; - db.exec("SELECT sql FROM sqlite_master " + - "WHERE type!='meta' AND " + - "name LIKE '%%%q%%' AND " + - "sql NOTNULL " + - "ORDER BY type DESC, name", - this, qarg); - } catch (Exception e) { - err.println("SQL Error: " + e); - err.flush(); - } - } else { - try { - db.exec("SELECT sql FROM sqlite_master " + - "WHERE type!='meta' AND " + - "sql NOTNULL " + - "ORDER BY tbl_name, type DESC, name", - this); - } catch (Exception e) { - err.println("SQL Error: " + e); - err.flush(); - } - } - return; - } - if (cmd.compareTo(".enc") == 0) { - try { - db.set_encoding(args.length > 0 ? args[0] : null); - } catch (Exception e) { - err.println("" + e); - err.flush(); - } - return; - } - err.println("Unknown command '" + cmd + "'"); - err.flush(); - } - - String read_line(BufferedReader is, String prompt) { - try { - if (prompt != null) { - pw.print(prompt); - pw.flush(); - } - String line = is.readLine(); - return line; - } catch (IOException e) { - return null; - } - } - - void do_input(BufferedReader is) { - String line, sql = null; - String prompt = "SQLITE> "; - while ((line = read_line(is, prompt)) != null) { - if (echo) { - pw.println(line); - } - if (line.length() > 0 && line.charAt(0) == '.') { - do_meta(line); - } else { - if (sql == null) { - sql = line; - } else { - sql = sql + " " + line; - } - if (Database.complete(sql)) { - try { - db.exec(sql, this); - } catch (Exception e) { - if (!echo) { - err.println(sql); - } - err.println("SQL Error: " + e); - err.flush(); - } - sql = null; - prompt = "SQLITE> "; - } else { - prompt = "SQLITE? "; - } - } - pw.flush(); - } - if (sql != null) { - err.println("Incomplete SQL: " + sql); - err.flush(); - } - } - - void do_cmd(String sql) { - if (db == null) { - return; - } - if (sql.length() > 0 && sql.charAt(0) == '.') { - do_meta(sql); - } else { - try { - db.exec(sql, this); - } catch (Exception e) { - err.println("SQL Error: " + e); - err.flush(); - } - } - } - - public static void main(String args[]) { - Shell s = new Shell(System.out, System.err); - s.mode = Shell.MODE_List; - s.sep = "|"; - s.showHeader = false; - s.db = new Database(); - String dbname = null, sql = null; - for (int i = 0; i < args.length; i++) { - if(args[i].compareTo("-html") ==0) { - s.mode = Shell.MODE_Html; - } else if (args[i].compareTo("-list") == 0) { - s.mode = Shell.MODE_List; - } else if (args[i].compareTo("-line") == 0) { - s.mode = Shell.MODE_Line; - } else if (i < args.length - 1 && - args[i].compareTo("-separator") == 0) { - ++i; - s.sep = args[i]; - } else if (args[i].compareTo("-header") == 0) { - s.showHeader = true; - } else if (args[i].compareTo("-noheader") == 0) { - s.showHeader = false; - } else if (args[i].compareTo("-echo") == 0) { - s.echo = true; - } else if (dbname == null) { - dbname = args[i]; - } else if (sql == null) { - sql = args[i]; - } else { - System.err.println("Arguments: ?OPTIONS? FILENAME ?SQL?"); - System.exit(1); - } - } - if (dbname == null) { - System.err.println("No database file given"); - System.exit(1); - } - try { - s.db.open(dbname, 0); - } catch (Exception e) { - System.err.println("Unable to open database: " + e); - System.exit(1); - } - if (sql != null) { - s.do_cmd(sql); - } else { - // BEGIN android-modified - BufferedReader is = - new BufferedReader(new InputStreamReader(System.in), 8192); - // END android-modified - s.do_input(is); - } - try { - s.db.close(); - } catch (Exception ee) { - } - } -} - -/** - * Internal class for dumping an entire database. - * It contains a special callback interface to traverse the - * tables of the current database and output create SQL statements - * and for the data insert SQL statements. - */ - -class DBDump implements Callback { - Shell s; - - DBDump(Shell s, String tables[]) { - this.s = s; - s.pw.println("BEGIN TRANSACTION;"); - if (tables == null || tables.length == 0) { - try { - s.db.exec("SELECT name, type, sql FROM sqlite_master " + - "WHERE type!='meta' AND sql NOT NULL " + - "ORDER BY substr(type,2,1), name", this); - } catch (Exception e) { - s.err.println("SQL Error: " + e); - s.err.flush(); - } - } else { - String arg[] = new String[1]; - for (int i = 0; i < tables.length; i++) { - arg[0] = tables[i]; - try { - s.db.exec("SELECT name, type, sql FROM sqlite_master " + - "WHERE tbl_name LIKE '%q' AND type!='meta' " + - " AND sql NOT NULL " + - " ORDER BY substr(type,2,1), name", - this, arg); - } catch (Exception e) { - s.err.println("SQL Error: " + e); - s.err.flush(); - } - } - } - s.pw.println("COMMIT;"); - } - - public void columns(String col[]) { - /* Empty body to satisfy SQLite.Callback interface. */ - } - - public void types(String args[]) { - /* Empty body to satisfy SQLite.Callback interface. */ - } - - public boolean newrow(String args[]) { - if (args.length != 3) { - return true; - } - s.pw.println(args[2] + ";"); - if (args[1].compareTo("table") == 0) { - Shell s2 = (Shell) s.clone(); - s2.mode = Shell.MODE_Insert; - s2.set_table_name(args[0]); - String qargs[] = new String[1]; - qargs[0] = args[0]; - try { - if (s2.db.is3()) { - TableResult t = null; - t = s2.db.get_table("PRAGMA table_info('%q')", qargs); - String query; - if (t != null) { - StringBuffer sb = new StringBuffer(); - String sep = ""; - - sb.append("SELECT "); - for (int i = 0; i < t.nrows; i++) { - String col = ((String[]) t.rows.elementAt(i))[1]; - sb.append(sep + "quote(" + - Shell.sql_quote_dbl(col) + ")"); - sep = ","; - } - sb.append(" from '%q'"); - query = sb.toString(); - s2.mode = Shell.MODE_Insert2; - } else { - query = "SELECT * from '%q'"; - } - s2.db.exec(query, s2, qargs); - } else { - s2.db.exec("SELECT * from '%q'", s2, qargs); - } - } catch (Exception e) { - s.err.println("SQL Error: " + e); - s.err.flush(); - return true; - } - } - return false; - } -} diff --git a/sql/src/main/java/SQLite/Stmt.java b/sql/src/main/java/SQLite/Stmt.java deleted file mode 100644 index c4f72ed..0000000 --- a/sql/src/main/java/SQLite/Stmt.java +++ /dev/null @@ -1,288 +0,0 @@ -package SQLite; - -/** - * Class to represent compiled SQLite3 statement. - * - * Note, that all native methods of this class are - * not synchronized, i.e. it is up to the caller - * to ensure that only one thread is in these - * methods at any one time. - */ - -public class Stmt { - - /** - * Internal handle for the SQLite3 statement. - */ - - private long handle = 0; - - /** - * Internal last error code for prepare()/step() methods. - */ - - protected int error_code = 0; - - /** - * Prepare the next SQL statement for the Stmt instance. - * @return true when the next piece of the SQL statement sequence - * has been prepared, false on end of statement sequence. - */ - - public native boolean prepare() throws SQLite.Exception; - - /** - * Perform one step of compiled SQLite3 statement. - * - * Example:<BR> - * <PRE> - * ... - * try { - * Stmt s = db.prepare("select * from x; select * from y;"); - * s.bind(...); - * ... - * s.bind(...); - * while (s.step(cb)) { - * Object o = s.value(...); - * ... - * } - * // s.reset() for re-execution or - * // s.prepare() for the next piece of SQL - * while (s.prepare()) { - * s.bind(...); - * ... - * s.bind(...); - * while (s.step(cb)) { - * Object o = s.value(...); - * ... - * } - * } - * } catch (SQLite.Exception e) { - * s.close(); - * } - * </PRE> - * - * @return true when row data is available, false on end - * of result set. - */ - - public native boolean step() throws SQLite.Exception; - - /** - * Close the compiled SQLite3 statement. - */ - - public native void close() throws SQLite.Exception; - - /** - * Reset the compiled SQLite3 statement without - * clearing parameter bindings. - */ - - public native void reset() throws SQLite.Exception; - - /** - * Clear all bound parameters of the compiled SQLite3 statement. - */ - - public native void clear_bindings() throws SQLite.Exception; - - /** - * Bind positional integer value to compiled SQLite3 statement. - * @param pos parameter index, 1-based - * @param value value of parameter - */ - - public native void bind(int pos, int value) throws SQLite.Exception; - - /** - * Bind positional long value to compiled SQLite3 statement. - * @param pos parameter index, 1-based - * @param value value of parameter - */ - - public native void bind(int pos, long value) throws SQLite.Exception; - - /** - * Bind positional double value to compiled SQLite3 statement. - * @param pos parameter index, 1-based - * @param value value of parameter - */ - - public native void bind(int pos, double value) throws SQLite.Exception; - - /** - * Bind positional byte array to compiled SQLite3 statement. - * @param pos parameter index, 1-based - * @param value value of parameter, may be null - */ - - public native void bind(int pos, byte[] value) throws SQLite.Exception; - - /** - * Bind positional String to compiled SQLite3 statement. - * @param pos parameter index, 1-based - * @param value value of parameter, may be null - */ - - public native void bind(int pos, String value) throws SQLite.Exception; - - /** - * Bind positional SQL null to compiled SQLite3 statement. - * @param pos parameter index, 1-based - */ - - public native void bind(int pos) throws SQLite.Exception; - - /** - * Bind positional zero'ed blob to compiled SQLite3 statement. - * @param pos parameter index, 1-based - * @param length byte size of zero blob - */ - - public native void bind_zeroblob(int pos, int length) - throws SQLite.Exception; - - /** - * Return number of parameters in compiled SQLite3 statement. - * @return int number of parameters - */ - - public native int bind_parameter_count() throws SQLite.Exception; - - /** - * Return name of parameter in compiled SQLite3 statement. - * @param pos parameter index, 1-based - * @return String parameter name - */ - - public native String bind_parameter_name(int pos) throws SQLite.Exception; - - /** - * Return index of named parameter in compiled SQLite3 statement. - * @param name of parameter - * @return int index of parameter, 1-based - */ - - public native int bind_parameter_index(String name) - throws SQLite.Exception; - - - /** - * Retrieve integer column from exec'ed SQLite3 statement. - * @param col column number, 0-based - * @return int column value - */ - - public native int column_int(int col) throws SQLite.Exception; - - /** - * Retrieve long column from exec'ed SQLite3 statement. - * @param col column number, 0-based - * @return long column value - */ - public native long column_long(int col) throws SQLite.Exception; - - /** - * Retrieve double column from exec'ed SQLite3 statement. - * @param col column number, 0-based - * @return double column value - */ - public native double column_double(int col) throws SQLite.Exception; - - /** - * Retrieve blob column from exec'ed SQLite3 statement. - * @param col column number, 0-based - * @return byte[] column value - */ - public native byte[] column_bytes(int col) throws SQLite.Exception; - - /** - * Retrieve string column from exec'ed SQLite3 statement. - * @param col column number, 0-based - * @return String column value - */ - public native String column_string(int col) throws SQLite.Exception; - - /** - * Retrieve column type from exec'ed SQLite3 statement. - * @param col column number, 0-based - * @return column type code, e.g. SQLite.Constants.SQLITE_INTEGER - */ - public native int column_type(int col) throws SQLite.Exception; - - /** - * Retrieve number of columns of exec'ed SQLite3 statement. - * @return int number of columns - */ - - public native int column_count() throws SQLite.Exception; - - /** - * Retrieve column data as object from exec'ed SQLite3 statement. - * @param col column number, 0-based - * @return Object or null - */ - - public Object column(int col) throws SQLite.Exception { - switch (column_type(col)) { - case Constants.SQLITE_INTEGER: - return new Long(column_long(col)); - case Constants.SQLITE_FLOAT: - return new Double(column_double(col)); - case Constants.SQLITE_BLOB: - return column_bytes(col); - case Constants.SQLITE3_TEXT: - return column_string(col); - } - return null; - } - - /** - * Return table name of column of SQLite3 statement. - * @param col column number, 0-based - * @return String or null - */ - - public native String column_table_name(int col) throws SQLite.Exception; - - /** - * Return database name of column of SQLite3 statement. - * @param col column number, 0-based - * @return String or null - */ - - public native String column_database_name(int col) throws SQLite.Exception; - - /** - * Return declared column type of SQLite3 statement. - * @param col column number, 0-based - * @return String or null - */ - - public native String column_decltype(int col) throws SQLite.Exception; - - /** - * Return origin column name of column of SQLite3 statement. - * @param col column number, 0-based - * @return String or null - */ - - public native String column_origin_name(int col) throws SQLite.Exception; - - /** - * Destructor for object. - */ - - protected native void finalize(); - - /** - * Internal native initializer. - */ - - private static native void internal_init(); - - static { - internal_init(); - } -} diff --git a/sql/src/main/java/SQLite/StringEncoder.java b/sql/src/main/java/SQLite/StringEncoder.java deleted file mode 100644 index c2f20ad..0000000 --- a/sql/src/main/java/SQLite/StringEncoder.java +++ /dev/null @@ -1,201 +0,0 @@ -package SQLite; - -/** - * String encoder/decoder for SQLite. - * - * This module was kindly donated by Eric van der Maarel of Nedap N.V. - * - * This encoder was implemented based on an original idea from an anonymous - * author in the source code of the SQLite distribution. - * I feel obliged to provide a quote from the original C-source code: - * - * "The author disclaims copyright to this source code. In place of - * a legal notice, here is a blessing: - * - * May you do good and not evil. - * May you find forgiveness for yourself and forgive others. - * May you share freely, never taking more than you give." - * - */ - -public class StringEncoder { - - /** - * Encodes the given byte array into a string that can be used by - * the SQLite database. The database cannot handle null (0x00) and - * the character '\'' (0x27). The encoding consists of escaping - * these characters with a reserved character (0x01). The escaping - * is applied after determining and applying a shift that minimizes - * the number of escapes required. - * With this encoding the data of original size n is increased to a - * maximum of 1+(n*257)/254. - * For sufficiently large n the overhead is thus less than 1.2%. - * @param a the byte array to be encoded. A null reference is handled as - * an empty array. - * @return the encoded bytes as a string. When an empty array is - * provided a string of length 1 is returned, the value of - * which is bogus. - * When decoded with this class' <code>decode</code> method - * a string of size 1 will return an empty byte array. - */ - - public static String encode(byte[] a) { - // check input - if (a == null || a.length == 0) { - // bogus shift, no data - return "x"; - } - // determine count - int[] cnt = new int[256]; - for (int i = 0 ; i < a.length; i++) { - cnt[a[i] & 0xff]++; - } - // determine shift for minimum number of escapes - int shift = 1; - int nEscapes = a.length; - for (int i = 1; i < 256; i++) { - if (i == '\'') { - continue; - } - int sum = cnt[i] + cnt[(i + 1) & 0xff] + cnt[(i + '\'') & 0xff]; - if (sum < nEscapes) { - nEscapes = sum; - shift = i; - if (nEscapes == 0) { - // cannot become smaller - break; - } - } - } - // construct encoded output - int outLen = a.length + nEscapes + 1; - StringBuffer out = new StringBuffer(outLen); - out.append((char)shift); - for (int i = 0; i < a.length; i++) { - // apply shift - char c = (char)((a[i] - shift)&0xff); - // insert escapes - if (c == 0) { // forbidden - out.append((char)1); - out.append((char)1); - } else if (c == 1) { // escape character - out.append((char)1); - out.append((char)2); - } else if (c == '\'') { // forbidden - out.append((char)1); - out.append((char)3); - } else { - out.append(c); - } - } - return out.toString(); - } - - /** - * Decodes the given string that is assumed to be a valid encoding - * of a byte array. Typically the given string is generated by - * this class' <code>encode</code> method. - * @param s the given string encoding. - * @return the byte array obtained from the decoding. - * @throws IllegalArgumentException when the string given is not - * a valid encoded string for this encoder. - */ - - public static byte[] decode(String s) { - char[] a = s.toCharArray(); - if (a.length > 2 && a[0] == 'X' && - a[1] == '\'' && a[a.length-1] == '\'') { - // SQLite3 BLOB syntax - byte[] result = new byte[(a.length-3)/2]; - for (int i = 2, k = 0; i < a.length - 1; i += 2, k++) { - byte tmp = (byte) (a[i] - '0'); - if (tmp > 15) { - tmp -= 0x20; - } - result[k] = (byte) (tmp << 4); - tmp = (byte) (a[i+1] - '0'); - if (tmp > 15) { - tmp -= 0x20; - } - result[k] |= tmp; - } - return result; - } - // first element is the shift - byte[] result = new byte[a.length-1]; - int i = 0; - int shift = s.charAt(i++); - int j = 0; - while (i < s.length()) { - int c; - if ((c = s.charAt(i++)) == 1) { // escape character found - if ((c = s.charAt(i++)) == 1) { - c = 0; - } else if (c == 2) { - c = 1; - } else if (c == 3) { - c = '\''; - } else { - throw new IllegalArgumentException( - "invalid string passed to decoder: " + j); - } - } - // do shift - result[j++] = (byte)((c + shift) & 0xff); - } - int outLen = j; - // provide array of correct length - if (result.length != outLen) { - result = byteCopy(result, 0, outLen, new byte[outLen]); - } - return result; - } - - /** - * Copies count elements from source, starting at element with - * index offset, to the given target. - * @param source the source. - * @param offset the offset. - * @param count the number of elements to be copied. - * @param target the target to be returned. - * @return the target being copied to. - */ - - private static byte[] byteCopy(byte[] source, int offset, - int count, byte[] target) { - for (int i = offset, j = 0; i < offset + count; i++, j++) { - target[j] = source[i]; - } - return target; - } - - - static final char[] xdigits = { - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' - }; - - /** - * Encodes the given byte array into SQLite3 blob notation, ie X'..' - * @param a the byte array to be encoded. A null reference is handled as - * an empty array. - * @return the encoded bytes as a string. - */ - - public static String encodeX(byte[] a) { - // check input - if (a == null || a.length == 0) { - return "X''"; - } - int outLen = a.length + 3; - StringBuffer out = new StringBuffer(outLen); - out.append('X'); - out.append('\''); - for (int i = 0; i < a.length; i++) { - out.append(xdigits[a[i] >> 4]); - out.append(xdigits[a[i] & 0x0F]); - } - out.append('\''); - return out.toString(); - } -} diff --git a/sql/src/main/java/SQLite/TableResult.java b/sql/src/main/java/SQLite/TableResult.java deleted file mode 100644 index 1a7fb57..0000000 --- a/sql/src/main/java/SQLite/TableResult.java +++ /dev/null @@ -1,133 +0,0 @@ -package SQLite; - -import java.util.Vector; - -/** - * Class representing an SQLite result set as - * returned by the - * <A HREF="Database.html#get_table(java.lang.String)">Database.get_table</A> - * convenience method. - * <BR><BR> - * Example:<BR> - * - * <PRE> - * ... - * SQLite.Database db = new SQLite.Database(); - * db.open("db", 0); - * System.out.print(db.get_table("select * from TEST")); - * ... - * </PRE> - * Example output:<BR> - * - * <PRE> - * id|firstname|lastname| - * 0|John|Doe| - * 1|Speedy|Gonzales| - * ... - * </PRE> - */ - -public class TableResult implements Callback { - - /** - * Number of columns in the result set. - */ - - public int ncolumns; - - /** - * Number of rows in the result set. - */ - - public int nrows; - - /** - * Column names of the result set. - */ - - public String column[]; - - /** - * Types of columns of the result set or null. - */ - - public String types[]; - - /** - * Rows of the result set. Each row is stored as a String array. - */ - - public Vector rows; - - /** - * Create an empty result set. - */ - - public TableResult() { - clear(); - } - - /** - * Clear result set. - */ - - public void clear() { - column = new String[0]; - types = null; - rows = new Vector(); - ncolumns = nrows = 0; - } - - /** - * Callback method used while the query is executed. - */ - - public void columns(String coldata[]) { - column = coldata; - ncolumns = column.length; - } - - /** - * Callback method used while the query is executed. - */ - - public void types(String types[]) { - this.types = types; - } - - /** - * Callback method used while the query is executed. - */ - - public boolean newrow(String rowdata[]) { - if (rowdata != null) { - rows.addElement(rowdata); - nrows++; - } - return false; - } - - /** - * Make String representation of result set. - */ - - public String toString() { - StringBuffer sb = new StringBuffer(); - int i; - for (i = 0; i < ncolumns; i++) { - sb.append(column[i] == null ? "NULL" : column[i]); - sb.append('|'); - } - sb.append('\n'); - for (i = 0; i < nrows; i++) { - int k; - String row[] = (String[]) rows.elementAt(i); - for (k = 0; k < ncolumns; k++) { - sb.append(row[k] == null ? "NULL" : row[k]); - sb.append('|'); - } - sb.append('\n'); - } - return sb.toString(); - } -} diff --git a/sql/src/main/java/SQLite/Trace.java b/sql/src/main/java/SQLite/Trace.java deleted file mode 100644 index 19ed2a1..0000000 --- a/sql/src/main/java/SQLite/Trace.java +++ /dev/null @@ -1,17 +0,0 @@ -package SQLite; - -/** - * Callback interface for SQLite's trace function. - */ - -public interface Trace { - - /** - * Callback to trace (ie log) one SQL statement. - * - * @param stmt SQL statement string - */ - - public void trace(String stmt); -} - diff --git a/sql/src/main/java/SQLite/Vm.java b/sql/src/main/java/SQLite/Vm.java deleted file mode 100644 index 9856ed0..0000000 --- a/sql/src/main/java/SQLite/Vm.java +++ /dev/null @@ -1,78 +0,0 @@ -package SQLite; - -/** - * Class to represent compiled SQLite VM. - */ - -public class Vm { - - /** - * Internal handle for the compiled SQLite VM. - */ - - private long handle = 0; - - /** - * Internal last error code for compile()/step() methods. - */ - - protected int error_code = 0; - - /** - * Perform one step on compiled SQLite VM. - * The result row is passed to the given callback interface.<BR><BR> - * - * Example:<BR> - * <PRE> - * ... - * try { - * Vm vm = db.compile("select * from x; select * from y;"); - * while (vm.step(cb)) { - * ... - * } - * while (vm.compile()) { - * while (vm.step(cb)) { - * ... - * } - * } - * } catch (SQLite.Exception e) { - * } - * </PRE> - * - * @param cb the object implementing the callback methods. - * @return true as long as more row data can be retrieved, - * false, otherwise. - */ - - public native boolean step(Callback cb) throws SQLite.Exception; - - /** - * Compile the next SQL statement for the SQLite VM instance. - * @return true when SQL statement has been compiled, false - * on end of statement sequence. - */ - - public native boolean compile() throws SQLite.Exception; - - /** - * Abort the compiled SQLite VM. - */ - - public native void stop() throws SQLite.Exception; - - /** - * Destructor for object. - */ - - protected native void finalize(); - - /** - * Internal native initializer. - */ - - private static native void internal_init(); - - static { - internal_init(); - } -} diff --git a/sql/src/main/java/java/sql/Array.java b/sql/src/main/java/java/sql/Array.java deleted file mode 100644 index 6113c46..0000000 --- a/sql/src/main/java/java/sql/Array.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.util.Map; - -/** - * A Java representation of the SQL {@code ARRAY} type. - * - * @since Android 1.0 - */ -public interface Array { - - /** - * Retrieves the contents of the SQL {@code ARRAY} value as a Java array - * object. - * - * @return A Java array containing the elements of this Array - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Object getArray() throws SQLException; - - /** - * Returns part of the SQL {@code ARRAY} associated with this array, - * starting at a particular {@code index} and comprising up to {@code count} - * successive elements of the SQL array. - * - * @param index - * the start position in the array where the values are - * retrieved. - * @param count - * the number of elements to retrieve. - * @return A Java array containing the desired set of elements from this Array - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Object getArray(long index, int count) throws SQLException; - - /** - * Returns part of the SQL {@code ARRAY} associated with this array, - * starting at a particular {@code index} and comprising up to {@code count} - * successive elements of the SQL array. - * - * @param index - * the start position in the array where the values are - * retrieved. - * @param count - * the number of elements to retrieve. - * @param map - * the map defining the correspondence between SQL type names - * and Java types. - * @return A Java array containing the desired set of elements from this Array - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Object getArray(long index, int count, Map<String, Class<?>> map) - throws SQLException; - - /** - * Returns the data from the underlying SQL {@code ARRAY} as a Java array. - * - * @param map - * the map defining the correspondence between SQL type names - * and Java types. - * @return A Java array containing the elements of this array - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Object getArray(Map<String, Class<?>> map) throws SQLException; - - /** - * Returns the JDBC type of the entries in this array's underlying - * SQL array. - * - * @return An integer constant from the {@code java.sql.Types} class - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public int getBaseType() throws SQLException; - - /** - * Returns the SQL type name of the entries in this array's underlying - * SQL array. - * - * @return The database specific name or a fully-qualified SQL type name. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getBaseTypeName() throws SQLException; - - /** - * Returns a ResultSet object which holds the entries of the SQL {@code - * ARRAY} associated with this array. - * - * @return the elements of the array as a {@code ResultSet}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getResultSet() throws SQLException; - - /** - * Returns a {@code ResultSet} object that holds the entries of a subarray, - * beginning at a particular index and comprising up to {@code count} - * successive entries. - * - * @param index - * the start position in the array where the values are - * retrieved. - * @param count - * the number of elements to retrieve. - * @return the elements of the array as a {@code ResultSet}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getResultSet(long index, int count) throws SQLException; - - /** - * Returns a {@code ResultSet} object that holds the entries of a subarray, - * beginning at a particular index and comprising up to {@code count} - * successive entries. - * - * @param index - * the start position in the array where the values are - * retrieved. - * @param count - * the number of elements to retrieve. - * @param map - * the map defining the correspondence between SQL type names - * and Java types. - * @return the {@code ResultSet} the array's custom type values. if a - * database error has occurred. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getResultSet(long index, int count, - Map<String, Class<?>> map) throws SQLException; - - /** - * Returns a {@code ResultSet} object which holds the entries of the SQL - * {@code ARRAY} associated with this array. - * - * @param map - * the map defining the correspondence between SQL type names - * and Java types. - * @return the array as a {@code ResultSet}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getResultSet(Map<String, Class<?>> map) - throws SQLException; - -} diff --git a/sql/src/main/java/java/sql/BatchUpdateException.java b/sql/src/main/java/java/sql/BatchUpdateException.java deleted file mode 100644 index 36a7ef9..0000000 --- a/sql/src/main/java/java/sql/BatchUpdateException.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.Serializable; - -/** - * This exception is thrown if a problem occurs during a batch update operation. - * <p> - * A {@code BatchUpdateException} provides additional information about the - * problem that occurred, compared with a standard {@code SQLException}. It - * supplies update counts for successful commands which were executed before the - * exception was encountered. - * </p> - * The element order in the array of update counts matches the order that the - * commands were added to the batch operation. - * <p> - * Once a batch update command fails and a {@code BatchUpdateException} is - * thrown, the JDBC driver may continue processing the remaining commands in the - * batch. If the driver does process more commands after the problem occurs, the - * array returned by {@code BatchUpdateException.getUpdateCounts} has an element - * for every command in the batch, not only those that executed successfully. In - * this case, the array element for any command which encountered a problem is - * set to {@code Statement.EXECUTE_FAILED}. - * </p> - * - * @since Android 1.0 - */ -public class BatchUpdateException extends SQLException implements Serializable { - - private static final long serialVersionUID = 5977529877145521757L; - - private int[] updateCounts = null; - - /** - * Creates a default {@code BatchUpdateException} with the parameters - * <i>reason</i>, <i>SQLState</i>, and <i>update counts</i> set to {@code - * null} and the <i>vendor code</i> set to 0. - * - * @since Android 1.0 - */ - public BatchUpdateException() { - super(); - } - - /** - * Creates a {@code BatchUpdateException} with the {@code updateCounts} set - * to the supplied value. All other fields are set to their - * default values. - * - * @param updateCounts - * the array of {@code updateCounts} giving the number of - * successful updates (or another status code) for each command - * in the batch that was attempted. - * @since Android 1.0 - */ - public BatchUpdateException(int[] updateCounts) { - super(); - this.updateCounts = updateCounts; - } - - /** - * Creates a {@code BatchUpdateException} with the {@code updateCounts} and - * {@code reason} set to the supplied values. All other fields are set to their - * default values. - * - * @param reason - * the message providing information about the source of this - * exception. - * @param updateCounts - * the array of {@code updateCounts} giving the number of - * successful updates (or another status code) for each command - * in the batch that was attempted. - * @since Android 1.0 - */ - public BatchUpdateException(String reason, int[] updateCounts) { - super(reason); - this.updateCounts = updateCounts; - } - - /** - * Creates a {@code BatchUpdateException} with the {@code reason}, {@code - * SQLState} and {@code updateCounts} set to the supplied values. All other - * fields are set to their default values. - * - * @param reason - * the message providing information about the source of this - * exception. - * @param SQLState - * the X/OPEN value to use for the {@code SQLState} - * @param updateCounts - * the array of {@code updateCounts} giving the number of - * successful updates (or another status code) for each command - * in the batch that was attempted. - * @since Android 1.0 - */ - public BatchUpdateException(String reason, String SQLState, - int[] updateCounts) { - super(reason, SQLState); - this.updateCounts = updateCounts; - } - - /** - * Creates a {@code BatchUpdateException} for the case where all relevant - * information is provided. - * - * @param reason - * the message providing information about the source of this - * exception. - * @param SQLState - * the X/OPEN value to use for the {@code SQLState}. - * @param vendorCode - * the value to use for the vendor error code. - * @param updateCounts - * the array of {@code updateCounts} giving the number of - * successful updates (or another status code) for each command - * in the batch that was attempted. - * @since Android 1.0 - */ - public BatchUpdateException(String reason, String SQLState, int vendorCode, - int[] updateCounts) { - super(reason, SQLState, vendorCode); - this.updateCounts = updateCounts; - } - - /** - * Gets the <i>update count</i> array giving status information for every - * command that was attempted in the batch. - * <p> - * If a batch update command fails and a {@code BatchUpdateException} is - * thrown, the JDBC driver may continue processing the remaining commands in - * the batch. If the driver does so, the array returned by {@code - * BatchUpdateException.getUpdateCounts} has an element for every command in - * the batch, not only those that executed successfully. In this case, the - * array element for any command which encountered a problem is set to - * {@code Statement.EXECUTE_FAILED}. - * - * @return an array that contains the successful update counts, before this - * exception was thrown. Alternatively, if the driver continues to - * process commands following an error, for each successive command - * there is a corresponding element in the array giving one of the - * following status values: - * <ol> - * <li>the number of successful updates</li> <li>{@code - * Statement.SUCCESS_NO_INFO} indicating that the command completed - * successfully, but the amount of altered rows is unknown.</li> - * <li>{@code Statement.EXECUTE_FAILED} indicating that the command - * was unsuccessful.</li> - * </ol> - * @since Android 1.0 - */ - public int[] getUpdateCounts() { - return updateCounts; - } -} diff --git a/sql/src/main/java/java/sql/Blob.java b/sql/src/main/java/java/sql/Blob.java deleted file mode 100644 index e6d9b19..0000000 --- a/sql/src/main/java/java/sql/Blob.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.OutputStream; -import java.io.InputStream; - -/** - * A Java interface representing the SQL {@code BLOB} type. - * <p> - * An SQL {@code BLOB} type stores a large array of binary data (bytes) as the - * value in a column of a database. - * </p> - * The {@code java.sql.Blob} interface provides methods for setting and - * retrieving data in the {@code Blob}, for querying {@code Blob} data length, - * and for searching for data within the {@code Blob}. - * - * @since Android 1.0 - */ -public interface Blob { - - /** - * Retrieves this {@code Blob} object as a binary stream. - * - * @return a binary {@code InputStream} giving access to the {@code Blob} - * data. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public InputStream getBinaryStream() throws SQLException; - - /** - * Gets a portion of the value of this {@code Blob} as an array of bytes. - * - * @param pos - * the position of the first byte in the {@code Blob} to get, - * where the first byte in the {@code Blob} has position 1. - * @param length - * the number of bytes to get. - * @return a byte array containing the data from the {@code Blob}, starting - * at {@code pos} and is up to {@code length} bytes long. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public byte[] getBytes(long pos, int length) throws SQLException; - - /** - * Gets the number of bytes in this {@code Blob} object. - * - * @return a {@code long} value with the length of the {@code Blob} in - * bytes. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public long length() throws SQLException; - - /** - * Search for the position in this {@code Blob} at which a specified pattern - * begins, starting at a specified position within the {@code Blob}. - * - * @param pattern - * a {@code Blob} containing the pattern of data to search for in - * this {@code Blob}. - * @param start - * the position within this {@code Blob} to start the search, - * where the first position in the {@code Blob} is {@code 1}. - * @return a {@code long} value with the position at which the pattern - * begins. Returns {@code -1} if the pattern is not found in this - * {@code Blob}. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public long position(Blob pattern, long start) throws SQLException; - - /** - * Search for the position in this {@code Blob} at which the specified - * pattern begins, starting at a specified position within the {@code Blob}. - * - * @param pattern - * a byte array containing the pattern of data to search for in - * this {@code Blob}. - * @param start - * the position within this {@code Blob} to start the search, - * where the first position in the {@code Blob} is {@code 1}. - * @return a {@code long} value with the position at which the pattern - * begins. Returns {@code -1} if the pattern is not found in this - * {@code Blob}. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public long position(byte[] pattern, long start) throws SQLException; - - /** - * Gets a stream that can be used to write binary data to this {@code Blob}. - * - * @param pos - * the position within this {@code Blob} at which to start - * writing, where the first position in the {@code Blob} is - * {@code 1}. - * @return a binary {@code InputStream} which can be used to write data into - * the {@code Blob} starting at the specified position. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public OutputStream setBinaryStream(long pos) throws SQLException; - - /** - * Writes a specified array of bytes to this {@code Blob} object, starting - * at a specified position. Returns the number of bytes written. - * - * @param pos - * the position within this {@code Blob} at which to start - * writing, where the first position in the {@code Blob} is - * {@code 1}. - * @param theBytes - * an array of bytes to write into the {@code Blob}. - * @return an integer containing the number of bytes written to the {@code - * Blob}. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public int setBytes(long pos, byte[] theBytes) throws SQLException; - - /** - * Writes a portion of a specified byte array to this {@code Blob}. Returns - * the number of bytes written. - * - * @param pos - * the position within this {@code Blob} at which to start - * writing, where the first position in the {@code Blob} is - * {@code 1}. - * @param theBytes - * an array of bytes to write into the {@code Blob}. - * @param offset - * the offset into the byte array from which to start writing - * data - the first byte in the array has offset {@code 0}. - * @param len - * the length of data to write in number of bytes. - * @return an integer containing the number of bytes written to the {@code - * Blob}. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public int setBytes(long pos, byte[] theBytes, int offset, int len) - throws SQLException; - - /** - * Truncate the value of this {@code Blob} object to a specified length in - * bytes. - * - * @param len - * the length of data in bytes after which this {@code Blob} - * is to be truncated. - * @throws SQLException - * if an error occurs accessing the {@code Blob}. - * @since Android 1.0 - */ - public void truncate(long len) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/CallableStatement.java b/sql/src/main/java/java/sql/CallableStatement.java deleted file mode 100644 index 7a90041..0000000 --- a/sql/src/main/java/java/sql/CallableStatement.java +++ /dev/null @@ -1,1483 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.math.BigDecimal; -import java.util.Calendar; -import java.util.Map; -import java.net.URL; -import java.io.InputStream; -import java.io.Reader; - -/** - * An interface used to call <i>Stored Procedures</i>. - * <p> - * The JDBC API provides an SQL escape syntax allowing <i>Stored Procedures</i> - * to be called in a standard way for all databases. The JDBC escape syntax has - * two forms. One form includes a result parameter. The second form does not - * include a result parameter. Where the result parameter is used, it must be - * declared as an {@code OUT} parameter. Other parameters can be declared as - * {@code IN}, {@code OUT}, or {@code INOUT}. Parameters are referenced either by - * name or by a numerical index starting at 1. - * <p> - * The correct syntax is: - * </p> - * <dd> - * <dl> - * { ?= call <procedurename> [( [parameter1,parameter2,...] )] } - * </dl> - * <dl> - * { call <procedurename> [( [parameter1,parameter2,...] )] } - * </dl> - * </code></dd> </p> {@code IN} parameters are set before calling the procedure, - * using the setter methods which are inherited from {@code PreparedStatement}. - * For {@code OUT} parameters, their type must be registered before executing - * the stored procedure. The values are retrieved using the getter methods - * defined in the {@code CallableStatement} interface. - * <p> - * {@code CallableStatement}s can return one or more {@code ResultSets}. In the - * event that multiple {@code ResultSets} are returned, they are accessed using - * the methods inherited from the {@code Statement} interface. - * </p> - * - * @since Android 1.0 - */ -public interface CallableStatement extends PreparedStatement { - - /** - * Gets the value of a specified JDBC {@code ARRAY} parameter as a - * {@code java.sql.Array}. - * - * @param parameterIndex - * the parameter index, where the first parameter has - * index 1. - * @return a {@code java.sql.Array} containing the parameter value. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Array getArray(int parameterIndex) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code ARRAY} parameter as a {@code - * java.sql.Array}. - * - * @param parameterName - * the desired parameter's name. - * @return a {@code java.sql.Array} containing the parameter's value. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Array getArray(String parameterName) throws SQLException; - - /** - * Returns a new {@link BigDecimal} representation of the JDBC {@code - * NUMERIC} parameter specified by the input index. - * - * @param parameterIndex - * the parameter number index where the first parameter has index - * 1. - * @return a {@code java.math.BigDecimal} representing the value of the - * specified parameter. The value {@code null} is returned if - * the parameter in question is an SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public BigDecimal getBigDecimal(int parameterIndex) throws SQLException; - - /** - * Returns a new {@link BigDecimal} representation of the JDBC {@code - * NUMERIC} parameter specified by the input index. The number of digits - * after the decimal point is specified by {@code scale}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param scale - * the number of digits after the decimal point to get. - * @return a {@code java.math.BigDecimal} representing the value of the - * specified parameter. The value {@code null} is returned if - * the parameter in question is an SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @deprecated Use {@link #getBigDecimal(int)} or - * {@link #getBigDecimal(String)} - * @since Android 1.0 - */ - @Deprecated - public BigDecimal getBigDecimal(int parameterIndex, int scale) - throws SQLException; - - /** - * Returns a new {@link BigDecimal} representation of the JDBC {@code - * NUMERIC} parameter specified by the input name. - * - * @param parameterName - * the desired parameter's name. - * @return a {@code java.math.BigDecimal} representing the value of the - * specified parameter. The value {@code null} is returned if - * the parameter in question is an SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public BigDecimal getBigDecimal(String parameterName) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code BLOB} parameter as a {@code - * java.sql.Blob}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return a {@code java.sql.Blob} representing the value of the - * specified parameter. The value {@code null} is returned if - * the parameter in question is an SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Blob getBlob(int parameterIndex) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code BLOB} parameter as a {@code - * java.sql.Blob}. - * - * @param parameterName - * the desired parameter's name. - * @return a {@code java.sql.Blob} representing the value of the - * specified parameter. The value {@code null} is returned if - * the parameter in question is an SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Blob getBlob(String parameterName) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code BIT} parameter as a boolean. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return a {@code boolean} representing the parameter value. {@code false} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public boolean getBoolean(int parameterIndex) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code BIT} parameter as a {@code - * boolean}. - * - * @param parameterName - * the desired parameter's name. - * @return a {@code boolean} representation of the value of the parameter. - * {@code false} is returned if the SQL value is {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public boolean getBoolean(String parameterName) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code TINYINT} parameter as a {@code - * byte}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return a {@code byte} representation of the value of the parameter. - * {@code 0} is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public byte getByte(int parameterIndex) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code TINYINT} parameter as a Java - * {@code byte}. - * - * @param parameterName - * the desired parameter's name. - * @return a {@code byte} representation of the value of the parameter. - * {@code 0} is returned if the SQL value is {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public byte getByte(String parameterName) throws SQLException; - - /** - * Returns a byte array representation of the indexed JDBC {@code BINARY} or - * {@code VARBINARY} parameter. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return an array of bytes giving the value of the parameter. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public byte[] getBytes(int parameterIndex) throws SQLException; - - /** - * Returns a byte array representation of the named JDBC {@code BINARY} or - * {@code VARBINARY} parameter. - * - * @param parameterName - * the name of the parameter. - * @return an array of bytes giving the value of the parameter. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public byte[] getBytes(String parameterName) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code CLOB} parameter as a {@code - * java.sql.Clob}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return a {@code java.sql.Clob} representing the value of the - * parameter. {@code null} is returned if the value is SQL - * {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Clob - * @since Android 1.0 - */ - public Clob getClob(int parameterIndex) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code CLOB} parameter as a {@code - * java.sql.Clob}. - * - * @param parameterName - * the name of the parameter. - * @return a {@code java.sql.Clob} with the value of the parameter. {@code - * null} is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Clob - * @since Android 1.0 - */ - public Clob getClob(String parameterName) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code DATE} parameter as a {@code - * java.sql.Date}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return the {@code java.sql.Date} representing the parameter's value. - * {@code null} is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Date - * @since Android 1.0 - */ - public Date getDate(int parameterIndex) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code DATE} parameter as a {@code - * java.sql.Date}, using the specified {@code Calendar} to construct the date. - * <p> - * The JDBC driver uses the calendar to create the Date using a particular - * timezone and locale. The default behavior of the driver is to use the Java - * virtual machine default settings. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param cal - * the {@code Calendar} to use to construct the date - * @return the {@code java.sql.Date} giving the parameter's value. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Date - * @since Android 1.0 - */ - public Date getDate(int parameterIndex, Calendar cal) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code DATE} parameter as a {@code - * java.sql.Date}. - * - * @param parameterName - * the name of the desired parameter. - * @return the {@code java.sql.Date} giving the parameter's value. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Date - * @since Android 1.0 - */ - public Date getDate(String parameterName) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code DATE} parameter as a {@code - * java.sql.Date}, using the specified {@code Calendar} to construct the date. - * <p> - * The JDBC driver uses the calendar to create the date using a particular - * timezone and locale. The default behavior of the driver is to use the Java - * virtual machine default settings. - * </p> - * - * @param parameterName - * the name of the desired parameter. - * @param cal - * used for creating the returned {@code Date}. - * @return the {@code java.sql.Date} giving the parameter's value. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Date - * @since Android 1.0 - */ - public Date getDate(String parameterName, Calendar cal) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code DOUBLE} parameter as a - * {@code double}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return the parameter's value as a {@code double}. {@code 0.0} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public double getDouble(int parameterIndex) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code DOUBLE} parameter as a - * {@code double}. - * - * @param parameterName - * the name of the desired parameter. - * @return the parameter's value as a {@code double}. {@code 0.0} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public double getDouble(String parameterName) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code FLOAT} parameter as a {@code - * float}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return the parameter's value as a {@code float}. {@code 0.0} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public float getFloat(int parameterIndex) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code FLOAT} parameter as a Java - * {@code float}. - * - * @param parameterName - * the name of the desired parameter. - * @return the parameter's value as a {@code float}. {@code 0.0} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public float getFloat(String parameterName) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code INTEGER} parameter as an - * {@code int}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return the {@code int} giving the parameter's value. {@code 0} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public int getInt(int parameterIndex) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code INTEGER} parameter as an - * {@code int}. - * - * @param parameterName - * the name of the desired parameter. - * @return the {@code int} giving the parameter's value. {@code 0} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public int getInt(String parameterName) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code BIGINT} parameter as a - * {@code long}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return the {@code long} giving the parameter's value. {@code 0} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public long getLong(int parameterIndex) throws SQLException; - - /** - * Gets the value of the specified JDBC {@code BIGINT} parameter as a - * {@code long}. - * - * @param parameterName - * the name of the desired parameter. - * @return the {@code long} giving the parameter's value. {@code 0} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public long getLong(String parameterName) throws SQLException; - - /** - * Gets the value of the specified parameter as a Java {@code Object}. - * <p> - * The object type returned is the JDBC type registered for the parameter - * with a {@code registerOutParameter} call. If a parameter was registered - * as a {@code java.sql.Types.OTHER} then it may hold abstract types that - * are particular to the connected database. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return an Object holding the value of the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Object getObject(int parameterIndex) throws SQLException; - - /** - * Gets the value of the specified parameter as an {@code Object}. The - * {@code Map} gives the correspondence between SQL types and Java classes. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param map - * the {@code Map} giving the correspondence between SQL - * types and Java classes. - * @return an Object holding the value of the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Object getObject(int parameterIndex, Map<String, Class<?>> map) - throws SQLException; - - /** - * Gets the value of the specified parameter as an {@code Object}. - * <p> - * The object type returned is the JDBC type that was registered for - * the parameter by an earlier call to {@link #registerOutParameter}. - * If a parameter was registered as a {@code java.sql.Types.OTHER} - * then it may hold abstract types that are particular to the - * connected database. - * </p> - * - * @param parameterName - * the parameter name. - * @return the Java {@code Object} representation of the value of the - * parameter. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Object getObject(String parameterName) throws SQLException; - - /** - * Gets the value of a specified parameter as an {@code Object}. The - * actual return type is determined by the {@code Map} parameter which - * gives the correspondence between SQL types and Java classes. - * - * @param parameterName - * the parameter name. - * @param map - * the {@code Map} of SQL types to their Java counterparts - * @return an {@code Object} holding the value of the parameter. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Object getObject(String parameterName, Map<String, Class<?>> map) - throws SQLException; - - /** - * Gets the value of a specified SQL {@code REF(<structured type>)} - * parameter as a {@code java.sql.Ref}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return a {@code java.sql.Ref} with the parameter value. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Ref getRef(int parameterIndex) throws SQLException; - - /** - * Gets the value of a specified SQL {@code REF(<structured type>)} - * parameter as a {@code java.sql.Ref}. - * - * @param parameterName - * the desired parameter's name. - * @return the parameter's value in the form of a {@code - * java.sql.Ref}. A {@code null} reference is returned if the - * parameter's value is SQL {@code NULL}. - * @throws SQLException - * if there is a problem accessing the database. - * @see Ref - * @since Android 1.0 - */ - public Ref getRef(String parameterName) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code SMALLINT} parameter as a - * {@code short}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return the parameter's value as a {@code short}. 0 is returned - * if the parameter's value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public short getShort(int parameterIndex) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code SMALLINT} parameter as a - * {@code short}. - * - * @param parameterName - * the desired parameter's name. - * @return the parameter's value as a {@code short}. 0 is returned - * if the parameter's value is SQL {@code NULL}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public short getShort(String parameterName) throws SQLException; - - /** - * Returns the indexed parameter's value as a {@code String}. The - * parameter value must be one of the JDBC types {@code CHAR}, - * {@code VARCHAR} or {@code LONGVARCHAR}. - * <p> - * The {@code String} corresponding to a {@code CHAR} of fixed length - * will be of identical length to the value in the database inclusive - * of padding characters. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return the parameter's value as a {@code String}. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public String getString(int parameterIndex) throws SQLException; - - /** - * Returns the named parameter's value as a string. The parameter value must - * be one of the JDBC types {@code CHAR}, {@code VARCHAR} or {@code - * LONGVARCHAR}. - * <p> - * The string corresponding to a {@code CHAR} of fixed length will be of - * identical length to the value in the database inclusive of padding - * characters. - * </p> - * - * @param parameterName - * the desired parameter's name. - * @return the parameter's value as a {@code String}. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public String getString(String parameterName) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code TIME} parameter as a {@code - * java.sql.Time}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return the parameter's value as a {@code java.sql.Time}. - * {@code null} is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Time - * @since Android 1.0 - */ - public Time getTime(int parameterIndex) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code TIME} parameter as a {@code - * java.sql.Time}, using the supplied {@code Calendar} to construct the - * time. The JDBC driver uses the calendar to handle specific timezones - * and locales in order to determine {@code Time}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param cal - * the calendar to use in constructing {@code Time}. - * @return the parameter's value as a {@code java.sql.Time}. - * {@code null} is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Time - * @see java.util.Calendar - * @since Android 1.0 - */ - public Time getTime(int parameterIndex, Calendar cal) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code TIME} parameter as a {@code - * java.sql.Time}. - * - * @param parameterName - * the name of the desired parameter. - * @return a new {@code java.sql.Time} with the parameter's value. A {@code - * null} reference is returned for an SQL value of {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Time - * @since Android 1.0 - */ - public Time getTime(String parameterName) throws SQLException; - - /** - * Gets the value of a specified JDBC {@code TIME} parameter as a {@code - * java.sql.Time}, using the supplied {@code Calendar} to construct - * the time. The JDBC driver uses the calendar to handle specific - * timezones and locales when creating {@code Time}. - * - * @param parameterName - * the name of the desired parameter. - * @param cal - * used for creating the returned {@code Time} - * @return a new {@code java.sql.Time} with the parameter's value. A {@code - * null} reference is returned for an SQL value of {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see Time - * @see java.util.Calendar - * @since Android 1.0 - */ - public Time getTime(String parameterName, Calendar cal) throws SQLException; - - /** - * Returns the indexed parameter's {@code TIMESTAMP} value as a {@code - * java.sql.Timestamp}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1 - * @return the parameter's value as a {@code java.sql.Timestamp}. A - * {@code null} reference is returned for an SQL value of {@code - * NULL}. - * @throws SQLException - * if a database error occurs. - * @see Timestamp - * @since Android 1.0 - */ - public Timestamp getTimestamp(int parameterIndex) throws SQLException; - - /** - * Returns the indexed parameter's {@code TIMESTAMP} value as a {@code - * java.sql.Timestamp}. The JDBC driver uses the supplied {@code Calendar} - * to handle specific timezones and locales when creating the result. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1 - * @param cal - * used for creating the returned {@code Timestamp} - * @return the parameter's value as a {@code java.sql.Timestamp}. A - * {@code null} reference is returned for an SQL value of {@code - * NULL}. - * @throws SQLException - * if a database error occurs. - * @see Timestamp - * @since Android 1.0 - */ - public Timestamp getTimestamp(int parameterIndex, Calendar cal) - throws SQLException; - - /** - * Returns the named parameter's {@code TIMESTAMP} value as a {@code - * java.sql.Timestamp}. - * - * @param parameterName - * the name of the desired parameter. - * @return the parameter's value as a {@code java.sql.Timestamp}. A - * {@code null} reference is returned for an SQL value of {@code - * NULL}. - * @throws SQLException - * if a database error occurs. - * @see Timestamp - * @since Android 1.0 - */ - public Timestamp getTimestamp(String parameterName) throws SQLException; - - /** - * Returns the indexed parameter's {@code TIMESTAMP} value as a {@code - * java.sql.Timestamp}. The JDBC driver uses the supplied {@code Calendar} - * to handle specific timezones and locales when creating the result. - * - * @param parameterName - * the name of the desired parameter. - * @param cal - * used for creating the returned {@code Timestamp} - * @return the parameter's value as a {@code java.sql.Timestamp}. A - * {@code null} reference is returned for an SQL value of {@code - * NULL}. - * @throws SQLException - * if a database error occurs. - * @see Timestamp - * @since Android 1.0 - */ - public Timestamp getTimestamp(String parameterName, Calendar cal) - throws SQLException; - - /** - * Gets the value of a specified JDBC {@code DATALINK} parameter as a - * {@code java.net.URL}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @return a {@code URL} giving the parameter's value. {@code null} - * is returned if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error occurs. - * @see java.net.URL - * @since Android 1.0 - */ - public URL getURL(int parameterIndex) throws SQLException; - - /** - * Returns the named parameter's JDBC {@code DATALINK} value in a new Java - * {@code java.net.URL}. - * - * @param parameterName - * the name of the desired parameter. - * @return a new {@code java.net.URL} encapsulating the parameter value. A - * {@code null} reference is returned for an SQL value of {@code - * NULL}. - * @throws SQLException - * if a database error occurs. - * @see java.net.URL - * @since Android 1.0 - */ - public URL getURL(String parameterName) throws SQLException; - - /** - * Defines the type of a specified {@code OUT} parameter. All {@code OUT} - * parameters must have their type defined before a stored procedure is - * executed. - * <p> - * The type supplied in the {@code sqlType} parameter fixes the - * type that will be returned by the getter methods of - * {@code CallableStatement}. - * If a database specific type is expected for a parameter, the Type {@code - * java.sql.Types.OTHER} should be used. Note that there is another variant - * of this method for User Defined Types or a {@code REF} type. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1 - * @param sqlType - * the JDBC type as defined by {@code java.sql.Types}. The JDBC - * types {@code NUMERIC} and {@code DECIMAL} should be defined - * using {@link #registerOutParameter(int, int, int)}. - * @throws SQLException - * if a database error occurs. - * @see Types - * @since Android 1.0 - */ - public void registerOutParameter(int parameterIndex, int sqlType) - throws SQLException; - - /** - * Defines the Type of a specified {@code OUT} parameter. All {@code OUT} - * parameters must have their type defined before a stored procedure is - * executed. This version of the {@code registerOutParameter} method, which - * has a scale parameter, should be used for the JDBC types {@code NUMERIC} - * and {@code DECIMAL}, where there is a need to specify the number of - * digits expected after the decimal point. - * <p> - * The type supplied in the {@code sqlType} parameter fixes the - * type that will be returned by the getter methods of - * {@code CallableStatement}. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1 - * @param sqlType - * the JDBC type as defined by {@code java.sql.Types}. - * @param scale - * the number of digits after the decimal point. Must be greater - * than or equal to 0. - * @throws SQLException - * if a database error occurs. - * @see Types - * @since Android 1.0 - */ - public void registerOutParameter(int parameterIndex, int sqlType, int scale) - throws SQLException; - - /** - * Defines the Type of a specified {@code OUT} parameter. This variant - * of the method is designed for use with parameters that are - * <i>User Defined Types</i> (UDT) or a {@code REF} type, although it - * can be used for any type. - * - * @param paramIndex - * the parameter number index, where the first parameter has - * index 1. - * @param sqlType - * a JDBC type expressed as a constant from {@link Types}. - * @param typeName - * an SQL type name. For a {@code REF} type, this name should be - * the fully qualified name of the referenced type. - * @throws SQLException - * if a database error occurs. - * @see Ref - * @since Android 1.0 - */ - public void registerOutParameter(int paramIndex, int sqlType, - String typeName) throws SQLException; - - /** - * Defines the Type of a specified {@code OUT} parameter. All OUT parameters - * must have their Type defined before a stored procedure is executed. - * <p> - * The type supplied in the {@code sqlType} parameter fixes the - * type that will be returned by the getter methods of - * {@code CallableStatement}. - * If a database-specific type is expected for a parameter, the Type {@code - * java.sql.Types.OTHER} should be used. Note that there is another variant - * of this method for User Defined Types or a {@code REF} type. - * </p> - * - * @param parameterName - * the parameter name. - * @param sqlType - * a JDBC type expressed as a constant from {@link Types}. Types - * {@code NUMERIC} and {@code DECIMAL} should be defined using - * the variant of this method that takes a {@code scale} - * parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void registerOutParameter(String parameterName, int sqlType) - throws SQLException; - - /** - * Defines the Type of a specified {@code OUT} parameter. All {@code OUT} - * parameters must have their Type defined before a stored procedure is - * executed. This version of the {@code registerOutParameter} method, which - * has a scale parameter, should be used for the JDBC types {@code NUMERIC} - * and {@code DECIMAL}, where there is a need to specify the number of - * digits expected after the decimal point. - * <p> - * The type supplied in the {@code sqlType} parameter fixes the - * type that will be returned by the getter methods of - * {@code CallableStatement}. - * </p> - * - * @param parameterName - * the parameter name. - * @param sqlType - * a JDBC type expressed as a constant from {@link Types}. - * @param scale - * the number of digits after the decimal point. Must be greater - * than or equal to 0. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void registerOutParameter(String parameterName, int sqlType, - int scale) throws SQLException; - - /** - * Defines the Type of a specified {@code OUT} parameter. This variant of - * the method is designed for use with parameters that are <i>User Defined - * Types</i> (UDT) or a {@code REF} type, although it can be used for any - * type. - * - * @param parameterName - * the parameter name - * @param sqlType - * a JDBC type expressed as a constant from {@link Types} - * @param typeName - * the fully qualified name of an SQL structured type. For a - * {@code REF} type, this name should be the fully qualified name - * of the referenced type. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void registerOutParameter(String parameterName, int sqlType, - String typeName) throws SQLException; - - /** - * Sets the value of a specified parameter to the content of a supplied - * {@code InputStream}, which has a specified number of bytes. - * <p> - * This is a good method for setting an SQL {@code LONVARCHAR} parameter - * where the length of the data is large. Data is read from the {@code - * InputStream} until end-of-file is reached or the specified number of - * bytes is copied. - * </p> - * - * @param parameterName - * the parameter name - * @param theInputStream - * the ASCII input stream carrying the data to update the - * parameter with. - * @param length - * the number of bytes in the {@code InputStream} to copy to the - * parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setAsciiStream(String parameterName, - InputStream theInputStream, int length) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.math.BigDecimal} value. - * - * @param parameterName - * the name of the parameter. - * @param theBigDecimal - * the {@code java.math.BigInteger} value to set. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setBigDecimal(String parameterName, BigDecimal theBigDecimal) - throws SQLException; - - /** - * Sets the value of a specified parameter to the content of a supplied - * binary {@code InputStream}, which has a specified number of bytes. - * <p> - * Use this method when a large amount of data needs to be set into a - * {@code LONGVARBINARY} parameter. - * </p> - * - * @param parameterName - * the name of the parameter. - * @param theInputStream - * the binary {@code InputStream} carrying the data to update the - * parameter. - * @param length - * the number of bytes in the {@code InputStream} to copy to the - * parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setBinaryStream(String parameterName, - InputStream theInputStream, int length) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code boolean} - * value. - * - * @param parameterName - * the parameter name. - * @param theBoolean - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setBoolean(String parameterName, boolean theBoolean) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code byte} value. - * - * @param parameterName - * the parameter name. - * @param theByte - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setByte(String parameterName, byte theByte) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied array of bytes. The - * array is mapped to {@code VARBINARY} or else {@code LONGVARBINARY} in the - * connected database. - * - * @param parameterName - * the parameter name. - * @param theBytes - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setBytes(String parameterName, byte[] theBytes) - throws SQLException; - - /** - * Sets the value of a specified parameter to the character content of a - * {@code Reader} object, with the specified length of character data. - * - * @param parameterName - * the parameter name. - * @param reader - * the new value with which to update the parameter. - * @param length - * a count of the characters contained in {@code reader}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setCharacterStream(String parameterName, Reader reader, - int length) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Date} value. - * - * @param parameterName - * the parameter name. - * @param theDate - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setDate(String parameterName, Date theDate) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Date} value, using a supplied calendar to map the date. The - * calendar allows the application to control the timezone used to compute - * the SQL {@code DATE} in the database. In case that no calendar is - * supplied, the driver uses the default timezone of the Java virtual - * machine. - * - * @param parameterName - * the parameter name. - * @param theDate - * the new value with which to update the parameter. - * @param cal - * a {@code Calendar} to use to construct the SQL {@code DATE} - * value. - * @throws SQLException - * if a database error occurs. - * @see java.util.Calendar - * @see Date - * @since Android 1.0 - */ - public void setDate(String parameterName, Date theDate, Calendar cal) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code double} - * value. - * - * @param parameterName - * the parameter name. - * @param theDouble - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setDouble(String parameterName, double theDouble) - throws SQLException; - - /** - * Sets the value of a specified parameter to to a supplied {@code float} - * value. - * - * @param parameterName - * the parameter name. - * @param theFloat - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setFloat(String parameterName, float theFloat) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code int} value. - * - * @param parameterName - * the parameter name. - * @param theInt - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setInt(String parameterName, int theInt) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code long} value. - * - * @param parameterName - * the parameter name. - * @param theLong - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setLong(String parameterName, long theLong) throws SQLException; - - /** - * Sets the value of a specified parameter to SQL {@code NULL}. Don't use - * this version of {@code setNull} for <i>User Defined Types</i> (UDT) or - * for {@code REF} type parameters. - * - * @param parameterName - * the parameter name. - * @param sqlType - * a JDBC type expressed as a constant from {@link Types}. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setNull(String parameterName, int sqlType) throws SQLException; - - /** - * Sets the value of a specified parameter to be SQL {@code NULL} where the - * parameter type is either {@code REF} or user defined (e.g. {@code STRUCT} - * , {@code JAVA_OBJECT} etc). - * <p> - * For reasons of portability, the caller is expected to supply both the SQL - * type code and type name (which is just the parameter name if the type is - * user defined, referred to as a {@code UDT}, or the name of the referenced - * type in case of a {@code REF} type). - * </p> - * - * @param parameterName - * the parameter name. - * @param sqlType - * a JDBC type expressed as a constant from {@link Types}. - * @param typeName - * if the target parameter is a user defined type then this - * should contain the full type name. The fully qualified name of - * a {@code UDT} or {@code REF} type is ignored if the parameter - * is not a {@code UDT}. - * @throws SQLException - * if a database error occurs. - * @see Types - * @since Android 1.0 - */ - public void setNull(String parameterName, int sqlType, String typeName) - throws SQLException; - - /** - * Sets the value of a specified parameter using a supplied object. Prior to - * issuing this request to the connected database {@code theObject} is - * transformed to the corresponding SQL type according to the standard Java - * to SQL mapping rules. - * <p> - * If the object's class implements the interface {@code SQLData}, the JDBC - * driver calls {@code SQLData.writeSQL} to write it to the SQL data stream. - * If {@code theObject} implements any of the following interfaces then the - * driver is in charge of mapping the value to the appropriate SQL type. - * <ul><li>{@link Ref}</li> - * <li>{@link Struct}</li> - * <li>{@link Array}</li> - * <li>{@link Clob}</li> - * <li>{@link Blob}</li> </ul> - * </p> - * - * @param parameterName - * the parameter name - * @param theObject - * the new value with which to update the parameter - * @throws SQLException - * if a database error occurs. - * @see SQLData - * @since Android 1.0 - */ - public void setObject(String parameterName, Object theObject) - throws SQLException; - - /** - * Sets the value of a specified parameter using a supplied object. - * <p> - * The parameter {@code theObject} is converted to the given {@code - * targetSqlType} before it is sent to the database. If the object has a - * custom mapping (its class implements the interface {@code SQLData}), the - * JDBC driver calls the method {@code SQLData.writeSQL} to write it to the - * SQL data stream. If {@code theObject} is an instance of one of the - * following types - * <ul> - * <li>{@link Ref}</li> - * <li>{@link Struct}</li> - * <li>{@link Array}</li> - * <li>{@link Clob}</li> - * <li>{@link Blob}</li> - * </ul> - * then the driver is in charge of mapping the value to the appropriate - * SQL type and deliver it to the database. - * </p> - * - * @param parameterName - * the parameter name. - * @param theObject - * the new value with which to update the parameter. - * @param targetSqlType - * a JDBC type expressed as a constant from {@link Types}. - * @throws SQLException - * if a database error occurs. - * @see SQLData - * @since Android 1.0 - */ - public void setObject(String parameterName, Object theObject, - int targetSqlType) throws SQLException; - - /** - * Sets the value of a specified parameter using a supplied object. - * <p> - * The object is converted to the given {@code targetSqlType} before it is - * sent to the database. If the object has a custom mapping (its class - * implements the interface {@code SQLData}), the JDBC driver calls the - * method {@code SQLData.writeSQL} to write it to the SQL data stream. If - * {@code theObject} implements any of the following interfaces - * <ul> - * <li>{@link Ref}</li> - * <li>{@link Struct}</li> - * <li>{@link Array}</li> - * <li>{@link Clob}</li> - * <li>{@link Blob}</li> - * </ul> - * then the driver is charge of mapping the value to the appropriate - * SQL type. - * </p> - * - * @param parameterName - * the parameter name. - * @param theObject - * the new value with which to update the parameter. - * @param targetSqlType - * a JDBC type expressed as a constant from {@link Types}. - * @param scale - * where applicable, the number of digits after the decimal. - * point. - * @throws SQLException - * if a database error occurs. - * @see SQLData - * @since Android 1.0 - */ - public void setObject(String parameterName, Object theObject, - int targetSqlType, int scale) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code short} - * value. - * - * @param parameterName - * the name of the parameter. - * @param theShort - * a short value to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setShort(String parameterName, short theShort) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code String}. - * - * @param parameterName - * the name of the parameter. - * @param theString - * a {@code String} value to update the parameter. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void setString(String parameterName, String theString) - throws SQLException; - - /** - * Sets the value of the parameter named {@code parameterName} to the value - * of the supplied {@code java.sql.Time}. - * - * @param parameterName - * the parameter name. - * @param theTime - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @see Time - * @since Android 1.0 - */ - public void setTime(String parameterName, Time theTime) throws SQLException; - - /** - * Sets the value of the parameter named {@code parameterName} to the value - * of the supplied {@code java.sql.Time} using the supplied calendar. - * <p> - * The driver uses the supplied {@code Calendar} to create the SQL - * {@code TIME} value, which allows it to use a custom timezone - - * otherwise the driver uses the default timezone of the Java - * virtual machine. - * - * @param parameterName - * the parameter name. - * @param theTime - * the new value with which to update the parameter. - * @param cal - * used for creating the new SQL {@code TIME} value. - * @throws SQLException - * if a database error occurs. - * @see Time - * @since Android 1.0 - */ - public void setTime(String parameterName, Time theTime, Calendar cal) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Timestamp} value. - * - * @param parameterName - * the parameter name. - * @param theTimestamp - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @see Timestamp - * @since Android 1.0 - */ - public void setTimestamp(String parameterName, Timestamp theTimestamp) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Timestamp} value, using the supplied calendar. - * <p> - * The driver uses the supplied calendar to create the SQL {@code TIMESTAMP} - * value, which allows it to use a custom timezone - otherwise the driver - * uses the default timezone of the Java virtual machine. - * </p> - * - * @param parameterName - * the parameter name. - * @param theTimestamp - * the new value with which to update the parameter. - * @param cal - * used for creating the new SQL {@code TIME} value. - * @throws SQLException - * if a database error occurs. - * @see Timestamp - * @see java.util.Calendar - * @since Android 1.0 - */ - public void setTimestamp(String parameterName, Timestamp theTimestamp, - Calendar cal) throws SQLException; - - /** - * Sets the value of a specified parameter to the supplied {@code - * java.net.URL}. - * - * @param parameterName - * the parameter name. - * @param theURL - * the new value with which to update the parameter. - * @throws SQLException - * if a database error occurs. - * @see java.net.URL - * @since Android 1.0 - */ - public void setURL(String parameterName, URL theURL) throws SQLException; - - /** - * Gets whether the value of the last {@code OUT} parameter read was SQL - * {@code NULL}. - * - * @return true if the last parameter was SQL {@code NULL}, {@code false} - * otherwise. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public boolean wasNull() throws SQLException; -} diff --git a/sql/src/main/java/java/sql/Clob.java b/sql/src/main/java/java/sql/Clob.java deleted file mode 100644 index 339d4e5..0000000 --- a/sql/src/main/java/java/sql/Clob.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.InputStream; -import java.io.Reader; -import java.io.OutputStream; -import java.io.Writer; - -/** - * A Java interface mapping for the SQL CLOB type. - * <p> - * An SQL {@code CLOB} type stores a large array of characters as the value in a - * column of a database. - * <p> - * The {@code java.sql.Clob} interface provides methods for setting and - * retrieving data in the {@code Clob}, for querying {@code Clob} data length, - * for searching for data within the {@code Clob}. - * - * @since Android 1.0 - */ -public interface Clob { - - /** - * Gets the value of this {@code Clob} object as an ASCII stream. - * - * @return an ASCII {@code InputStream} giving access to the - * {@code Clob} data. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public InputStream getAsciiStream() throws SQLException; - - /** - * Gets the data of this {@code Clob} object in a {@code java.io.Reader}. - * - * @return a character stream Reader object giving access to the {@code - * Clob} data. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public Reader getCharacterStream() throws SQLException; - - /** - * Gets a copy of a specified substring in this {@code Clob}. - * - * @param pos - * the index of the start of the substring in the {@code Clob}. - * @param length - * the length of the data to retrieve. - * @return A string containing the requested data. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public String getSubString(long pos, int length) throws SQLException; - - /** - * Retrieves the number of characters in this {@code Clob} object. - * - * @return a long value with the number of character in this {@code Clob}. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public long length() throws SQLException; - - /** - * Retrieves the character position at which a specified {@code Clob} object - * appears in this {@code Clob} object. - * - * @param searchstr - * the specified {@code Clob} to search for. - * @param start - * the position within this {@code Clob} to start the search - * @return a long value with the position at which the specified {@code - * Clob} occurs within this {@code Clob}. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public long position(Clob searchstr, long start) throws SQLException; - - /** - * Retrieves the character position at which a specified substring appears - * in this {@code Clob} object. - * - * @param searchstr - * the string to search for. - * @param start - * the position at which to start the search within this {@code - * Clob}. - * @return a long value with the position at which the specified string - * occurs within this {@code Clob}. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public long position(String searchstr, long start) throws SQLException; - - /** - * Retrieves a stream which can be used to write Ascii characters to this - * {@code Clob} object, starting at specified position. - * - * @param pos - * the position at which to start the writing. - * @return an OutputStream which can be used to write ASCII characters to - * this {@code Clob}. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public OutputStream setAsciiStream(long pos) throws SQLException; - - /** - * Retrieves a stream which can be used to write a stream of unicode - * characters to this {@code Clob} object, at a specified position. - * - * @param pos - * the position at which to start the writing. - * @return a Writer which can be used to write unicode characters to this - * {@code Clob}. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public Writer setCharacterStream(long pos) throws SQLException; - - /** - * Writes a given Java String to this {@code Clob} object at a specified - * position. - * - * @param pos - * the position at which to start the writing. - * @param str - * the string to write. - * @return the number of characters written. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public int setString(long pos, String str) throws SQLException; - - /** - * Writes {@code len} characters of a string, starting at a specified - * character offset, to this {@code Clob}. - * - * @param pos - * the position at which to start the writing. - * @param str - * the String to write. - * @param offset - * the offset within {@code str} to start writing from. - * @param len - * the number of characters to write. - * @return the number of characters written. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public int setString(long pos, String str, int offset, int len) - throws SQLException; - - /** - * Truncates this {@code Clob} after the specified number of characters. - * - * @param len - * the length in characters giving the place to - * truncate this {@code Clob}. - * @throws SQLException - * if an error occurs accessing the {@code Clob}. - * @since Android 1.0 - */ - public void truncate(long len) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/Connection.java b/sql/src/main/java/java/sql/Connection.java deleted file mode 100644 index 523071c..0000000 --- a/sql/src/main/java/java/sql/Connection.java +++ /dev/null @@ -1,809 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.util.Map; - -/** - * A connection represents a link from a Java application to a database. All SQL - * statements and results are returned within the context of a connection. - * Database statements that are executed within this context form a - * database session which forms one or more closed transactions. Especially In distributed applications, multiple concurrent connections may exist accessing the same values of the database. - * which may lead to the following phenomena (referred to as <i>transaction isolation levels</i>): - * <ul> - * <li><i>dirty reads</i>:<br> - * reading values from table rows that are not committed.</br></li> - * <li><i>non-repeatable reads</i>:<br> - * reading table rows more than once in a transaction but getting back different - * data because other transactions have altered the rows between the reads.</br></li> - * <li><i>phantom reads</i>:<br> - * retrieving additional "phantom" rows in the course of repeated table reads - * because other transactions have inserted additional rows that satisfy an - * SQL {@code WHERE} clause</br></li> - * </ul> - * - * @since Android 1.0 - */ -public interface Connection { - - /** - * A constant indicating that transactions are not supported. - * - * @since Android 1.0 - */ - public static final int TRANSACTION_NONE = 0; - - /** - * No <i>dirty reads</i> are permitted, therefore transactions may not read - * a row containing uncommitted values - but does not prevent an application - * from <i>non-repeatable reads</i> and <i>phantom reads</i>. - * - * @since Android 1.0 - */ - public static final int TRANSACTION_READ_COMMITTED = 2; - - /** - * In the case that reading uncommitted values is allowed, the following - * incidents may happen which may lead to an invalid results: - * <ul> - * <li><i>dirty reads</i></li> - * <li><i>non-repeatable reads</i></li> - * <li><i>phantom reads</i></li> - * </ul> - * - * @since Android 1.0 - */ - public static final int TRANSACTION_READ_UNCOMMITTED = 1; - - /** - * A constant indicating that <i>dirty reads</i> and <i>non-repeatable - * reads</i> are <b>prevented</b> but <i>phantom reads</i> can occur. - * - * @since Android 1.0 - */ - public static final int TRANSACTION_REPEATABLE_READ = 4; - - /** - * The constant that indicates that the following incidents are <b>all - * prevented</b> (the opposite of {@link #TRANSACTION_READ_UNCOMMITTED}): - * <ul> - * <li><i>dirty reads</i></li> - * <li><i>non-repeatable reads</i></li> - * <li><i>phantom reads</i></li> - * </ul> - * - * @since Android 1.0 - */ - public static final int TRANSACTION_SERIALIZABLE = 8; - - /** - * Discards all warnings that may have arisen for this connection. - * Subsequent calls to {@link #getWarnings()} will return {@code null} - * up until a new warning condition occurs. - * - * @throws SQLException - * if there is a problem accessing the database. - */ - public void clearWarnings() throws SQLException; - - /** - * Causes the instant release of all database and driver connection - * resources associated with this object. Any subsequent invocations of this - * method have no effect. - * <p> - * It is strongly recommended that all connections are closed before they - * are dereferenced by the application ready for garbage collection. - * Although the {@code finalize} method of the connection closes the - * connection before garbage collection takes place, it is not advisable to - * leave the {@code close} operation to take place in this way. Mainly - * because undesired side-effects may appear. - * </p> - * - * @throws SQLException - * if there is a problem accessing the database. - */ - public void close() throws SQLException; - - /** - * Commits all of the changes made since the last {@code commit} or - * {@code rollback} of the associated transaction. All locks in the database - * held by this connection are also relinquished. Calling this operation on - * connection objects in {@code auto-commit} mode leads to an error. - * - * @throws SQLException - * if there is a problem accessing the database or if the target - * connection instance is in auto-commit mode. - */ - public void commit() throws SQLException; - - /** - * Returns a new instance of {@code Statement} for issuing SQL commands to - * the remote database. - * <p> - * {@code ResultSets} generated by the returned statement will default to - * type {@code ResultSet.TYPE_FORWARD_ONLY} and concurrency level {@code - * ResultSet.CONCUR_READ_ONLY}. - * - * @return a {@code Statement} object with default settings. - * @throws SQLException - * if there is a problem accessing the database. - * @see ResultSet - */ - public Statement createStatement() throws SQLException; - - /** - * Returns a new instance of {@code Statement} whose associated {@code - * ResultSet}s have the characteristics specified in the type and - * concurrency arguments. - * - * @param resultSetType - * one of the following type specifiers: - * <ul> - * <li>{@link ResultSet#TYPE_SCROLL_SENSITIVE} </li> <li> - * {@link ResultSet#TYPE_SCROLL_INSENSITIVE} </li> <li> - * {@link ResultSet#TYPE_FORWARD_ONLY}</li> - * </ul> - * @param resultSetConcurrency - * one of the following concurrency mode specifiers: - * <ul> - * <li>{@link ResultSet#CONCUR_UPDATABLE}</li> <li> - * {@link ResultSet#CONCUR_READ_ONLY}</li> - * </ul> - * @return a new instance of {@code Statement} capable of manufacturing - * {@code ResultSet}s that satisfy the specified {@code - * resultSetType} and {@code resultSetConcurrency} values. - * @throws SQLException - * if there is a problem accessing the database - */ - public Statement createStatement(int resultSetType, int resultSetConcurrency) - throws SQLException; - - /** - * Returns a new instance of {@code Statement} whose associated - * {@code ResultSet}s will have the characteristics specified in the - * type, concurrency and holdability arguments. - * - * @param resultSetType - * one of the following type specifiers: - * <ul> - * <li>{@link ResultSet#TYPE_SCROLL_SENSITIVE}</li> - * <li>{@link ResultSet#TYPE_SCROLL_INSENSITIVE}</li> - * <li>{@link ResultSet#TYPE_FORWARD_ONLY}</li> - * </ul> - * @param resultSetConcurrency - * one of the following concurrency mode specifiers: - * <ul> - * <li>{@link ResultSet#CONCUR_UPDATABLE}</li> - * <li>{@link ResultSet#CONCUR_READ_ONLY}</li> - * </ul> - * @param resultSetHoldability - * one of the following holdability mode specifiers: - * <ul> - * <li>{@link ResultSet#HOLD_CURSORS_OVER_COMMIT}</li> - * <li>{@link ResultSet#CLOSE_CURSORS_AT_COMMIT}</li> - * </ul> - * @return a new instance of {@code Statement} capable of - * manufacturing {@code ResultSet}s that satisfy the - * specified {@code resultSetType}, - * {@code resultSetConcurrency} and - * {@code resultSetHoldability} values. - * @throws SQLException - * if there is a problem accessing the database. - */ - public Statement createStatement(int resultSetType, - int resultSetConcurrency, int resultSetHoldability) - throws SQLException; - - /** - * Returns a {@code boolean} indicating whether or not this connection is in - * the {@code auto-commit} operating mode. - * - * @return {@code true} if {@code auto-commit} is on, otherwise {@code - * false}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public boolean getAutoCommit() throws SQLException; - - /** - * Gets this {@code Connection} object's current catalog name. - * - * @return the catalog name. {@code null} if there is no catalog - * name. - * @throws SQLException - * if there is a problem accessing the database. - */ - public String getCatalog() throws SQLException; - - /** - * Returns the holdability property that any {@code ResultSet} produced by - * this instance will have. - * - * @return one of the following holdability mode specifiers: - * <ul> - * <li>{@link ResultSet#HOLD_CURSORS_OVER_COMMIT}</li> <li> - * {@link ResultSet#CLOSE_CURSORS_AT_COMMIT}</li> - * </ul> - * @throws SQLException - * if there is a problem accessing the a database. - * @since Android 1.0 - */ - public int getHoldability() throws SQLException; - - /** - * Gets the metadata about the database referenced by this connection. The - * returned {@code DatabaseMetaData} describes the database topography, - * available stored procedures, SQL syntax and so on. - * - * @return a {@code DatabaseMetaData} object containing the database - * description. - * @throws SQLException - * if there is a problem accessing the a database. - * @since Android 1.0 - */ - public DatabaseMetaData getMetaData() throws SQLException; - - /** - * Returns the transaction isolation level for this connection. - * - * @return the transaction isolation value. - * @throws SQLException - * if there is a problem accessing the database. - * @see #TRANSACTION_NONE - * @see #TRANSACTION_READ_COMMITTED - * @see #TRANSACTION_READ_UNCOMMITTED - * @see #TRANSACTION_REPEATABLE_READ - * @see #TRANSACTION_SERIALIZABLE - * @since Android 1.0 - */ - public int getTransactionIsolation() throws SQLException; - - /** - * Returns the type mapping associated with this {@code Connection} object. - * The type mapping must be set on the application level. - * - * @return the Type Map as a {@code java.util.Map}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Map<String, Class<?>> getTypeMap() throws SQLException; - - /** - * Gets the first instance of any {@code SQLWarning} objects that may have - * been created in the use of this connection. If at least one warning has - * occurred then this operation returns the first one reported. A {@code - * null} indicates that no warnings have occurred. - * <p> - * By invoking the {@link SQLWarning#getNextWarning()} method of the - * returned {@code SQLWarning} object it is possible to obtain all of - * this connection's warning objects. - * </p> - * - * @return the first warning as an SQLWarning object (may be {@code null}). - * @throws SQLException - * if there is a problem accessing the database or if the call - * has been made on a connection which has been previously - * closed. - * @since Android 1.0 - */ - public SQLWarning getWarnings() throws SQLException; - - /** - * Returns a {@code boolean} indicating whether or not this connection is in - * the {@code closed} state. The {@code closed} state may be entered into as - * a consequence of a successful invocation of the {@link #close()} method - * or else if an error has occurred that prevents the connection from - * functioning normally. - * - * @return {@code true} if closed, otherwise {@code false}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public boolean isClosed() throws SQLException; - - /** - * Returns a {@code boolean} indicating whether or not this connection is - * currently in the {@code read-only} state. - * - * @return {@code true} if in read-only state, otherwise {@code false}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public boolean isReadOnly() throws SQLException; - - /** - * Returns a string representation of the input SQL statement - * {@code sql} expressed in the underlying system's native SQL - * syntax. - * - * @param sql - * the JDBC form of an SQL statement. - * @return the SQL statement in native database format. - * @throws SQLException - * if there is a problem accessing the database - */ - public String nativeSQL(String sql) throws SQLException; - - /** - * Returns a new instance of {@code CallableStatement} that may be used for - * making stored procedure calls to the database. - * - * @param sql - * the SQL statement that calls the stored function - * @return a new instance of {@code CallableStatement} representing the SQL - * statement. {@code ResultSet}s emitted from this {@code - * CallableStatement} will default to type - * {@link ResultSet#TYPE_FORWARD_ONLY} and concurrency - * {@link ResultSet#CONCUR_READ_ONLY}. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public CallableStatement prepareCall(String sql) throws SQLException; - - /** - * Returns a new instance of {@code CallableStatement} that may be used for - * making stored procedure calls to the database. {@code ResultSet}s emitted - * from this {@code CallableStatement} will satisfy the specified {@code - * resultSetType} and {@code resultSetConcurrency} values. - * - * @param sql - * the SQL statement - * @param resultSetType - * one of the following type specifiers: - * <ul> - * <li>{@link ResultSet#TYPE_SCROLL_SENSITIVE}</li> - * <li>{@link ResultSet#TYPE_SCROLL_INSENSITIVE}</li> - * <li>{@link ResultSet#TYPE_FORWARD_ONLY}</li> - * </ul> - * @param resultSetConcurrency - * one of the following concurrency mode specifiers: - * <ul> - * <li>{@link ResultSet#CONCUR_READ_ONLY}</li> - * <li>{@link ResultSet#CONCUR_UPDATABLE}</li> - * </ul> - * @return a new instance of {@code CallableStatement} representing the - * precompiled SQL statement. {@code ResultSet}s emitted from this - * {@code CallableStatement} will satisfy the specified {@code - * resultSetType} and {@code resultSetConcurrency} values. - * @throws SQLException - * if a problem occurs accessing the database - * @since Android 1.0 - */ - public CallableStatement prepareCall(String sql, int resultSetType, - int resultSetConcurrency) throws SQLException; - - /** - * Returns a new instance of {@code CallableStatement} that may be used for - * making stored procedure calls to the database. {@code ResultSet}s created - * from this {@code CallableStatement} will have characteristics determined - * by the specified type, concurrency and holdability arguments. - * - * @param sql - * the SQL statement - * @param resultSetType - * one of the following type specifiers: - * <ul> - * <li>{@link ResultSet#TYPE_SCROLL_SENSITIVE}</li> - * <li>{@link ResultSet#TYPE_SCROLL_INSENSITIVE}</li> - * <li>{@link ResultSet#TYPE_FORWARD_ONLY}</li> - * </ul> - * @param resultSetConcurrency - * one of the following concurrency mode specifiers: - * <ul> - * <li>{@link ResultSet#CONCUR_READ_ONLY}</li> - * <li>{@link ResultSet#CONCUR_UPDATABLE}</li> - * </ul> - * @param resultSetHoldability - * one of the following holdability mode specifiers: - * <ul> - * <li>{@link ResultSet#HOLD_CURSORS_OVER_COMMIT}</li> - * <li>{@link ResultSet#CLOSE_CURSORS_AT_COMMIT}</li> - * </ul> - * @return a new instance of {@code CallableStatement} representing the - * precompiled SQL statement. {@code ResultSet}s emitted from this - * {@code CallableStatement} will satisfy the specified {@code - * resultSetType}, {@code resultSetConcurrency} and {@code - * resultSetHoldability} values. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public CallableStatement prepareCall(String sql, int resultSetType, - int resultSetConcurrency, int resultSetHoldability) - throws SQLException; - - /** - * Returns a new instance of {@code PreparedStatement} that may be used any - * number of times to execute parameterized requests on the database server. - * <p> - * Subject to JDBC driver support, this operation will attempt to send the - * precompiled version of the statement to the database. If - * the driver does not support precompiled statements, the statement will - * not reach the database server until it is executed. This distinction - * determines the moment when {@code SQLException}s get raised. - * </p> - * By default, {@code ResultSet}s from the returned object will be - * {@link ResultSet#TYPE_FORWARD_ONLY} type with a - * {@link ResultSet#CONCUR_READ_ONLY} mode of concurrency. - * - * @param sql - * the SQL statement. - * @return the {@code PreparedStatement} containing the supplied SQL - * statement. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public PreparedStatement prepareStatement(String sql) throws SQLException; - - /** - * Creates a default {@code PreparedStatement} that can retrieve - * automatically generated keys. Parameter {@code autoGeneratedKeys} may be - * used to tell the driver whether such keys should be made accessible. - * This is only relevant when the {@code sql} statement is an {@code insert} - * statement. - * <p> - * An SQL statement which may have {@code IN} parameters can be stored and - * precompiled in a {@code PreparedStatement}. The {@code PreparedStatement} - * can then be then be used to execute the statement multiple times in an - * efficient way. - * </p> - * Subject to JDBC driver support, this operation will attempt to send the - * precompiled version of the statement to the database. If - * the driver does not support precompiled statements, the statement will - * not reach the database server until it is executed. This distinction - * determines the moment when {@code SQLException}s get raised. - * <p> - * By default, {@code ResultSet}s from the returned object will be - * {@link ResultSet#TYPE_FORWARD_ONLY} type with a - * {@link ResultSet#CONCUR_READ_ONLY} mode of concurrency. - * </p> - * - * @param sql - * the SQL statement. - * @param autoGeneratedKeys - * one of the following generated key options: - * <ul> - * <li>{@link Statement#RETURN_GENERATED_KEYS}</li> - * <li>{@link Statement#NO_GENERATED_KEYS}</li> - * </ul> - * @return a new {@code PreparedStatement} instance representing the input - * SQL statement. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) - throws SQLException; - - /** - * Creates a default {@code PreparedStatement} that can retrieve the - * auto-generated keys designated by a supplied array. If {@code sql} is an - * SQL {@code INSERT} statement, the parameter {@code columnIndexes} is expected - * to hold the index values for each column in the statement's intended - * database table containing the autogenerated-keys of interest. Otherwise - * {@code columnIndexes} is ignored. - * <p> - * Subject to JDBC driver support, this operation will attempt to send the - * precompiled version of the statement to the database. If - * the driver does not support precompiled statements, the statement will - * not reach the database server until it is executed. This distinction - * determines the moment when {@code SQLException}s get raised. - * </p> - * <p> - * By default, {@code ResultSet}s from the returned object will be - * {@link ResultSet#TYPE_FORWARD_ONLY} type with a - * {@link ResultSet#CONCUR_READ_ONLY} concurrency mode. - * </p> - * - * @param sql - * the SQL statement. - * @param columnIndexes - * the indexes of the columns for which auto-generated keys - * should be made available. - * @return the PreparedStatement containing the supplied SQL statement. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public PreparedStatement prepareStatement(String sql, int[] columnIndexes) - throws SQLException; - - /** - * Creates a {@code PreparedStatement} that generates {@code ResultSet}s - * with the specified values of {@code resultSetType} and {@code - * resultSetConcurrency}. - * - * @param sql - * the SQL statement. It can contain one or more {@code '?'} - * {@code IN} parameter placeholders. - * @param resultSetType - * one of the following type specifiers: - * <ul> - * <li>{@link ResultSet#TYPE_SCROLL_SENSITIVE}</li> - * <li>{@link ResultSet#TYPE_SCROLL_INSENSITIVE}</li> - * <li>{@link ResultSet#TYPE_FORWARD_ONLY}</li> - * </ul> - * @param resultSetConcurrency - * one of the following concurrency mode specifiers: - * <ul> - * <li>{@link ResultSet#CONCUR_READ_ONLY}</li> - * <li>{@link ResultSet#CONCUR_UPDATABLE}</li> - * </ul> - * @return a new instance of {@code PreparedStatement} containing the SQL - * statement {@code sql}. {@code ResultSet}s emitted from this - * {@code PreparedStatement} will satisfy the specified {@code - * resultSetType} and {@code resultSetConcurrency} values. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public PreparedStatement prepareStatement(String sql, int resultSetType, - int resultSetConcurrency) throws SQLException; - - /** - * Creates a {@code PreparedStatement} that generates {@code ResultSet}s - * with the specified type, concurrency and holdability - * - * @param sql - * the SQL statement. It can contain one or more {@code '?' IN} - * parameter placeholders. - * @param resultSetType - * one of the following type specifiers: - * <ul> - * <li>{@link ResultSet#TYPE_SCROLL_SENSITIVE}</li> - * <li>{@link ResultSet#TYPE_SCROLL_INSENSITIVE}</li> - * <li>{@link ResultSet#TYPE_FORWARD_ONLY}</li> - * </ul> - * @param resultSetConcurrency - * one of the following concurrency mode specifiers: - * <ul> - * <li>{@link ResultSet#CONCUR_READ_ONLY}</li> - * <li>{@link ResultSet#CONCUR_UPDATABLE}</li> - * </ul> - * @param resultSetHoldability - * one of the following holdability mode specifiers: - * <ul> - * <li>{@link ResultSet#HOLD_CURSORS_OVER_COMMIT}</li> - * <li>{@link ResultSet#CLOSE_CURSORS_AT_COMMIT}</li> - * </ul> - * @return a new instance of {@code PreparedStatement} containing the SQL - * statement {@code sql}. {@code ResultSet}s emitted from this - * {@code PreparedStatement} will satisfy the specified {@code - * resultSetType}, {@code resultSetConcurrency} and {@code - * resultSetHoldability} values. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public PreparedStatement prepareStatement(String sql, int resultSetType, - int resultSetConcurrency, int resultSetHoldability) - throws SQLException; - - /** - * Creates a default {@code PreparedStatement} that can retrieve the - * auto-generated keys designated by a supplied array. If {@code sql} is an - * SQL {@code INSERT} statement, {@code columnNames} is expected to hold the - * names of each column in the statement's associated database table - * containing the autogenerated-keys of interest. Otherwise {@code - * columnNames} is ignored. - * <p> - * Subject to JDBC driver support, this operation will attempt to send the - * precompiled version of the statement to the database. Alternatively, if - * the driver is not capable of handling precompiled statements, the - * statement will not reach the database server until it is executed. This - * will have a bearing on precisely <i>when</i> {@code SQLException} - * instances get raised. - * </p> - * <p> - * By default, ResultSets from the returned object will be - * {@link ResultSet#TYPE_FORWARD_ONLY} type with a - * {@link ResultSet#CONCUR_READ_ONLY} concurrency mode. - * </p> - * - * @param sql - * the SQL statement. - * @param columnNames - * the names of the columns for which auto-generated keys should - * be made available. - * @return the PreparedStatement containing the supplied SQL statement. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public PreparedStatement prepareStatement(String sql, String[] columnNames) - throws SQLException; - - /** - * Releases the specified {@code savepoint} from the present transaction. Once removed, - * the {@code Savepoint} is considered invalid and should not be referenced - * further. - * - * @param savepoint - * the object targeted for removal. - * @throws SQLException - * if there is a problem with accessing the database or if - * {@code savepoint} is considered not valid in this - * transaction. - * @since Android 1.0 - */ - public void releaseSavepoint(Savepoint savepoint) throws SQLException; - - /** - * Rolls back all updates made so far in this transaction and - * relinquishes all acquired database locks. It is an error to invoke this - * operation when in auto-commit mode. - * - * @throws SQLException - * if there is a problem with the database or if the method is - * called while in auto-commit mode of operation. - * @since Android 1.0 - */ - public void rollback() throws SQLException; - - /** - * Undoes all changes made after the supplied {@code Savepoint} object was - * set. This method should only be used when auto-commit mode is disabled. - * - * @param savepoint - * the Savepoint to roll back to - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void rollback(Savepoint savepoint) throws SQLException; - - /** - * Sets this connection's auto-commit mode {@code on} or {@code off}. - * <p> - * Putting a Connection into auto-commit mode means that all associated SQL - * statements are run and committed as separate transactions. - * By contrast, setting auto-commit to {@code off} means that associated SQL - * statements get grouped into transactions that need to be completed by - * explicit calls to either the {@link #commit()} or {@link #rollback()} - * methods. - * </p> - * Auto-commit is the default mode for new connection instances. - * <p> - * When in this mode, commits will automatically occur upon successful SQL - * statement completion or upon successful completion of an execute. - * Statements are not considered successfully completed until all associated - * {@code ResultSet}s and output parameters have been obtained or closed. - * </p> - * <p> - * Calling this operation during an uncommitted transaction will result in - * it being committed. - * </p> - * - * @param autoCommit - * {@code boolean} indication of whether to put the target - * connection into auto-commit mode ({@code true}) or not ( - * {@code false}). - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void setAutoCommit(boolean autoCommit) throws SQLException; - - /** - * Sets the catalog name for this connection. This is used to select a - * subspace of the database for future work. If the driver does not support - * catalog names, this method is ignored. - * - * @param catalog - * the catalog name to use. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void setCatalog(String catalog) throws SQLException; - - /** - * Sets the holdability of the {@code ResultSet}s created by this Connection. - * - * @param holdability - * one of the following holdability mode specifiers: - * <ul> - * <li>{@link ResultSet#CLOSE_CURSORS_AT_COMMIT}</li> - * <li>{@link ResultSet#HOLD_CURSORS_OVER_COMMIT}</li> - * <li> - * </ul> - * @throws SQLException - * if there is a problem accessing the database - */ - public void setHoldability(int holdability) throws SQLException; - - /** - * Sets this connection to read-only mode. - * <p> - * This serves as a hint to the driver, which can enable database - * optimizations. - * </p> - * - * @param readOnly - * {@code true} to set the Connection to read only mode. {@code - * false} disables read-only mode. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void setReadOnly(boolean readOnly) throws SQLException; - - /** - * Creates an unnamed {@code Savepoint} in the current transaction. - * - * @return a {@code Savepoint} object for this savepoint. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Savepoint setSavepoint() throws SQLException; - - /** - * Creates a named {@code Savepoint} in the current transaction. - * - * @param name - * the name to use for the new {@code Savepoint}. - * @return a {@code Savepoint} object for this savepoint. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Savepoint setSavepoint(String name) throws SQLException; - - /** - * Sets the transaction isolation level for this Connection. - * <p> - * If this method is called during a transaction, the results are - * implementation defined. - * </p> - * - * @param level - * the new transaction isolation level to use from the following - * list of possible values: - * <ul> - * <li>{@link #TRANSACTION_READ_COMMITTED} - * <li>{@link #TRANSACTION_READ_UNCOMMITTED} - * <li>{@link #TRANSACTION_REPEATABLE_READ} - * <li>{@link #TRANSACTION_SERIALIZABLE} - * </ul> - * @throws SQLException - * if there is a problem with the database or if the value of - * {@code level} is not one of the expected constant values. - * @since Android 1.0 - */ - public void setTransactionIsolation(int level) throws SQLException; - - /** - * Sets the {@code TypeMap} for this connection. The input {@code map} - * should contain mappings between complex Java and SQL types. - * - * @param map - * the new type map. - * @throws SQLException - * if there is a problem accessing the database or if {@code - * map} is not an instance of {@link Map}. - * @since Android 1.0 - */ - public void setTypeMap(Map<String, Class<?>> map) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/DataTruncation.java b/sql/src/main/java/java/sql/DataTruncation.java deleted file mode 100644 index a472cc5..0000000 --- a/sql/src/main/java/java/sql/DataTruncation.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.Serializable; - -/** - * An exception which is thrown when a JDBC driver unexpectedly truncates a data - * value either when reading (resulting in warning), or when writing data - * (resulting in an error). The {@code SQLState} error code for truncated data - * is {@code 01004}. - * - * @since Android 1.0 - */ -public class DataTruncation extends SQLWarning implements Serializable { - - private static final long serialVersionUID = 6464298989504059473L; - - private int index = 0; - - private boolean parameter = false; - - private boolean read = false; - - private int dataSize = 0; - - private int transferSize = 0; - - private static final String THE_REASON = "Data truncation"; //$NON-NLS-1$ - - private static final String THE_SQLSTATE = "01004"; //$NON-NLS-1$ - - private static final int THE_ERROR_CODE = 0; - - /** - * Creates the {@code DataTruncation} object. The reason is set to {@code - * "Data truncation"}, the {@code ErrorCode} is set to the {@code - * SQLException} default value, and the other fields are set to the values - * supplied as arguments. - * - * @param index - * the Index value of the column value or parameter that was - * truncated. - * @param parameter - * {@code true} if it was a parameter value that was truncated, - * {@code false} otherwise. - * @param read - * {@code true} if the truncation occurred on a read operation, - * {@code false} otherwise. - * @param dataSize - * the original size of the truncated data. - * @param transferSize - * the size of the data after truncation. - * @since Android 1.0 - */ - public DataTruncation(int index, boolean parameter, boolean read, - int dataSize, int transferSize) { - super(THE_REASON, THE_SQLSTATE, THE_ERROR_CODE); - this.index = index; - this.parameter = parameter; - this.read = read; - this.dataSize = dataSize; - this.transferSize = transferSize; - } - - /** - * Gets the number of bytes of data that should have been read/written. - * - * @return the number of bytes that should have been read or written. The - * value is set to {@code -1} if the size is unknown. - * @since Android 1.0 - */ - public int getDataSize() { - return dataSize; - } - - /** - * Gets the index of the column or of the parameter that was truncated. - * - * @return the index number of the column or of the parameter. - * @since Android 1.0 - */ - public int getIndex() { - return index; - } - - /** - * Gets whether the value truncated was a parameter value or a column value. - * - * @return {@code true} if the value truncated was a parameter value, - * {@code false} if it was a column value. - * @since Android 1.0 - */ - public boolean getParameter() { - return parameter; - } - - /** - * Gets whether the value was truncated on a read operation or a write - * operation - * - * @return {@code true} if the value was truncated on a read operation, - * {@code false} otherwise. - * @since Android 1.0 - */ - public boolean getRead() { - return read; - } - - /** - * Gets the number of bytes of data that was actually read or written. - * - * @return the number of bytes actually read/written. The value may be set - * to {@code -1} if the size is unknown. - * @since Android 1.0 - */ - public int getTransferSize() { - return transferSize; - } -} diff --git a/sql/src/main/java/java/sql/DatabaseMetaData.java b/sql/src/main/java/java/sql/DatabaseMetaData.java deleted file mode 100644 index 82219c5..0000000 --- a/sql/src/main/java/java/sql/DatabaseMetaData.java +++ /dev/null @@ -1,3356 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -/** - * An interface which provides comprehensive information about the database - * management system and its supported features. - * <p> - * This interface is implemented by JDBC driver vendors in order to provide - * information about the underlying database capabilities in association with - * the JDBC driver. - * </p> - * <p> - * Some of the methods in this interface take string parameters which are - * patterns. Within these string patterns, {@code '%'} and {@code '_'} - * characters have special meanings. {@code '%'} means - * "match any substring of 0 or more characters". {@code '_'} means - * "match any character". Only metadata entries that match the pattern are - * returned. If such a search pattern string is set to {@code null}, that - * argument's criteria are dropped from the search. - * </p> - * - * @since Android 1.0 - */ -public interface DatabaseMetaData { - - /** - * States that it may not be permitted to store {@code NULL} values. - * - * @since Android 1.0 - */ - public static final short attributeNoNulls = 0; - - /** - * States that {@code NULL} values are definitely permitted. - * - * @since Android 1.0 - */ - public static final short attributeNullable = 1; - - /** - * States that whether {@code NULL} values are permitted is unknown. - * - * @since Android 1.0 - */ - public static final short attributeNullableUnknown = 2; - - /** - * States the best row identifier is <em>NOT</em> a pseudo column. - * - * @since Android 1.0 - */ - public static final int bestRowNotPseudo = 1; - - /** - * States that the best row identifier is a pseudo column. - * - * @since Android 1.0 - */ - public static final int bestRowPseudo = 2; - - /** - * States that the remainder of the current session is used as the scope for - * the best row identifier. - * - * @since Android 1.0 - */ - public static final int bestRowSession = 2; - - /** - * States that best row identifier scope lasts only while the row is being - * used. - * - * @since Android 1.0 - */ - public static final int bestRowTemporary = 0; - - /** - * States that the remainder of the current transaction is used as the scope - * for the best row identifier. - * - * @since Android 1.0 - */ - public static final int bestRowTransaction = 1; - - /** - * States that the best row identifier may or may not be a pseudo column. - * - * @since Android 1.0 - */ - public static final int bestRowUnknown = 0; - - /** - * States that the column must not allow {@code NULL} values. - * - * @since Android 1.0 - */ - public static final int columnNoNulls = 0; - - /** - * States that the column definitely allows {@code NULL} values. - * - * @since Android 1.0 - */ - public static final int columnNullable = 1; - - /** - * States that it is unknown whether the columns may be nulled. - * - * @since Android 1.0 - */ - public static final int columnNullableUnknown = 2; - - /** - * For the column {@code UPDATE_RULE}, states that when the primary key is - * updated, the foreign key (imported key) is changed accordingly. - * - * @since Android 1.0 - */ - public static final int importedKeyCascade = 0; - - /** - * States that the evaluation of foreign key constraints is deferred (delayed - * until commit). - * - * @since Android 1.0 - */ - public static final int importedKeyInitiallyDeferred = 5; - - /** - * States that the evaluation of foreign key constraint is {@code IMMEDIATE} - * . - * - * @since Android 1.0 - */ - public static final int importedKeyInitiallyImmediate = 6; - - /** - * For the columns {@code UPDATE_RULE} and {@code DELETE_RULE}, states that - * if the primary key has been imported, it cannot be updated or deleted. - * - * @since Android 1.0 - */ - public static final int importedKeyNoAction = 3; - - /** - * States that the evaluation of foreign key constraint must not be {@code - * DEFERRED}. - * - * @since Android 1.0 - */ - public static final int importedKeyNotDeferrable = 7; - - /** - * States that a primary key must not be updated when imported as a foreign - * key by some other table. Used for the column {@code UPDATE_RULE}. - * - * @since Android 1.0 - */ - public static final int importedKeyRestrict = 1; - - /** - * States that when the primary key is modified (updated or deleted) the - * foreign (imported) key is changed to its default value. Applies to the - * {@code UPDATE_RULE} and {@code DELETE_RULE} columns. - * - * @since Android 1.0 - */ - public static final int importedKeySetDefault = 4; - - /** - * States that when the primary key is modified (updated or deleted) the - * foreign (imported) key is changed to {@code NULL}. Applies to the {@code - * UPDATE_RULE} and {@code DELETE_RULE} columns. - * - * @since Android 1.0 - */ - public static final int importedKeySetNull = 2; - - /** - * States that the column stores {@code IN} type parameters. - * - * @since Android 1.0 - */ - public static final int procedureColumnIn = 1; - - /** - * States that this column stores {@code INOUT} type parameters. - * - * @since Android 1.0 - */ - public static final int procedureColumnInOut = 2; - - /** - * States that this column stores {@code OUT} type parameters. - * - * @since Android 1.0 - */ - public static final int procedureColumnOut = 4; - - /** - * States that the column stores results. - * - * @since Android 1.0 - */ - public static final int procedureColumnResult = 3; - - /** - * States that the column stores return values. - * - * @since Android 1.0 - */ - public static final int procedureColumnReturn = 5; - - /** - * States that type of the column is unknown. - * - * @since Android 1.0 - */ - public static final int procedureColumnUnknown = 0; - - /** - * States that {@code NULL} values are not permitted. - * - * @since Android 1.0 - */ - public static final int procedureNoNulls = 0; - - /** - * States that the procedure does not return a result. - * - * @since Android 1.0 - */ - public static final int procedureNoResult = 1; - - /** - * States that {@code NULL} values are permitted. - * - * @since Android 1.0 - */ - public static final int procedureNullable = 1; - - /** - * States that it is unknown whether {@code NULL} values are permitted. - * - * @since Android 1.0 - */ - public static final int procedureNullableUnknown = 2; - - /** - * States that it is unknown whether or not the procedure returns a result. - * - * @since Android 1.0 - */ - public static final int procedureResultUnknown = 0; - - /** - * States that the procedure returns a result. - * - * @since Android 1.0 - */ - public static final int procedureReturnsResult = 2; - - /** - * States that the value is an SQL99 {@code SQLSTATE} value. - * - * @since Android 1.0 - */ - public static final int sqlStateSQL99 = 2; - - /** - * States that the value is an SQL {@code CLI SQLSTATE} value as defined by - * the X/Open standard. - * - * @since Android 1.0 - */ - public static final int sqlStateXOpen = 1; - - /** - * States that this table index is a clustered index. - * - * @since Android 1.0 - */ - public static final short tableIndexClustered = 1; - - /** - * States that this table index is a hashed index. - * - * @since Android 1.0 - */ - public static final short tableIndexHashed = 2; - - /** - * States this table's index is neither a clustered index, not a hashed - * index, and not a table statistics index; i.e. it is something else. - * - * @since Android 1.0 - */ - public static final short tableIndexOther = 3; - - /** - * States this column has the table's statistics, and that it is returned in - * conjunction with the table's index description. - * - * @since Android 1.0 - */ - public static final short tableIndexStatistic = 0; - - /** - * States that a {@code NULL} value is <em>NOT</em> permitted for - * this data type. - * - * @since Android 1.0 - */ - public static final int typeNoNulls = 0; - - /** - * States that a {@code NULL} value is permitted for this data type. - * - * @since Android 1.0 - */ - public static final int typeNullable = 1; - - /** - * States that it is unknown if a {@code NULL} value is permitted for - * this data type. - * - * @since Android 1.0 - */ - public static final int typeNullableUnknown = 2; - - /** - * States that this column shall not be used for {@code WHERE} statements - * with a {@code LIKE} clause. - * - * @since Android 1.0 - */ - public static final int typePredBasic = 2; - - /** - * States that this column can only be used in a {@code WHERE...LIKE} - * statement. - * - * @since Android 1.0 - */ - public static final int typePredChar = 1; - - /** - * States that this column does not support searches. - * - * @since Android 1.0 - */ - public static final int typePredNone = 0; - - /** - * States that the column is searchable. - * - * @since Android 1.0 - */ - public static final int typeSearchable = 3; - - /** - * States that the version column is known to be not a pseudo column. - */ - public static final int versionColumnNotPseudo = 1; - - /** - * States that this version column is known to be a pseudo column. - */ - public static final int versionColumnPseudo = 2; - - /** - * States that the version column may be a pseudo column or not. - */ - public static final int versionColumnUnknown = 0; - - /** - * Returns whether all procedures returned by {@link #getProcedures} can be - * called by the current user. - * - * @return {@code true} if all procedures can be called by the current user, - * {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean allProceduresAreCallable() throws SQLException; - - /** - * Returns whether all the tables returned by {@code getTables} can be used - * by the current user in a {@code SELECT} statement. - * - * @return {@code true} if all the tables can be used,{@code false} - * otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean allTablesAreSelectable() throws SQLException; - - /** - * Returns whether a data definition statement in a transaction forces a {@code - * commit} of the transaction. - * - * @return {@code true} if the statement forces a commit, {@code false} - * otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean dataDefinitionCausesTransactionCommit() throws SQLException; - - /** - * Returns whether the database ignores data definition statements within a - * transaction. - * - * @return {@code true} if the database ignores a data definition statement, - * {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean dataDefinitionIgnoredInTransactions() throws SQLException; - - /** - * Returns whether a visible row delete can be detected by calling - * {@link ResultSet#rowDeleted}. - * - * @param type - * the type of the {@code ResultSet} involved: {@code - * ResultSet.TYPE_FORWARD_ONLY}, {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} - * @return {@code true} if the visible row delete can be detected, {@code - * false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean deletesAreDetected(int type) throws SQLException; - - /** - * Returns whether the return value of {@code getMaxRowSize} includes the - * SQL data types {@code LONGVARCHAR} and {@code LONGVARBINARY}. - * - * @return {@code true} if the return value includes {@code LONGVARBINARY} - * and {@code LONGVARCHAR}, otherwise {@code false}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean doesMaxRowSizeIncludeBlobs() throws SQLException; - - /** - * Returns a {@code ResultSet} describing a subset of the attributes of a - * specified SQL User Defined Type (UDT) for a specified schema and catalog. - * The subset is determined by restricting to those attributes whose - * name matches the {@code attributeNamePattern} and whose type name - * matches the {@code typeNamePattern}. Each row of the {@code ResultSet} - * describes one attribute, and the rows are ordered by the columns {@code TYPE_SCHEM}, - * {@code TYPE_NAME} and {@code ORDINAL_POSITION}. Inherited attributes - * are not included. - * <p> - * The columns of the returned {@code ResultSet} object have the following - * names and meanings: - * <ol> - * <li>{@code TYPE_CAT} - String - the type catalog name (possibly {@code - * null})</li> - * <li>{@code TYPE_SCHEM} - String - the type schema name (possibly {@code - * null})</li> - * <li>{@code TYPE_NAME} - String - the type name</li> - * <li>{@code ATTR_NAME} - String - the attribute name</li> - * <li>{@code DATA_TYPE} - int - the attribute type as defined in {@code - * java.sql.Types}</li> - * <li>{@code ATTR_TYPE_NAME} - String - the attribute type name. This - * depends on the data source. For a {@code UDT} the name is fully - * qualified. For a {@code REF} it is both fully qualified and represents - * the target type of the reference.</li> - * <li>{@code ATTR_SIZE} - int - the column size. When referring to char and - * date types this value is the maximum number of characters. When referring - * to numeric types is is the precision.</li> - * <li>{@code DECIMAL_DIGITS} - int - how many fractional digits are - * supported</li> - * <li>{@code NUM_PREC_RADIX} - int - numeric values radix</li> - * <li>{@code NULLABLE} - int - whether {@code NULL} is permitted: - * <ul> - * <li>DatabaseMetaData.attributeNoNulls - {@code NULL} values not permitted</li> - * <li>DatabaseMetaData.attributeNullable - {@code NULL} values definitely - * permitted</li> - * <li>DatabaseMetaData.attributeNullableUnknown - unknown</li> - * </ul> - * </li> - * <li>{@code REMARKS} - String - a comment describing the attribute - * (possibly {@code null})</li> - * <li>ATTR_DEF - String - Default value for the attribute (possibly {@code - * null})</li> - * <li>{@code SQL_DATA_TYPE} - int - not used</li> - * <li>SQL_DATETIME_SUB - int - not used</li> - * <li>CHAR_OCTET_LENGTH - int - for {@code CHAR} types, the max number of - * bytes in the column</li> - * <li>ORDINAL_POSITION - int - The index of the column in the table (where - * the count starts from 1, not 0)</li> - * <li>IS_NULLABLE - String - {@code "NO"} = the column does not allow {@code - * NULL}s, {@code "YES"} = the column allows {@code NULL}s, "" = status unknown</li> - * <li>{@code SCOPE_CATALOG} - String - if the {@code DATA_TYPE} is {@code REF}, - * this gives the catalog of the table corresponding to the attribute's scope. - * NULL if the {@code DATA_TYPE} is not REF.</li> - * <li>{@code SCOPE_SCHEMA} - String - if the {@code DATA_TYPE} is {@code REF}, - * this gives the schema of the table corresponding to the attribute's scope. - * NULL if the {@code DATA_TYPE} is not REF.</li> - * <li>{@code SCOPE_TABLE} - String - if the {@code DATA_TYPE} is {@code REF}, - * this gives the name of the table corresponding to the attribute's scope. - * NULL if the {@code DATA_TYPE} is not REF.</li> - * <li>{@code SOURCE_DATA_TYPE} - String - The source type for a user - * generated REF type or for a Distinct type. ({@code NULL} if {@code - * DATA_TYPE} is not DISTINCT or a user generated REF)</li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schemaPattern - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by a schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param typeNamePattern - * a type name. This pattern must match the type name stored in - * the database. - * @param attributeNamePattern - * an Attribute name. This pattern must match the attribute name as stored in - * the database. - * @return a {@code ResultSet}, where each row is an attribute description. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getAttributes(String catalog, String schemaPattern, - String typeNamePattern, String attributeNamePattern) - throws SQLException; - - /** - * Returns a list of a table's optimal set of columns that uniquely - * identify the rows. The results are ordered by {@code SCOPE} (see below). - * <p> - * The results are returned as a table, with one entry for each column, as - * follows: - * <ol> - * <li>{@code SCOPE} - short - the {@code SCOPE} of the result, as follows: - * <ul> - * <li>{@code DatabaseMetaData.bestRowTemporary} - the result is very temporary, - * only valid while on the current row</li> - * <li>{@code DatabaseMetaData.bestRowTransaction} - the result is good for remainder of - * current transaction</li> - * <li>{@code DatabaseMetaData.bestRowSession} - the result is good for remainder of - * database session</li> - * </ul> - * </li> - * <li>{@code COLUMN_NAME} - String - the column name</li> - * <li>{@code DATA_TYPE} - int - the Type of the data, as defined in {@code - * java.sql.Types}</li> - * <li>{@code TYPE_NAME} - String - the Name of the type - database dependent. - * For UDT types the name is fully qualified</li> - * <li>{@code COLUMN_SIZE} - int - the precision of the data in the column</li> - * <li>{@code BUFFER_LENGTH} - int - not used</li> - * <li>{@code DECIMAL_DIGITS} - short - number of fractional digits</li> - * <li>{@code PSEUDO_COLUMN} - short - whether this is a pseudo column (e.g. - * an Oracle {@code ROWID}): - * <ul> - * <li>{@code DatabaseMetaData.bestRowUnknown} - it is not known whether this is - * a pseudo column</li> - * <li>{@code DatabaseMetaData.bestRowNotPseudo} - the column is not pseudo</li> - * <li>{@code DatabaseMetaData.bestRowPseudo} - the column is a pseudo column</li> - * </ul> - * </li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schema - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param table - * the table name. This must match the name of the table as - * declared in the database. - * @param scope - * the {@code SCOPE} of interest, values as defined above. - * @param nullable - * {@code true} = include columns that are nullable, {@code - * false} = do not include nullable columns. - * @return a {@code ResultSet} where each row is a description of a column - * and the complete set of rows is the optimal set for this table. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getBestRowIdentifier(String catalog, String schema, - String table, int scope, boolean nullable) throws SQLException; - - /** - * Returns the set of catalog names available in this database. The set is - * returned ordered by catalog name. - * - * @return a {@code ResultSet} containing the catalog names, with each row - * containing one catalog name (as a {@code String}) in the - * single column named {@code TABLE_CAT}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getCatalogs() throws SQLException; - - /** - * Returns the separator that this database uses between a catalog name and - * table name. - * - * @return a String containing the separator. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getCatalogSeparator() throws SQLException; - - /** - * Returns the term that the database vendor prefers term for "catalog". - * - * @return a String with the vendor's term for "catalog". - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getCatalogTerm() throws SQLException; - - /** - * Returns a description of access rights for a table's columns. Only access - * rights matching the criteria for the column name are returned. - * <p> - * The description is returned as a {@code ResultSet} with rows of data for - * each access right, with columns as follows: - * <ol> - * <li>{@code TABLE_CAT} - String - the catalog name (possibly {@code null})</li> - * <li>{@code TABLE_SCHEM} - String - the schema name (possibly {@code null})</li> - * <li>{@code TABLE_NAME} - String - the table name</li> - * <li>{@code COLUMN_NAME} - String - the Column name</li> - * <li>{@code GRANTOR} - String - the grantor of access (possibly {@code - * null})</li> - * <li>{@code PRIVILEGE} - String - Access right - one of SELECT, INSERT, - * UPDATE, REFERENCES,...</li> - * <li>{@code IS_GRANTABLE} - String - {@code "YES"} implies that the - * receiver can grant access to others, {@code "NO"} if the receiver cannot - * grant access to others, {@code null} if unknown.</li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schema - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param table - * the table name. This must match the name of the table as - * declared in the database. - * @param columnNamePattern - * the column name. This must match the name of a column in the - * table in the database. - * @return a {@code ResultSet} containing the access rights, one row for - * each privilege description. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getColumnPrivileges(String catalog, String schema, - String table, String columnNamePattern) throws SQLException; - - /** - * Returns a description of table columns available in a specified catalog. - * Only descriptions meeting the specified catalog, schema, table, and column - * names are returned. - * <p> - * The descriptions are returned as a {@code ResultSet} conforming to the - * following data layout, with one row per table column: - * <ol> - * <li>{@code TABLE_CAT} - String - the catalog name (possibly {@code null})</li> - * <li>{@code TABLE_SCHEM} - String - the schema name (possibly {@code null})</li> - * <li>{@code TABLE_NAME} - String - the table name</li> - * <li>{@code COLUMN_NAME} - String - the column name</li> - * <li>{@code DATA_TYPE} - int - the SQL type as specified in {@code - * java.sql.Types}</li> - * <li>{@code TYPE_NAME} - String - the name of the data type, (database-dependent, - * UDT names are fully qualified)</li> - * <li>{@code COLUMN_SIZE} - int - the column size (the precision for numeric - * types, max characters for {@code char} and {@code date} types)</li> - * <li>{@code BUFFER_LENGTH} - int - Not used</li> - * <li>{@code DECIMAL_DIGITS} - int - maximum number of fractional digits</li> - * <li>{@code NUM_PREC_RADIX} - int - the radix for numerical types</li> - * <li>{@code NULLABLE} - int - whether the column allows {@code null}s: - * <ul> - * <li>DatabaseMetaData.columnNoNulls = may not allow {@code NULL}s</li> - * <li>DatabaseMetaData.columnNullable = does allow {@code NULL}s</li> - * <li>DatabaseMetaData.columnNullableUnknown = unknown {@code NULL} status</li> - * </ul> - * </li> - * <li>{@code REMARKS} - String - A description of the column (possibly - * {@code null})</li> - * <li>{@code COLUMN_DEF} - String - Default value for the column (possibly - * {@code null})</li> - * <li>{@code SQL_DATA_TYPE} - int - not used</li> - * <li>{@code SQL_DATETIME_SUB} - int - not used</li> - * <li>{@code CHAR_OCTET_LENGTH} - int - maximum number of bytes in the - * {@code char} type columns</li> - * <li>{@code ORDINAL_POSITION} - int - the column index in the table (1 based)</li> - * <li>{@code IS_NULLABLE} - String - {@code "NO"} = column does not allow - * NULLs, {@code "YES"} = column allows NULLs, "" = {@code NULL} status - * unknown</li> - * <li>{@code SCOPE_CATALOG} - String - if the {@code DATA_TYPE} is {@code REF}, - * this gives the catalog of the table corresponding to the attribute's scope. - * NULL if the {@code DATA_TYPE} is not REF.</li> - * <li>{@code SCOPE_SCHEMA} - String - if the {@code DATA_TYPE} is {@code REF}, - * this gives the schema of the table corresponding to the attribute's scope. - * NULL if the {@code DATA_TYPE} is not REF.</li> - * <li>{@code SCOPE_TABLE} - String - if the {@code DATA_TYPE} is {@code REF}, - * this gives the name of the table corresponding to the attribute's scope. - * NULL if the {@code DATA_TYPE} is not REF.</li> - * <li>{@code SOURCE_DATA_TYPE} - String - The source type for a user - * generated REF type or for a Distinct type. ({@code NULL} if {@code - * DATA_TYPE} is not DISTINCT or a user generated REF)</li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schemaPattern - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param tableNamePattern - * the table name. This must match the name of the table as - * declared in the database. - * @param columnNamePattern - * the column name. This must match the name of a column in the - * table in the database. - * @return the descriptions as a {@code ResultSet} with rows in the form - * defined above. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getColumns(String catalog, String schemaPattern, - String tableNamePattern, String columnNamePattern) - throws SQLException; - - /** - * Returns the database connection that created this metadata. - * - * @return the connection to the database. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Connection getConnection() throws SQLException; - - /** - * Returns a list of foreign key columns in a given foreign key table that - * reference the primary key columns of a supplied primary key table. This - * describes how one table imports the key of another table. It would be - * expected to return a single foreign key - primary key pair in most cases. - * <p> - * The descriptions are returned as a {@code ResultSet} with one row for - * each foreign key, with the following layout: - * <ol> - * <li>{@code PKTABLE_CAT} - String - from the primary key table : Catalog - * (possibly {@code null})</li> - * <li>{@code PKTABLE_SCHEM} - String - from the primary key table : Schema - * (possibly {@code null})</li> - * <li>{@code PKTABLE_NAME} - String - from the primary key table : name</li> - * <li>{@code PKCOLUMN_NAME} - String - from the primary key column : name</li> - * <li>{@code FKTABLE_CAT} - String - from the foreign key table : the - * catalog name being exported (possibly {@code null})</li> - * <li>{@code FKTABLE_SCHEM} - String - from the foreign key table : the schema name - * being exported (possibly {@code null})</li> - * <li>{@code FKTABLE_NAME} - String - from the foreign key table : the name being - * exported</li> - * <li>{@code FKCOLUMN_NAME} - String - from the foreign key column : the name being - * exported</li> - * <li>{@code KEY_SEQ} - short - the sequence number (in the foreign key)</li> - * <li>{@code UPDATE_RULE} - short - a value giving the rule for how to treat the corresponding foreign key when a primary - * key is updated: - * <ul> - * <li>{@code DatabaseMetaData.importedKeyNoAction} - don't allow the - * primary key to be updated if it is imported as a foreign key</li> - * <li>{@code DatabaseMetaData.importedKeyCascade} - change the imported key to - * match the updated primary key</li> - * <li>{@code DatabaseMetaData.importedKeySetNull} - set the imported key to - * {@code null}</li> - * <li>{@code DatabaseMetaData.importedKeySetDefault} - set the imported key - * to its default value</li> - * <li>{@code DatabaseMetaData.importedKeyRestrict} - same as {@code - * importedKeyNoAction}</li> - * </ul> - * </li> - * <li>{@code DELETE_RULE} - short - a value giving the rule for how to treat the foreign key when the corresponding primary - * key is deleted: - * <ul> - * <li>{@code DatabaseMetaData.importedKeyNoAction} - don't allow the - * primary key to be deleted if it is imported as a foreign key</li> - * <li>{@code DatabaseMetaData.importedKeyCascade} - delete those rows that - * import a deleted key</li> - * <li>{@code DatabaseMetaData.importedKeySetNull} - set the imported key to - * {@code null}</li> - * <li>{@code DatabaseMetaData.importedKeySetDefault} - set the imported key - * to its default value</li> - * <li>{@code DatabaseMetaData.importedKeyRestrict} - same as - * importedKeyNoAction</li> - * </ul> - * </li> - * <li>{@code FK_NAME} - String - the foreign key name (possibly {@code null})</li> - * <li>{@code PK_NAME} - String - the primary key name (possibly {@code null})</li> - * <li>{@code DEFERRABILITY} - short - whether foreign key constraints can be - * deferred until commit (see the SQL92 specification for definitions): - * <ul> - * <li>{@code DatabaseMetaData.importedKeyInitiallyDeferred}</li> - * <li>{@code DatabaseMetaData.importedKeyInitiallyImmediate}</li> - * <li>{@code DatabaseMetaData.importedKeyNotDeferrable}</li> - * </ul> - * </li> - * </ol> - * </p> - * - * @param primaryCatalog - * a catalog name for the primary key table. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param primarySchema - * a schema name for the primary key table. {@code null} is used to imply no narrowing of - * the search by schema name. Otherwise, the name must match a - * schema name in the database, with "" used to retrieve those - * without a schema name. - * @param primaryTable - * the name of the table which exports the key. It must match the - * name of the table in the database. - * @param foreignCatalog - * a catalog name for the foreign key table. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param foreignSchema - * a schema name for the foreign key table. {@code null} is used to imply no narrowing of - * the search by schema name. Otherwise, the name must match a - * schema name in the database, with "" used to retrieve those - * without a schema name. - * @param foreignTable - * the name of the table importing the key. It must match the - * name of the table in the database. - * @return a {@code ResultSet} containing rows with the descriptions of the - * foreign keys laid out according to the format defined above. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSet getCrossReference(String primaryCatalog, - String primarySchema, String primaryTable, String foreignCatalog, - String foreignSchema, String foreignTable) throws SQLException; - - /** - * Returns the major version number of the database software. - * - * @return the major version number of the database software. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getDatabaseMajorVersion() throws SQLException; - - /** - * Returns the minor version number of the database software. - * - * @return the minor version number of the database software. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getDatabaseMinorVersion() throws SQLException; - - /** - * Returns the name of the database software. - * - * @return a {@code String} with the name of the database software. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getDatabaseProductName() throws SQLException; - - /** - * Returns the version number of this database software. - * - * @return a {@code String} with the version number of the database - * software. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getDatabaseProductVersion() throws SQLException; - - /** - * Returns the default transaction isolation level for this database. - * - * @return the default transaction isolation level. One of the following values: - * <ul> - * <li>{@code TRANSACTION_NONE}</li> - * <li>{@code TRANSACTION_READ_COMMITTED}</li> - * <li>{@code TRANSACTION_READ_UNCOMMITTED}</li> - * <li>{@code TRANSACTION_REPEATABLE_READ}</li> - * <li>{@code TRANSACTION_SERIALIZABLE}</li> - * </ul> - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getDefaultTransactionIsolation() throws SQLException; - - /** - * Returns the JDBC driver's major version number. - * - * @return the driver's major version number. - * @since Android 1.0 - */ - public int getDriverMajorVersion(); - - /** - * Returns the JDBC driver's minor version number. - * - * @return the driver's minor version number. - * @since Android 1.0 - */ - public int getDriverMinorVersion(); - - /** - * Returns the name of this JDBC driver. - * - * @return a {@code String} containing the name of the JDBC driver - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getDriverName() throws SQLException; - - /** - * Returns the version number of this JDBC driver. - * - * @return a {@code String} containing the complete version number of the - * JDBC driver. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getDriverVersion() throws SQLException; - - /** - * Returns a list of the foreign key columns that reference the primary key - * columns of a specified table (the foreign keys exported by a table). - * <p> - * The list is returned as a {@code ResultSet} with a row for each of the - * foreign key columns, ordered by {@code FKTABLE_CAT}, {@code - * FKTABLE_SCHEM}, {@code FKTABLE_NAME}, and {@code KEY_SEQ}, with the - * format for each row being: - * <ol> - * <li>{@code PKTABLE_CAT} - String - from the primary key table : the catalog (possibly - * {@code null})</li> - * <li>{@code PKTABLE_SCHEM} - String - from the primary key table : the schema (possibly - * {@code null})</li> - * <li>{@code PKTABLE_NAME} - String - from the primary key table : the name</li> - * <li>{@code PKCOLUMN_NAME} - String - from the primary key column : the name</li> - * <li>{@code FKTABLE_CAT} - String - from the foreign key table : the catalog name being - * exported (possibly {@code null})</li> - * <li>{@code FKTABLE_SCHEM} - String - from the foreign key table : the schema name - * being exported (possibly {@code null})</li> - * <li>{@code FKTABLE_NAME} - String - from the foreign key table : the name being - * exported</li> - * <li>{@code FKCOLUMN_NAME} - String - from the foreign key column : the name being - * exported</li> - * <li>{@code KEY_SEQ} - short - the sequence number (in the foreign key)</li> - * <li>{@code UPDATE_RULE} - short - a value giving the rule for how to treat the foreign key when the corresponding primary - * key is updated: - * <ul> - * <li>{@code DatabaseMetaData.importedKeyNoAction} - don't allow the - * primary key to be updated if it is imported as a foreign key</li> - * <li>{@code DatabaseMetaData.importedKeyCascade} - change the imported key to - * match the primary key update</li> - * <li>{@code DatabaseMetaData.importedKeySetNull} - set the imported key to - * {@code null}</li> - * <li>{@code DatabaseMetaData.importedKeySetDefault} - set the imported key - * to its default value</li> - * <li>{@code DatabaseMetaData.importedKeyRestrict} - same as - * importedKeyNoAction</li> - * </ul> - * </li> - * <li>{@code DELETE_RULE} - short - how to treat the foreign key when the corresponding primary - * key is deleted: - * <ul> - * <li>{@code DatabaseMetaData.importedKeyNoAction} - don't allow the - * primary key to be deleted if it is imported as a foreign key</li> - * <li>{@code DatabaseMetaData.importedKeyCascade} - the deletion should - * also delete rows that import a deleted key</li> - * <li>{@code DatabaseMetaData.importedKeySetNull} - the deletion sets the - * imported key to {@code null}</li> - * <li>{@code DatabaseMetaData.importedKeySetDefault} - the deletion sets the - * imported key to its default value</li> - * <li>{@code DatabaseMetaData.importedKeyRestrict} - same as - * importedKeyNoAction</li> - * </ul> - * </li> - * <li>{@code FK_NAME} - String - the foreign key name (possibly {@code null})</li> - * <li>{@code PK_NAME} - String - the primary key name (possibly {@code null})</li> - * <li>{@code DEFERRABILITY} - short - defines whether the foreign key - * constraints can be deferred until commit (see the SQL92 specification for - * definitions): - * <ul> - * <li>{@code DatabaseMetaData.importedKeyInitiallyDeferred}</li> - * <li>{@code DatabaseMetaData.importedKeyInitiallyImmediate}</li> - * <li>{@code DatabaseMetaData.importedKeyNotDeferrable}</li> - * </ul> - * </li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schema - * a schema name. {@code null} is used to imply no narrowing of - * the search by schema name. Otherwise, the name must match a - * schema name in the database, with "" used to retrieve those - * without a schema name. - * @param table - * a table name, which must match the name of a table in the - * database - * @return a {@code ResultSet} containing a row for each of the foreign key - * columns, as defined above - * @throws SQLException - * a database error occurred - * @since Android 1.0 - */ - public ResultSet getExportedKeys(String catalog, String schema, String table) - throws SQLException; - - /** - * Returns a string of characters that may be used in unquoted identifier - * names. The characters {@code a-z}, {@code A-Z}, {@code 0-9} and {@code _} - * are always permitted. - * - * @return a String containing all the additional permitted characters. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getExtraNameCharacters() throws SQLException; - - /** - * Returns the string used to quote SQL identifiers. Returns " " (space) if - * identifier quoting not supported. - * - * @return the String used to quote SQL identifiers. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getIdentifierQuoteString() throws SQLException; - - /** - * Returns a list columns in a table that are both primary keys and - * referenced by the table's foreign key columns (that is, the primary keys - * imported by a table). - * <p> - * The list returned is a {@code ResultSet} with a row entry for each - * primary key column, ordered by {@code PKTABLE_CAT}, {@code PKTABLE_SCHEM}, - * {@code PKTABLE_NAME}, and {@code KEY_SEQ}, with the following format: - * <ol> - * <li>{@code PKTABLE_CAT} - String - primary key catalog name being - * imported (possibly {@code null})</li> - * <li>{@code PKTABLE_SCHEM} - String - primary key schema name being - * imported (possibly {@code null})</li> - * <li>{@code PKTABLE_NAME} - String - primary key table name being imported - * </li> - * <li>{@code PKCOLUMN_NAME} - String - primary key column name being - * imported</li> - * <li>{@code FKTABLE_CAT} - String - foreign key table catalog name - * (possibly {@code null})</li> - * <li>{@code FKTABLE_SCHEM} - String - foreign key table schema name - * (possibly {@code null})</li> - * <li>{@code FKTABLE_NAME} - String - foreign key table name</li> - * <li>{@code FKCOLUMN_NAME} - String - foreign key column name</li> - * <li>{@code KEY_SEQ} - short - sequence number (in the foreign key)</li> - * <li>{@code UPDATE_RULE} - short - how to treat the foreign key when the corresponding primary - * key is updated: - * <ul> - * <li>{@code DatabaseMetaData.importedKeyNoAction} - don't allow any update of - * the primary key if it is imported as a foreign key</li> - * <li>{@code DatabaseMetaData.importedKeyCascade} - change imported key to - * match the primary key update</li> - * <li>{@code DatabaseMetaData.importedKeySetNull} - set the imported key to - * {@code null}</li> - * <li>{@code DatabaseMetaData.importedKeySetDefault} - set the imported key - * to its default value</li> - * <li>{@code DatabaseMetaData.importedKeyRestrict} - same as - * importedKeyNoAction</li> - * </ul> - * </li> - * <li>{@code DELETE_RULE} - short - how to treat the foreign key when the corresponding primary - * key is deleted: - * <ul> - * <li>{@code DatabaseMetaData.importedKeyNoAction} - don't allow the primary key to be deleted - * if it is imported as a foreign key</li> - * <li>{@code DatabaseMetaData.importedKeyCascade} - delete those rows that - * import a deleted key</li> - * <li>{@code DatabaseMetaData.importedKeySetNull} - set the imported key to - * {@code null}</li> - * <li>{@code DatabaseMetaData.importedKeySetDefault} - set the imported key - * to its default value</li> - * <li>{@code DatabaseMetaData.importedKeyRestrict} - same as {@code - * importedKeyNoAction}</li> - * </ul> - * </li> - * <li>{@code FK_NAME} - String - foreign key name (possibly {@code null})</li> - * <li>{@code PK_NAME} - String - primary key name (possibly {@code null})</li> - * <li>{@code DEFERRABILITY} - short - defines whether foreign key - * constraints can be deferred until commit (see SQL92 specification for - * definitions): - * <ul> - * <li>{@code DatabaseMetaData.importedKeyInitiallyDeferred}</li> - * <li>{@code DatabaseMetaData.importedKeyInitiallyImmediate}</li> - * <li>{@code DatabaseMetaData.importedKeyNotDeferrable}</li> - * </ul> - * </li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schema - * a schema name. {@code null} is used to imply no narrowing of - * the search by schema name. Otherwise, the name must match a - * schema name in the database, with "" used to retrieve those - * without a schema name. - * @param table - * a table name, which must match the name of a table in the - * database. - * @return a {@code ResultSet} containing the list of primary key columns as - * rows in the format defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getImportedKeys(String catalog, String schema, String table) - throws SQLException; - - /** - * Returns a list of indices and statistics for a specified table. - * <p> - * The list is returned as a {@code ResultSet}, with one row for each index - * or statistic. The list is ordered by {@code NON_UNIQUE}, {@code TYPE}, - * {@code INDEX_NAME}, and {@code ORDINAL_POSITION}. Each row has the - * following format: - * <ol> - * <li>{@code TABLE_CAT} - String - table catalog name (possibly {@code - * null})</li> - * <li>{@code TABLE_SCHEM} - String - table schema name (possibly {@code - * null})</li> - * <li>{@code TABLE_NAME} - String - The table name</li> - * <li>{@code NON_UNIQUE} - boolean - {@code true} when index values can be - * non-unique. Must be {@code false} when the TYPE is tableIndexStatistic</li> - * <li>{@code INDEX_QUALIFIER} - String : index catalog name. {@code null} - * when the TYPE is 'tableIndexStatistic'</li> - * <li>{@code INDEX_NAME} - String : index name. {@code null} when TYPE is - * 'tableIndexStatistic'</li> - * <li>{@code TYPE} - short - the index type. One of: - * <ul> - * <li>{@code DatabaseMetaData.tableIndexStatistic} - table statistics - * returned with Index descriptions</li> - * <li>{@code DatabaseMetaData.tableIndexClustered} - a clustered Index</li> - * <li>{@code DatabaseMetaData.tableIndexHashed} - a hashed Index</li> - * <li>{@code DatabaseMetaData.tableIndexOther} - other style of Index</li> - * </ul> - * </li> - * <li>{@code ORDINAL_POSITION} - short - column sequence within Index. 0 - * when TYPE is tableIndexStatistic</li> - * <li>{@code COLUMN_NAME} - String - the column name. {@code null} when - * TYPE is tableIndexStatistic</li> - * <li>{@code ASC_OR_DESC} - String - column sort sequence. {@code null} if - * sequencing not supported or TYPE is tableIndexStatistic; otherwise "A" - * means sort ascending and "D" means sort descending.</li> - * <li>{@code CARDINALITY} - int - Number of unique values in the Index. If - * TYPE is tableIndexStatistic, this is number of rows in the table.</li> - * <li>{@code PAGES} - int - Number of pages for current Index. If TYPE is - * tableIndexStatistic, this is number of pages used for the table.</li> - * <li>{@code FILTER_CONDITION} - String - Filter condition. (possibly null) - * </li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schema - * a schema name. {@code null} is used to imply no narrowing of - * the search by schema name. Otherwise, the name must match a - * schema name in the database, with "" used to retrieve those - * without a schema name. - * @param table - * a table name, which must match the name of a table in the - * database. - * @param unique - * {@code true} means only return indices for unique values, - * {@code false} implies that they can be returned even if not - * unique. - * @param approximate - * {@code true} implies that the list can contain approximate or - * "out of data" values, {@code false} implies that all values - * must be precisely accurate - * @return a {@code ResultSet} containing the list of indices and statistics - * for the table, in the format defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getIndexInfo(String catalog, String schema, String table, - boolean unique, boolean approximate) throws SQLException; - - /** - * Returns this driver's major JDBC version number. - * - * @return the major JDBC version number. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getJDBCMajorVersion() throws SQLException; - - /** - * Returns the minor JDBC version number for this driver. - * - * @return the Minor JDBC Version Number. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getJDBCMinorVersion() throws SQLException; - - /** - * Get the maximum number of hex characters in an in-line binary literal for - * this database. - * - * @return the maximum number of hex characters in an in-line binary - * literal. If the number is unlimited then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxBinaryLiteralLength() throws SQLException; - - /** - * Returns the maximum size of a catalog name in this database. - * - * @return the maximum size in characters for a catalog name. If the limit - * is unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxCatalogNameLength() throws SQLException; - - /** - * Returns the maximum size for a character literal in this database. - * - * @return the maximum size in characters for a character literal. If the - * limit is unknown, or the value is unlimited, then the result is - * zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxCharLiteralLength() throws SQLException; - - /** - * Returns the maximum size for a Column name for this database. - * - * @return the maximum number of characters for a Column name. If the limit - * is unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxColumnNameLength() throws SQLException; - - /** - * Get the maximum number of columns in a {@code GROUP BY} clause for this - * database. - * - * @return the maximum number of columns in a {@code GROUP BY} clause. If - * the limit is unknown, or the value is unlimited, then the result - * is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxColumnsInGroupBy() throws SQLException; - - /** - * Returns the maximum number of columns in an Index for this database. - * - * @return the maximum number of columns in an Index. If the limit is - * unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxColumnsInIndex() throws SQLException; - - /** - * Returns the maximum number of columns in an {@code ORDER BY} clause for - * this database. - * - * @return the maximum number of columns in an {@code ORDER BY} clause. If - * the limit is unknown, or the value is unlimited, then the result - * is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxColumnsInOrderBy() throws SQLException; - - /** - * Returns the maximum number of columns in a {@code SELECT} list for this - * database. - * - * @return the maximum number of columns in a {@code SELECT} list. If the - * limit is unknown, or the value is unlimited, then the result is - * zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxColumnsInSelect() throws SQLException; - - /** - * Returns the maximum number of columns in a table for this database. - * - * @return the maximum number of columns in a table. If the limit is - * unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxColumnsInTable() throws SQLException; - - /** - * Returns the database's maximum number of concurrent connections. - * - * @return the maximum number of connections. If the limit is unknown, or - * the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxConnections() throws SQLException; - - /** - * Returns the maximum length of a cursor name for this database. - * - * @return the maximum number of characters in a cursor name. If the limit - * is unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxCursorNameLength() throws SQLException; - - /** - * Returns the maximum length in bytes for an Index for this database. This - * covers all the parts of a composite index. - * - * @return the maximum length in bytes for an Index. If the limit is - * unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxIndexLength() throws SQLException; - - /** - * Returns the maximum number of characters for a procedure name in this - * database. - * - * @return the maximum number of character for a procedure name. If the - * limit is unknown, or the value is unlimited, then the result is - * zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxProcedureNameLength() throws SQLException; - - /** - * Returns the maximum number of bytes within a single row for this - * database. - * - * @return the maximum number of bytes for a single row. If the limit is - * unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxRowSize() throws SQLException; - - /** - * Returns the maximum number of characters in a schema name for this - * database. - * - * @return the maximum number of characters in a schema name. If the limit - * is unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxSchemaNameLength() throws SQLException; - - /** - * Returns the maximum number of characters in an SQL statement for this - * database. - * - * @return the maximum number of characters in an SQL statement. If the - * limit is unknown, or the value is unlimited, then the result is - * zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxStatementLength() throws SQLException; - - /** - * Get the maximum number of simultaneously open active statements for this - * database. - * - * @return the maximum number of open active statements. If the limit is - * unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxStatements() throws SQLException; - - /** - * Returns the maximum size for a table name in the database. - * - * @return the maximum size in characters for a table name. If the limit is - * unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxTableNameLength() throws SQLException; - - /** - * Returns the maximum number of tables permitted in a {@code SELECT} - * statement for the database. - * - * @return the maximum number of tables permitted in a {@code SELECT} - * statement. If the limit is unknown, or the value is unlimited, - * then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxTablesInSelect() throws SQLException; - - /** - * Returns the maximum number of characters in a user name for the database. - * - * @return the maximum number of characters in a user name. If the limit is - * unknown, or the value is unlimited, then the result is zero. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getMaxUserNameLength() throws SQLException; - - /** - * Returns a list of the math functions available with this database. These - * are used in the JDBC function escape clause and are the Open Group CLI - * math function names. - * - * @return a String which contains the list of math functions as a comma - * separated list. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getNumericFunctions() throws SQLException; - - /** - * Returns a list of the primary key columns of a specified table. - * <p> - * The list is returned as a {@code ResultSet} with one row for each primary - * key column, ordered by {@code COLUMN_NAME}, with each row having the - * structure as follows: - * <ol> - * <li>{@code TABLE_CAT} - String - table catalog name (possibly null)</li> - * <li>{@code TABLE_SCHEM} - String - table schema name (possibly null)</li> - * <li>{@code TABLE_NAME} - String - The table name</li> - * <li>{@code COLUMN_NAME} - String - The column name</li> - * <li>{@code KEY_SEQ} - short - the sequence number for this column in the - * primary key</li> - * <li>{@code PK_NAME} - String - the primary key name (possibly null)</li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with the empty string used - * to retrieve those without a catalog name. - * @param schema - * a schema name. {@code null} is used to imply no narrowing of - * the search by schema name. Otherwise, the name must match a - * schema name in the database, with the empty string used to - * retrieve those without a schema name. - * @param table - * the name of a table, which must match the name of a table in - * the database. - * @return a {@code ResultSet} containing the list of keys in the format - * defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getPrimaryKeys(String catalog, String schema, String table) - throws SQLException; - - /** - * Returns a list of parameter and result columns for the stored procedures - * belonging to a specified catalog. - * <p> - * The list is returned as a {@code ResultSet} with one row for each - * parameter or result column. The data is ordered by {@code - * PROCEDURE_SCHEM} and {@code PROCEDURE_NAME}, while for each procedure, - * the return value (if any) is first, followed by the parameters in the - * order they appear in the stored procedure call, followed by {@code - * ResultSet} columns in column number order. Each row has the following - * structure: - * <ol> - * <li>{@code PROCEDURE_CAT} - String - the procedure catalog name</li> - * <li>{@code PROCEDURE_SCHEM} - String - the procedure schema name - * (possibly null)</li> - * <li>{@code PROCEDURE_NAME} - String - the procedure name</li> - * <li>{@code COLUMN_NAME} - String - the name of the column</li> - * <li>{@code COLUMN_TYPE} - short - the kind of column or parameter, as - * follows: - * <ul> - * <li>{@code DatabaseMetaData.procedureColumnUnknown} - type unknown</li> - * <li>{@code DatabaseMetaData.procedureColumnIn} - an {@code IN} parameter</li> - * <li>{@code DatabaseMetaData.procedureColumnInOut} - an {@code INOUT} - * parameter</li> - * <li>{@code DatabaseMetaData.procedureColumnOut} - an {@code OUT} - * parameter</li> - * <li>{@code DatabaseMetaData.procedureColumnReturn} - a return value</li> - * <li>{@code DatabaseMetaData.procedureReturnsResult} - a result column in - * a result set</li> - * </ul> - * </li> - * <li>{@code DATA_TYPE} - int - the SQL type of the data, as in {@code - * java.sql.Types}</li> - * <li>{@code TYPE_NAME} - String - the SQL type name, for a UDT it is fully - * qualified</li> - * <li>{@code PRECISION} - int - the precision</li> - * <li>{@code LENGTH} - int - the length of the data in bytes</li> - * <li>{@code SCALE} - short - the scale for numeric types</li> - * <li>{@code RADIX} - short - the Radix for numeric data (typically 2 or - * 10)</li> - * <li>{@code NULLABLE} - short - can the data contain {@code null}: - * <ul> - * <li>{@code DatabaseMetaData.procedureNoNulls} - {@code NULL}s not - * permitted</li> - * <li>{@code DatabaseMetaData.procedureNullable} - {@code NULL}s are - * permitted</li> - * <li>{@code DatabaseMetaData.procedureNullableUnknown} - {@code NULL} - * status unknown</li> - * </ul> - * </li> - * <li>{@code REMARKS} - String - an explanatory comment about the data item - * </li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schemaPattern - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param procedureNamePattern - * a pattern that must match the name of the procedure stored in - * the database. - * @param columnNamePattern - * a column name pattern. The name must match the column name - * stored in the database. - * @return a {@code ResultSet} with the list of parameter and result columns - * in the format defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getProcedureColumns(String catalog, String schemaPattern, - String procedureNamePattern, String columnNamePattern) - throws SQLException; - - /** - * Returns a list of the stored procedures available in a specified catalog. - * <p> - * The list is returned as a {@code ResultSet} with one row for each stored - * procedure, ordered by PROCEDURE_SCHEM and PROCEDURE_NAME, with the data - * in each row as follows: - * <ol> - * <li>{@code PROCEDURE_CAT} - String : the procedure catalog name</li> - * <li>{@code PROCEDURE_SCHEM} - String : the procedure schema name - * (possibly {@code null})</li> - * <li>{@code PROCEDURE_NAME} - String : the procedure name</li> - * <li>{@code Reserved}</li> - * <li>{@code Reserved}</li> - * <li>{@code Reserved}</li> - * <li>{@code REMARKS} - String - information about the procedure</li> - * <li>{@code PROCEDURE_TYPE} - short : one of: - * <ul> - * <li>{@code DatabaseMetaData.procedureResultUnknown} - procedure may - * return a result</li> - * <li>{@code DatabaseMetaData.procedureNoResult} - procedure does not - * return a result</li> - * <li>{@code DatabaseMetaData.procedureReturnsResult} - procedure - * definitely returns a result</li> - * </ul> - * </li> - * </ol> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schemaPattern - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param procedureNamePattern - * a procedure name pattern, which must match the procedure name - * stored in the database. - * @return a {@code ResultSet} where each row is a description of a stored - * procedure in the format defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getProcedures(String catalog, String schemaPattern, - String procedureNamePattern) throws SQLException; - - /** - * Returns the database vendor's preferred name for "procedure". - * - * @return a String with the vendor's preferred name for "procedure". - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getProcedureTerm() throws SQLException; - - /** - * Returns the result set's default holdability. - * - * @return one of {@code ResultSet.HOLD_CURSORS_OVER_COMMIT} or {@code - * ResultSet.CLOSE_CURSORS_AT_COMMIT}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getResultSetHoldability() throws SQLException; - - /** - * Returns a list of the schema names in the database. The list is returned - * as a {@code ResultSet}, ordered by the schema name, with one row per - * schema in the following format: - * <ol> - * <li>{@code TABLE_SCHEM} - String - the schema name</li> <li>{@code - * TABLE_CATALOG} - String - the catalog name (possibly {@code null}) </li> - * </ol> - * - * @return a {@code ResultSet} with one row for each schema in the format - * defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getSchemas() throws SQLException; - - /** - * Returns the database vendor's preferred term for "schema". - * - * @return a String which is the vendor's preferred term for schema. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getSchemaTerm() throws SQLException; - - /** - * Returns the string that is used to escape wildcard characters. This - * string is used to escape the {@code '_'} and {@code '%'} wildcard - * characters in catalog search pattern strings. {@code '_'} is used to represent any single - * character while {@code '%'} is used for a sequence of zero or more - * characters. - * - * @return a String used to escape the wildcard characters. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getSearchStringEscape() throws SQLException; - - /** - * Returns a list of all the SQL keywords that are NOT also SQL92 keywords - * for the database. - * - * @return a String containing the list of SQL keywords in a comma separated - * format. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getSQLKeywords() throws SQLException; - - /** - * States the type of {@code SQLState} value returned by {@code - * SQLException.getSQLState}. This can either be the X/Open (now known as - * Open Group) SQL CLI form or the SQL99 form. - * - * @return an integer, which is either {@code - * DatabaseMetaData.sqlStateSQL99} or {@code - * DatabaseMetaData.sqlStateXOpen}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public int getSQLStateType() throws SQLException; - - /** - * Returns a list of string functions available with the database. These - * functions are used in JDBC function escape clause and follow the Open - * Group CLI string function names definition. - * - * @return a String containing the list of string functions in comma - * separated format. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getStringFunctions() throws SQLException; - - /** - * Returns a listing of the hierarchies of tables in a specified schema in - * the database. - * <p> - * The listing only contains entries for tables that have a super table. - * Super tables and corresponding subtables must be defined in the same catalog and schema. The - * list is returned as a {@code ResultSet}, with one row for each table that - * has a super table, in the following format: - * <ol> - * <li>{@code TABLE_CAT} - String - table catalog name (possibly {@code - * null})</li> - * <li>{@code TABLE_SCHEM} - String - Table schema name (possibly {@code - * null})</li> - * <li>{@code TABLE_NAME} - String - The table name</li> - * <li>SUPER{@code TABLE_NAME} - String - The super table name</li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schemaPattern - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param tableNamePattern - * a table name, which should match the table name as stored in - * the database. it may be a fully qualified name. If it is fully - * qualified the catalog name and schema name parameters are - * ignored. - * @return a {@code ResultSet} with one row for each table which has a super - * table, in the format defined above. An empty {@code ResultSet} is - * returned if the database does not support table hierarchies. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getSuperTables(String catalog, String schemaPattern, - String tableNamePattern) throws SQLException; - - /** - * Returns the User Defined Type (UDT) hierarchies for a given schema. Only - * the immediate parent/child relationship is described. If a UDT does not - * have a direct supertype, it is not listed. - * <p> - * The listing is returned as a {@code ResultSet} where there is one row for - * a specific UDT which describes its supertype, with the data organized in - * columns as follows: - * <ol> - * <li>{@code TYPE_CAT} - String - the UDT catalog name (possibly {@code - * null})</li> - * <li>{@code TYPE_SCHEM} - String - the UDT schema name (possibly {@code - * null})</li> - * <li>{@code TYPE_NAME} - String - the UDT type name</li> - * <li>SUPER{@code TYPE_CAT} - String - direct supertype's catalog name - * (possibly {@code null})</li> - * <li>SUPER{@code TYPE_SCHEM} - String - direct supertype's schema name - * (possibly {@code null})</li> - * <li>SUPER{@code TYPE_NAME} - String - direct supertype's name</li> - * </ol> - * </p> - * - * @param catalog - * the catalog name. "" means get the UDTs without a catalog. - * {@code null} means don't use the catalog name to restrict the - * search. - * @param schemaPattern - * the Schema pattern name. "" means get the UDT's without a - * schema. - * @param typeNamePattern - * the UDT name pattern. This may be a fully qualified name. When - * a fully qualified name is specified, the catalog name and - * schema name parameters are ignored. - * @return a {@code ResultSet} in which each row gives information about a - * particular UDT in the format defined above. An empty ResultSet is - * returned for a database that does not support type hierarchies. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getSuperTypes(String catalog, String schemaPattern, - String typeNamePattern) throws SQLException; - - /** - * Returns a list of system functions available with the database. These are - * names used in the JDBC function escape clause and are Open Group CLI - * function names. - * - * @return a String containing the list of system functions in a comma - * separated format. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getSystemFunctions() throws SQLException; - - /** - * Returns a description of access rights for each table present in a - * catalog. Table privileges can apply to one or more columns in the table - - * but are not guaranteed to apply to all columns. - * <p> - * The privileges are returned as a {@code ResultSet}, with one row for each - * privilege, ordered by {@code TABLE_SCHEM}, {@code TABLE_NAME}, {@code - * PRIVILEGE}, and each row has data as defined in the following column - * definitions: - * <ol> - * <li>{@code TABLE_CAT} - String - table catalog name (possibly {@code - * null})</li> - * <li>{@code TABLE_SCHEM} - String - Table schema name (possibly {@code - * null})</li> - * <li>{@code TABLE_NAME} - String - The table name</li> - * <li>GRANTOR - String - who granted the access</li> - * <li>GRANTEE - String - who received the access grant</li> - * <li>PRIVILEGE - String - the type of access granted - one of SELECT, - * INSERT, UPDATE, REFERENCES,...</li> - * <li>IS_GRANTABLE - String - {@code "YES"} implies the grantee can grant - * access to others, {@code "NO"} implies guarantee cannot grant access to - * others, {@code null} means this status is unknown</li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schemaPattern - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param tableNamePattern - * a Table Name, which should match the table name as stored in - * the database. - * @return a {@code ResultSet} containing a list with one row for each table - * in the format defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getTablePrivileges(String catalog, String schemaPattern, - String tableNamePattern) throws SQLException; - - /** - * Returns a description of the tables in a specified catalog. - * <p> - * The descriptions are returned as rows in a {@code ResultSet}, one row for - * each Table. The ResultSet is ordered by {@code TABLE_TYPE}, {@code - * TABLE_SCHEM} and {@code TABLE_NAME}. Each row in the ResultSet consists - * of a series of columns as follows: - * <ol> - * <li>{@code TABLE_CAT} - String - table catalog name (possibly {@code - * null})</li> - * <li>{@code TABLE_SCHEM} - String - Table schema name (possibly {@code - * null})</li> - * <li>{@code TABLE_NAME} - String - The table name</li> - * <li>{@code TABLE_TYPE} - String - Typical names include "TABLE", "VIEW", - * "SYSTEM TABLE", "ALIAS", "SYNONYM", "GLOBAL TEMPORARY"</li> - * <li>{@code REMARKS} - String - A comment describing the table</li> - * <li>{@code TYPE_CAT} - String - the 'Types' catalog(possibly {@code null} - * )</li> - * <li>{@code TYPE_SCHEM} - String - the 'Types' schema(possibly {@code - * null})</li> - * <li>{@code TYPE_NAME} - String - the 'Types' name (possibly {@code null}) - * </li> - * <li>{@code SELF_REFERENCING_COL_NAME} - String - the name of a designated - * identifier column in a typed table (possibly {@code null})</li> - * <li>REF_GENERATION - String - one of the following values : "SYSTEM" | - * "USER" | "DERIVED" - specifies how values in the {@code - * SELF_REFERENCING_COL_NAME} are created (possibly {@code null})</li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schemaPattern - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search by schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param tableNamePattern - * a table name, which should match the table name as stored in - * the database. - * @param types - * a list of table types to include in the list. {@code null} - * implies list all types. - * @return a {@code ResultSet} with one row per table in the format defined - * above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getTables(String catalog, String schemaPattern, - String tableNamePattern, String[] types) throws SQLException; - - /** - * Returns a list of table types supported by the database. - * <p> - * The list is returned as a {@code ResultSet} with one row per table type, - * ordered by the table type. The information in the {@code ResultSet} is - * structured into a single column per row, as follows: - * <ol> - * <li>{@code TABLE_TYPE} - String - the table type. Typical names include - * {@code "TABLE"}, {@code "VIEW"}, "{@code SYSTEM TABLE"}, {@code "ALIAS"}, - * {@code "SYNONYM"}, {@code "GLOBAL TEMPORARY"}</li> - * </ol> - * </p> - * - * @return a {@code ResultSet} with one row per table type in the format - * defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getTableTypes() throws SQLException; - - /** - * Returns a list of time and date functions available for the database. - * - * @return a string containing a comma separated list of the time and date - * functions. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getTimeDateFunctions() throws SQLException; - - /** - * Get a list of the standard SQL types supported by this database. The list - * is returned as a {@code ResultSet}, with one row for each type, ordered - * by the {@code DATA_TYPE} value, where the data in each row is structured - * into the following columns: - * <ol> - * <li>{@code TYPE_NAME} - String : the type name</li> - * <li>{@code DATA_TYPE} - int : the SQL data type value as defined in - * {@code java.sql.Types}</li> - * <li>{@code PRECISION} - int - the maximum precision of the type</li> - * <li>{@code LITERAL_PREFIX} - String : the prefix to be used when quoting - * a literal value (possibly {@code null})</li> - * <li>{@code LITERAL_SUFFIX} - String : the suffix to be used when quoting - * a literal value (possibly {@code null})</li> - * <li>{@code CREATE_PARAMS} - String : params used when creating the type - * (possibly {@code null})</li> - * <li>{@code NULLABLE} - short : shows if the value is nullable: - * <ul> - * <li>{@code DatabaseMetaData.typeNoNulls} : {@code NULL}s not permitted</li> - * <li>{@code DatabaseMetaData.typeNullable} : {@code NULL}s are permitted</li> - * <li>{@code DatabaseMetaData.typeNullableUnknown} : {@code NULL} status - * unknown</li> - * </ul> - * </li> - * <li>{@code CASE_SENSITIVE} - boolean : true if the type is case sensitive - * </li> - * <li>{@code SEARCHABLE} - short : how this type can be used with {@code WHERE} - * clauses: - * <ul> - * <li>{@code DatabaseMetaData.typePredNone} - {@code WHERE} clauses cannot be used</li> - * <li>{@code DatabaseMetaData.typePredChar} - support for {@code - * WHERE...LIKE} only</li> - * <li>{@code DatabaseMetaData.typePredBasic} - support except for {@code - * WHERE...LIKE}</li> - * <li>{@code DatabaseMetaData.typeSearchable} - support for all {@code - * WHERE} clauses</li> - * </ul> - * </li> - * <li>{@code UNSIGNED_ATTRIBUTE} - boolean - the type is unsigned or not</li> - * <li>{@code FIXED_PREC_SCALE} - boolean - fixed precision = it can be used - * as a money value</li> - * <li>{@code AUTO_INCREMENT} - boolean - can be used as an auto-increment - * value</li> - * <li>{@code LOCAL_TYPE_NAME} - String - a localized version of the type - * name (possibly {@code null})</li> - * <li>{@code MINIMUM_SCALE} - short - the minimum scale supported</li> - * <li>{@code MAXIMUM_SCALE} - short - the maximum scale supported</li> - * <li>{@code SQL_DATA_TYPE} - int - not used</li> - * <li>{@code SQL_DATETIME_SUB} - int - not used</li> - * <li>{@code NUM_PREC_RADIX} - int - number radix (typically 2 or 10)</li> - * </ol> - * - * @return a {@code ResultSet} which is structured as described above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getTypeInfo() throws SQLException; - - /** - * Returns a description of the User Defined Types (UDTs) defined in a given - * schema, which includes the types {@code DISTINCT}, {@code STRUCT} and - * {@code JAVA_OBJECT}. - * <p> - * The types matching the supplied the specified catalog, schema, type name - * and type are returned as rows in a {@code ResultSet} with columns of - * information as follows: - * <ol> - * <li>{@code TABLE_CAT} - String - catalog name (possibly {@code null})</li> - * <li>{@code TABLE_SCHEM} - String - schema name (possibly {@code null})</li> - * <li>{@code TABLE_NAME} - String - The table name</li> - * <li>{@code CLASS_NAME} - String - The Java class name</li> - * <li>{@code DATA_TYPE} - int - The SQL type as specified in {@code - * java.sql.Types}. One of DISTINCT, STRUCT, and JAVA_OBJECT</li> - * <li>{@code REMARKS} - String - A comment which describes the type</li> - * <li>{@code BASE_TYPE} - short - A type code. For a DISTINCT type, the - * source type. For a structured type this is the type that implements the - * user generated reference type of the {@code SELF_REFERENCING_COLUMN}. - * This is defined in {@code java.sql.Types}, and will be {@code null} if - * the {@code DATA_TYPE} does not match these criteria.</li> - * </ol> - * </p> - * <p> - * If the driver does not support UDTs, the {@code ResultSet} is empty. - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search by catalog name. Otherwise, the name must match a - * catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schemaPattern - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search using schema name. Otherwise, the name - * must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param typeNamePattern - * a type name pattern, which should match a type name as stored in the - * database. It may be fully qualified. - * @param types - * a list of the UDT types to include in the list - one of - * {@code DISTINCT}, {@code STRUCT} or {@code JAVA_OBJECT}. - * @return a {@code ResultSet} in the format described above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getUDTs(String catalog, String schemaPattern, - String typeNamePattern, int[] types) throws SQLException; - - /** - * Returns the URL for this database. - * - * @return the URL for the database. {@code null} if it cannot be generated. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getURL() throws SQLException; - - /** - * Determine the user name as known by the database. - * - * @return the user name. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public String getUserName() throws SQLException; - - /** - * Returns which of a table's columns are automatically updated when any - * value in a row is updated. - * <p> - * The result is laid-out in the following columns: - * <ol> - * <li>{@code SCOPE} - short - not used</li> - * <li>{@code COLUMN_NAME} - String - Column name</li> - * <li>{@code DATA_TYPE} - int - The SQL data type, as defined in {@code - * java.sql.Types}</li> - * <li>{@code TYPE_NAME} - String - The SQL type name, data source dependent - * </li> - * <li>{@code COLUMN_SIZE} - int - Precision for numeric types</li> - * <li>{@code BUFFER_LENGTH} - int - Length of a column value in bytes</li> - * <li>{@code DECIMAL_DIGITS} - short - Number of digits after the decimal - * point</li> - * <li>{@code PSEUDO_COLUMN} - short - If this is a pseudo-column (for - * example, an Oracle {@code ROWID}): - * <ul> - * <li>{@code DatabaseMetaData.bestRowUnknown} - don't know whether this is - * a pseudo column</li> - * <li>{@code DatabaseMetaData.bestRowNotPseudo} - column is not pseudo</li> - * <li>{@code DatabaseMetaData.bestRowPseudo} - column is a pseudo column</li> - * </ul> - * </li> - * </ol> - * </p> - * - * @param catalog - * a catalog name. {@code null} is used to imply no narrowing of - * the search using catalog name. Otherwise, the name must match - * a catalog name held in the database, with "" used to retrieve - * those without a catalog name. - * @param schema - * a schema name pattern. {@code null} is used to imply no - * narrowing of the search using schema names. Otherwise, the - * name must match a schema name in the database, with "" used to - * retrieve those without a schema name. - * @param table - * a table name. It must match the name of a table in the - * database. - * @return a {@code ResultSet} containing the descriptions, one row for each - * column, in the format defined above. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public ResultSet getVersionColumns(String catalog, String schema, - String table) throws SQLException; - - /** - * Determines whether a visible row insert can be detected by calling {@code - * ResultSet.rowInserted}. - * - * @param type - * the {@code ResultSet} type. This may be one of {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} or {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE} or {@code - * ResultSet.TYPE_FORWARD_ONLY}, - * @return {@code true} if {@code ResultSet.rowInserted} detects a visible - * row insert otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @see ResultSet#rowInserted() - * @since Android 1.0 - */ - public boolean insertsAreDetected(int type) throws SQLException; - - /** - * Determine whether a fully qualified table name is prefixed or suffixed to - * a fully qualified table name. - * - * @return {@code true} if the catalog appears at the start of a fully - * qualified table name, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean isCatalogAtStart() throws SQLException; - - /** - * Determines whether the database is in read-only mode. - * - * @return {@code true} if the database is in read-only mode, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean isReadOnly() throws SQLException; - - /** - * Determines whether updates are made to a copy of, or directly on, Large Objects - * ({@code LOB}s). - * - * @return {@code true} if updates are made to a copy of the Large Object, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean locatorsUpdateCopy() throws SQLException; - - /** - * Determines whether the database handles concatenations between {@code NULL} and - * non-{@code NULL} values by producing a {@code NULL} output. - * - * @return {@code true} if {@code NULL} to non-{@code NULL} concatenations - * produce a {@code NULL} result, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean nullPlusNonNullIsNull() throws SQLException; - - /** - * Determines whether {@code NULL} values are always sorted to the end of sorted - * results regardless of requested sort order. This means that they will - * appear at the end of sorted lists whatever other non-{@code NULL} values - * may be present. - * - * @return {@code true} if {@code NULL} values are sorted at the end, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean nullsAreSortedAtEnd() throws SQLException; - - /** - * Determines whether {@code NULL} values are always sorted at the start of the - * sorted list, irrespective of the sort order. This means that they appear - * at the start of sorted lists, whatever other values may be present. - * - * @return {@code true} if {@code NULL} values are sorted at the start, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean nullsAreSortedAtStart() throws SQLException; - - /** - * Determines whether {@code NULL} values are sorted high - i.e. they are sorted - * as if they are higher than any other values. - * - * @return {@code true} if {@code NULL} values are sorted high, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean nullsAreSortedHigh() throws SQLException; - - /** - * Determines whether {@code NULL} values are sorted low - i.e. they are sorted as - * if they are lower than any other values. - * - * @return {@code true} if {@code NULL} values are sorted low, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean nullsAreSortedLow() throws SQLException; - - /** - * Determines whether deletes made by others are visible, for a specified {@code - * ResultSet} type. - * - * @param type - * the type of the {@code ResultSet}. It may be either {@code - * ResultSet.TYPE_FORWARD_ONLY} or {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE}) - * @return {@code true} if others' deletes are visible, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean othersDeletesAreVisible(int type) throws SQLException; - - /** - * Determines whether inserts made by others are visible, for a specified {@code - * ResultSet} type. - * - * @param type - * the type of the {@code ResultSet}. May be {@code - * ResultSet.TYPE_FORWARD_ONLY}, or {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} - * @return {@code true} if others' inserts are visible, otherwise {@code - * false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean othersInsertsAreVisible(int type) throws SQLException; - - /** - * Determines whether updates made by others are visible, for a specified {@code - * ResultSet} type. - * - * @param type - * the type of the {@code ResultSet}. May be {@code - * ResultSet.TYPE_FORWARD_ONLY}, or {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} - * @return {@code true} if others' inserts are visible, otherwise {@code - * false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean othersUpdatesAreVisible(int type) throws SQLException; - - /** - * Determines whether a {@code ResultSet} can see its own deletes, for a - * specified {@code ResultSet} type. - * - * @param type - * the type of the {@code ResultSet}: {@code - * ResultSet.TYPE_FORWARD_ONLY}, {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} - * @return {@code true} if the deletes are seen by the {@code - * ResultSet} itself, otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean ownDeletesAreVisible(int type) throws SQLException; - - /** - * Determines whether a {@code ResultSet} can see its own inserts, for a - * specified {@code ResultSet} type. - * - * @param type - * the type of the {@code ResultSet}: {@code - * ResultSet.TYPE_FORWARD_ONLY}, {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} - * @return {@code true} if the inserts are seen by the {@code - * ResultSet} itself, otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean ownInsertsAreVisible(int type) throws SQLException; - - /** - * Determines whether a {@code ResultSet} can see its own updates, for a - * specified {@code ResultSet} type. - * - * @param type - * the type of the {@code ResultSet}: {@code - * ResultSet.TYPE_FORWARD_ONLY}, {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} - * @return {@code true} if the updates are seen by the {@code - * ResultSet} itself, otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean ownUpdatesAreVisible(int type) throws SQLException; - - /** - * Determines whether the database treats SQL identifiers that are in mixed - * case (and unquoted) as case insensitive. If {@code true} then the - * database stores them in lower case. - * - * @return {@code true} if unquoted SQL identifiers are stored in lower - * case, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean storesLowerCaseIdentifiers() throws SQLException; - - /** - * Determines whether the database considers mixed case quoted SQL - * identifiers as case insensitive and stores them in lower case. - * - * @return {@code true} if quoted SQL identifiers are stored in lower case, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean storesLowerCaseQuotedIdentifiers() throws SQLException; - - /** - * Determines whether the database considers mixed case unquoted SQL - * identifiers as case insensitive and stores them in mixed case. - * - * @return {@code true} if unquoted SQL identifiers as stored in mixed case, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean storesMixedCaseIdentifiers() throws SQLException; - - /** - * Determines whether the database considers identifiers as case insensitive - * if they are mixed case quoted SQL. The database stores them in mixed - * case. - * - * @return {@code true} if quoted SQL identifiers are stored in mixed case, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean storesMixedCaseQuotedIdentifiers() throws SQLException; - - /** - * Determines whether the database considers mixed case unquoted SQL - * identifiers as case insensitive and stores them in upper case. - * - * @return {@code true} if unquoted SQL identifiers are stored in upper - * case, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean storesUpperCaseIdentifiers() throws SQLException; - - /** - * Determines whether the database considers mixed case quoted SQL - * identifiers as case insensitive and stores them in upper case. - * - * @return {@code true} if quoted SQL identifiers are stored in upper case, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean storesUpperCaseQuotedIdentifiers() throws SQLException; - - /** - * Determines whether the database supports {@code ALTER TABLE} operation with - * {@code ADD COLUMN}. - * - * @return {@code true} if {@code ALTER TABLE} with {@code ADD COLUMN} is - * supported, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsAlterTableWithAddColumn() throws SQLException; - - /** - * Determines whether the database supports {@code ALTER TABLE} operation with - * {@code DROP COLUMN}. - * - * @return {@code true} if {@code ALTER TABLE} with {@code DROP COLUMN} is - * supported, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsAlterTableWithDropColumn() throws SQLException; - - /** - * Determines whether the database supports the ANSI92 entry level SQL grammar. - * - * @return {@code true} if the ANSI92 entry level SQL grammar is supported, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsANSI92EntryLevelSQL() throws SQLException; - - /** - * Determines whether the database supports the ANSI92 full SQL grammar. - * - * @return {@code true} if the ANSI92 full SQL grammar is supported, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsANSI92FullSQL() throws SQLException; - - /** - * Determines whether the database supports the ANSI92 intermediate SQL Grammar. - * - * @return {@code true} if the ANSI92 intermediate SQL grammar is supported, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsANSI92IntermediateSQL() throws SQLException; - - /** - * Determines whether the database supports batch updates. - * - * @return {@code true} if batch updates are supported, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsBatchUpdates() throws SQLException; - - /** - * Determines whether catalog names may be used in data manipulation - * statements. - * - * @return {@code true} if catalog names can be used in data manipulation - * statements, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsCatalogsInDataManipulation() throws SQLException; - - /** - * Determines whether catalog names can be used in index definition statements. - * - * @return {@code true} if catalog names can be used in index definition - * statements, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsCatalogsInIndexDefinitions() throws SQLException; - - /** - * Determines whether catalog names can be used in privilege definition - * statements. - * - * @return {@code true} if catalog names can be used in privilege definition - * statements, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException; - - /** - * Determines whether catalog names can be used in procedure call statements. - * - * @return {@code true} if catalog names can be used in procedure call - * statements. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsCatalogsInProcedureCalls() throws SQLException; - - /** - * Determines whether catalog names may be used in table definition statements. - * - * @return {@code true} if catalog names can be used in definition - * statements, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsCatalogsInTableDefinitions() throws SQLException; - - /** - * Determines whether the database supports column aliasing. - * <p> - * If aliasing is supported, then the SQL AS clause is used to provide names - * for computed columns and provide alias names for columns. - * </p> - * - * @return {@code true} if column aliasing is supported, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - */ - public boolean supportsColumnAliasing() throws SQLException; - - /** - * Determines whether the database supports the {@code CONVERT} operation between - * SQL types. - * - * @return {@code true} if the {@code CONVERT} operation is supported, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsConvert() throws SQLException; - - /** - * Determines whether the database supports {@code CONVERT} operation for two - * supplied SQL types. - * - * @param fromType - * the Type to convert from, as defined by {@code java.sql.Types} - * @param toType - * the Type to convert to, as defined by {@code java.sql.Types} - * @return {@code true} if the {@code CONVERT} operation is supported for - * these types, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsConvert(int fromType, int toType) - throws SQLException; - - /** - * Determines whether the database supports the Core SQL Grammar for ODBC. - * - * @return {@code true} if the Core SQL Grammar is supported, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsCoreSQLGrammar() throws SQLException; - - /** - * Determines whether the database supports correlated sub-queries. - * - * @return {@code true} if the database does support correlated sub-queries - * and {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsCorrelatedSubqueries() throws SQLException; - - /** - * Determines whether the database allows both data definition and data - * manipulation statements inside a transaction. - * - * @return {@code true} if both types of statement are permitted, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsDataDefinitionAndDataManipulationTransactions() - throws SQLException; - - /** - * Determines whether the database only allows data manipulation statements inside - * a transaction. - * - * @return {@code true} if data manipulation statements are permitted only within a transaction, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsDataManipulationTransactionsOnly() - throws SQLException; - - /** - * Determines whether table correlation names are required to be different from - * the names of the tables, when they are supported. - * - * @return {@code true} if correlation names must be different from table - * names, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsDifferentTableCorrelationNames() throws SQLException; - - /** - * Determines whether expressions in {@code ORDER BY} lists are supported. - * - * @return {@code true} if expressions in {@code ORDER BY} lists are - * supported. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsExpressionsInOrderBy() throws SQLException; - - /** - * Determines whether the Extended SQL Grammar for ODBC is supported. - * - * @return {@code true} if the Extended SQL Grammar is supported, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsExtendedSQLGrammar() throws SQLException; - - /** - * Determines whether the database supports full nested outer joins. - * - * @return {@code true} if full nested outer joins are supported, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsFullOuterJoins() throws SQLException; - - /** - * Determines whether auto generated keys can be returned when a statement - * executes. - * - * @return {@code true} if auto generated keys can be returned, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsGetGeneratedKeys() throws SQLException; - - /** - * Determines whether the database supports {@code GROUP BY} clauses. - * - * @return {@code true} if the {@code GROUP BY} clause is supported, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsGroupBy() throws SQLException; - - /** - * Determines whether the database supports using a column name in a {@code GROUP - * BY} clause not included in the {@code SELECT} statement as long as all of - * the columns in the {@code SELECT} statement are used in the {@code GROUP - * BY} clause. - * - * @return {@code true} if {@code GROUP BY} clauses can use column names in - * this way, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsGroupByBeyondSelect() throws SQLException; - - /** - * Determines whether the database supports using a column name in a {@code GROUP - * BY} clause that is not in the {@code SELECT} statement. - * - * @return {@code true} if {@code GROUP BY} clause can use a column name not - * in the {@code SELECT} statement, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsGroupByUnrelated() throws SQLException; - - /** - * Determines whether the database supports SQL Integrity Enhancement - * Facility. - * - * @return {@code true} if the Integrity Enhancement Facility is supported, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsIntegrityEnhancementFacility() throws SQLException; - - /** - * Determines whether the database supports a {@code LIKE} escape clause. - * - * @return {@code true} if LIKE escape clause is supported, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsLikeEscapeClause() throws SQLException; - - /** - * Determines whether the database provides limited support for outer join - * operations. - * - * @return {@code true} if there is limited support for outer join - * operations, {@code false} otherwise. This will be {@code true} if - * {@code supportsFullOuterJoins} returns {@code true}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsLimitedOuterJoins() throws SQLException; - - /** - * Determines whether the database supports Minimum SQL Grammar for ODBC. - * - * @return {@code true} if the Minimum SQL Grammar is supported, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsMinimumSQLGrammar() throws SQLException; - - /** - * Determines whether the database treats mixed case unquoted SQL identifiers as - * case sensitive storing them in mixed case. - * - * @return {@code true} if unquoted SQL identifiers are stored in mixed - * case, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsMixedCaseIdentifiers() throws SQLException; - - /** - * Determines whether the database considers mixed case quoted SQL - * identifiers as case sensitive, storing them in mixed case. - * - * @return {@code true} if quoted SQL identifiers are stored in mixed case, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException; - - /** - * Determines whether it is possible for a single {@code CallableStatement} to - * return multiple {@code ResultSet}s simultaneously. - * - * @return {@code true} if a single {@code CallableStatement} can return - * multiple {@code ResultSet}s simultaneously, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsMultipleOpenResults() throws SQLException; - - /** - * Determines whether retrieving multiple {@code ResultSet}s from a single - * call to the {@code execute} method is supported. - * - * @return {@code true} if multiple {@code ResultSet}s can be retrieved, - * {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsMultipleResultSets() throws SQLException; - - /** - * Determines whether multiple simultaneous transactions on - * different connections are supported. - * - * @return {@code true} if multiple open transactions are supported, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsMultipleTransactions() throws SQLException; - - /** - * Determines whether callable statements with named parameters is supported. - * - * @return {@code true} if named parameters can be used with callable - * statements, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsNamedParameters() throws SQLException; - - /** - * Determines whether columns in the database can be defined as non-nullable. - * - * @return {@code true} if columns can be defined non-nullable, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsNonNullableColumns() throws SQLException; - - /** - * Determines whether keeping cursors open across commit operations is - * supported. - * - * @return {@code true} if cursors can be kept open across commit - * operations, {@code false} if they might get closed. - * @throws SQLException - * a database error occurred. - */ - public boolean supportsOpenCursorsAcrossCommit() throws SQLException; - - /** - * Determines whether the database can keep cursors open across rollback - * operations. - * - * @return {@code true} if cursors can be kept open across rollback - * operations, {@code false} if they might get closed. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsOpenCursorsAcrossRollback() throws SQLException; - - /** - * Determines whether keeping statements open across commit operations is - * supported. - * - * @return {@code true} if statements can be kept open, {@code false} if - * they might not. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsOpenStatementsAcrossCommit() throws SQLException; - - /** - * Determines whether keeping statements open across rollback operations is - * supported. - * - * @return {@code true} if statements can be kept open, {@code false} if - * they might not. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsOpenStatementsAcrossRollback() throws SQLException; - - /** - * Determines whether using a column in an {@code ORDER BY} clause that is - * not in the {@code SELECT} statement is supported. - * - * @return {@code true} if it is possible to {@code ORDER} using a column - * not in the {@code SELECT}, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsOrderByUnrelated() throws SQLException; - - /** - * Determines whether outer join operations are supported. - * - * @return {@code true} if outer join operations are supported, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsOuterJoins() throws SQLException; - - /** - * Determines whether positioned {@code DELETE} statements are supported. - * - * @return {@code true} if the database supports positioned {@code DELETE} - * statements. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsPositionedDelete() throws SQLException; - - /** - * Determines whether positioned {@code UPDATE} statements are supported. - * - * @return {@code true} if the database supports positioned {@code UPDATE} - * statements, {@code false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsPositionedUpdate() throws SQLException; - - /** - * Determines whether there is support for a given concurrency style for the - * given {@code ResultSet}. - * - * @param type - * the {@code ResultSet} type, as defined in {@code - * java.sql.ResultSet}: - * <ul> - * <li>{@code ResultSet.TYPE_FORWARD_ONLY}</li> - * <li>{@code ResultSet.TYPE_SCROLL_INSENSITIVE}</li> - * <li>{@code ResultSet.TYPE_SCROLL_SENSITIVE}</li> - * </ul> - * @param concurrency - * a concurrency type, which may be one of {@code - * ResultSet.CONCUR_READ_ONLY} or {@code - * ResultSet.CONCUR_UPDATABLE}. - * @return {@code true} if that concurrency and {@code ResultSet} type - * pairing is supported otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsResultSetConcurrency(int type, int concurrency) - throws SQLException; - - /** - * Determines whether the supplied {@code ResultSet} holdability mode is - * supported. - * - * @param holdability - * as specified in {@code java.sql.ResultSet}: {@code - * ResultSet.HOLD_CURSORS_OVER_COMMIT} or {@code - * ResultSet.CLOSE_CURSORS_AT_COMMIT} - * @return {@code true} if the given ResultSet holdability is supported and - * if it isn't then {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsResultSetHoldability(int holdability) - throws SQLException; - - /** - * Determines whether the supplied {@code ResultSet} type is supported. - * - * @param type - * the {@code ResultSet} type as defined in {@code - * java.sql.ResultSet}: {@code ResultSet.TYPE_FORWARD_ONLY}, - * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} - * @return {@code true} if the {@code ResultSet} type is supported, {@code - * false} otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsResultSetType(int type) throws SQLException; - - /** - * Determines whether savepoints for transactions are supported. - * - * @return {@code true} if savepoints are supported, {@code false} - * otherwise. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSavepoints() throws SQLException; - - /** - * Determines whether a schema name may be used in a data manipulation - * statement. - * - * @return {@code true} if a schema name can be used in a data manipulation, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSchemasInDataManipulation() throws SQLException; - - /** - * Determines whether a schema name may be used in an index definition - * statement. - * - * @return {@code true} if a schema name can be used in an index definition, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSchemasInIndexDefinitions() throws SQLException; - - /** - * Determines whether a database schema name can be used in a privilege - * definition statement. - * - * @return {@code true} if a database schema name may be used in a privilege - * definition, otherwise {@code false} - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException; - - /** - * Determines whether a procedure call statement may be contain in a schema name. - * - * @return {@code true} if a schema name can be used in a procedure call, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSchemasInProcedureCalls() throws SQLException; - - /** - * Determines whether a schema name can be used in a table definition statement. - * - * @return {@code true} if a schema name can be used in a table definition, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSchemasInTableDefinitions() throws SQLException; - - /** - * Determines whether the {@code SELECT FOR UPDATE} statement is supported. - * - * @return {@code true} if {@code SELECT FOR UPDATE} statements are - * supported, otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSelectForUpdate() throws SQLException; - - /** - * Determines whether statement pooling is supported. - * - * @return {@code true} of the database does support statement pooling, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsStatementPooling() throws SQLException; - - /** - * Determines whether stored procedure calls using the stored procedure - * escape syntax is supported. - * - * @return {@code true} if stored procedure calls using the stored procedure - * escape syntax are supported, otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsStoredProcedures() throws SQLException; - - /** - * Determines whether subqueries in comparison expressions are supported. - * - * @return {@code true} if subqueries are supported in comparison - * expressions. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSubqueriesInComparisons() throws SQLException; - - /** - * Determines whether subqueries in {@code EXISTS} expressions are supported. - * - * @return {@code true} if subqueries are supported in {@code EXISTS} - * expressions, otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSubqueriesInExists() throws SQLException; - - /** - * Determines whether subqueries in {@code IN} statements are supported. - * - * @return {@code true} if subqueries are supported in {@code IN} statements, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSubqueriesInIns() throws SQLException; - - /** - * Determines whether subqueries in quantified expressions are supported. - * - * @return {@code true} if subqueries are supported, otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsSubqueriesInQuantifieds() throws SQLException; - - /** - * Determines whether the database has table correlation names support. - * - * @return {@code true} if table correlation names are supported, otherwise - * {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsTableCorrelationNames() throws SQLException; - - /** - * Determines whether a specified transaction isolation level is supported. - * - * @param level - * the transaction isolation level, as specified in {@code - * java.sql.Connection}: {@code TRANSACTION_NONE}, {@code - * TRANSACTION_READ_COMMITTED}, {@code - * TRANSACTION_READ_UNCOMMITTED}, {@code - * TRANSACTION_REPEATABLE_READ}, {@code TRANSACTION_SERIALIZABLE} - * @return {@code true} if the specific isolation level is supported, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsTransactionIsolationLevel(int level) - throws SQLException; - - /** - * Determines whether transactions are supported. - * <p> - * If transactions are not supported, then the {@code commit} method does - * nothing and the transaction isolation level is always {@code - * TRANSACTION_NONE}. - * </p> - * - * @return {@code true} if transactions are supported, otherwise {@code - * false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsTransactions() throws SQLException; - - /** - * Determines whether the {@code SQL UNION} operation is supported. - * - * @return {@code true} of the database does support {@code UNION}, otherwise - * {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsUnion() throws SQLException; - - /** - * Determines whether the {@code SQL UNION ALL} operation is supported. - * - * @return {@code true} if the database does support {@code UNION ALL}, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean supportsUnionAll() throws SQLException; - - /** - * Determines whether the method {@code ResultSet.rowUpdated} can detect a visible - * row update for the specified {@code ResultSet} type. - * - * @param type - * {@code ResultSet} type: {@code ResultSet.TYPE_FORWARD_ONLY}, - * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code - * ResultSet.TYPE_SCROLL_SENSITIVE} - * @return {@code true} detecting changes is possible, otherwise {@code - * false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean updatesAreDetected(int type) throws SQLException; - - /** - * Determines whether this database uses a file for each table. - * - * @return {@code true} if the database uses one file for each table, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean usesLocalFilePerTable() throws SQLException; - - /** - * Determines whether this database uses a local file to store tables. - * - * @return {@code true} if the database stores tables in a local file, - * otherwise {@code false}. - * @throws SQLException - * a database error occurred. - * @since Android 1.0 - */ - public boolean usesLocalFiles() throws SQLException; -} diff --git a/sql/src/main/java/java/sql/Date.java b/sql/src/main/java/java/sql/Date.java deleted file mode 100644 index e506a43..0000000 --- a/sql/src/main/java/java/sql/Date.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.text.SimpleDateFormat; - -/** - * A class which can consume and produce dates in SQL {@code Date} format. - * <p> - * Dates are represented in SQL as {@code yyyy-mm-dd}. Note that this date - * format only deals with year, month and day values. There are no values for - * hours, minutes, seconds. - * </p> - * This is unlike the familiar {@code java.util.Date} object, which also includes - * values for hours, minutes, seconds, and milliseconds. - * <p> - * Time points are handled as millisecond values - milliseconds since the Epoch, - * January 1st 1970, 00:00:00.000 GMT. Time values passed to the {@code - * java.sql.Date} class are "normalized" to the time 00:00:00.000 GMT on the - * date implied by the time value. - * </p> - * - * @since Android 1.0 - */ -public class Date extends java.util.Date { - - private static final long serialVersionUID = 1511598038487230103L; - - /** - * Constructs a {@code Date} object corresponding to the supplied year, - * month and day. - * - * @deprecated Please use the constructor {@link #Date(long)}. - * @param theYear - * the year, specified as the year minus 1900. Must be in the - * range {@code [0,8099]}. - * @param theMonth - * the month, specified as a number with 0 = January. Must be in - * the range {@code [0,11]}. - * @param theDay - * the day in the month. Must be in the range {@code [1,31]}. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - public Date(int theYear, int theMonth, int theDay) { - super(theYear, theMonth, theDay); - } - - /** - * Creates a date which corresponds to the day determined by the supplied - * milliseconds time value {@code theDate}. - * - * @param theDate - * a time value in milliseconds since the epoch - January 1 1970 - * 00:00:00 GMT. The time value (hours, minutes, seconds, - * milliseconds) stored in the {@code Date} object is adjusted to - * correspond to 00:00:00 GMT on the day determined by the supplied - * time value. - * @since Android 1.0 - */ - public Date(long theDate) { - super(normalizeTime(theDate)); - } - - /** - * @deprecated This method is deprecated and must not be used. SQL {@code - * Date} values do not have an hours component. - * @return does not return anything. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public int getHours() { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. SQL {@code - * Date} values do not have a minutes component. - * @return does not return anything. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public int getMinutes() { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. SQL {@code - * Date} values do not have a seconds component. - * @return does not return anything. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public int getSeconds() { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. SQL {@code - * Date} values do not have an hours component. - * @param theHours - * the number of hours to set. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public void setHours(int theHours) { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. SQL {@code - * Date} values do not have a minutes component. - * @param theMinutes - * the number of minutes to set. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public void setMinutes(int theMinutes) { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. SQL {@code - * Date} values do not have a seconds component. - * @param theSeconds - * the number of seconds to set. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public void setSeconds(int theSeconds) { - throw new IllegalArgumentException(); - } - - /** - * Sets this date to a date supplied as a milliseconds value. The date is - * set based on the supplied time value and rounded to zero GMT for that day. - * - * @param theTime - * the time in milliseconds since the Epoch. - * @since Android 1.0 - */ - @Override - public void setTime(long theTime) { - /* - * Store the Date based on the supplied time after removing any time - * elements finer than the day based on zero GMT - */ - super.setTime(normalizeTime(theTime)); - } - - /** - * Produces a string representation of the date in SQL format - * - * @return a string representation of the date in SQL format - {@code - * "yyyy-mm-dd"}. - * @since Android 1.0 - */ - @Override - public String toString() { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$ - return dateFormat.format(this); - } - - /** - * Creates a {@code Date} from a string representation of a date in SQL - * format. - * - * @param dateString - * the string representation of a date in SQL format - " {@code - * yyyy-mm-dd}". - * @return the {@code Date} object. - * @throws IllegalArgumentException - * if the format of the supplied string does not match the SQL - * format. - * @since Android 1.0 - */ - public static Date valueOf(String dateString) { - if (dateString == null) { - throw new IllegalArgumentException(); - } - int firstIndex = dateString.indexOf('-'); - int secondIndex = dateString.indexOf('-', firstIndex + 1); - // secondIndex == -1 means none or only one separator '-' has been - // found. - // The string is separated into three parts by two separator characters, - // if the first or the third part is null string, we should throw - // IllegalArgumentException to follow RI - if (secondIndex == -1 || firstIndex == 0 - || secondIndex + 1 == dateString.length()) { - throw new IllegalArgumentException(); - } - // parse each part of the string - int year = Integer.parseInt(dateString.substring(0, firstIndex)); - int month = Integer.parseInt(dateString.substring(firstIndex + 1, - secondIndex)); - int day = Integer.parseInt(dateString.substring(secondIndex + 1, - dateString.length())); - return new Date(year - 1900, month - 1, day); - } - - /* - * Private method which normalizes a Time value, removing all low - * significance digits corresponding to milliseconds, seconds, minutes and - * hours, so that the returned Time value corresponds to 00:00:00 GMT on a - * particular day. - */ - private static long normalizeTime(long theTime) { - return theTime; - } -} diff --git a/sql/src/main/java/java/sql/Driver.java b/sql/src/main/java/java/sql/Driver.java deleted file mode 100644 index c0499cb..0000000 --- a/sql/src/main/java/java/sql/Driver.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.util.Properties; - -/** - * An interface to a JDBC driver. - * <p> - * The JDBC driver uses URLs to specify the location of specific data. URL - * format typically takes the form " {@code xxxx:yyyy:SpecificData}", where " - * {@code xxxx:yyyy}" is referred to as the <i>subprotocol</i> and is normally - * the same for all of a particular driver. " {@code SpecificData}" is a string - * which identifies the particular data source that the driver should use. - * </p> - * <p> - * A driver needs to be registered with a {@link DriverManager}. It is - * registered and instantiated by calling {@code Class.forName("DriverURL")} - * with the URL string as argument. - * </p> - * @see DriverManager - * - * @since Android 1.0 - */ -public interface Driver { - - /** - * Returns whether the driver thinks that it can open a connection to the - * given URL. - * - * @param url - * the URL to connect to. - * @return {@code true} if the driver thinks that is can open a connection - * to the supplied URL, {@code false} otherwise. Typically, the - * driver will respond {@code true} if it thinks that it can handle - * the subprotocol specified by the driver. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public boolean acceptsURL(String url) throws SQLException; - - /** - * Attempts to make a database connection to a data source specified by a - * supplied URL. - * - * @param url - * the URL to connect. - * @param info - * some properties that should be used in establishing the - * connection. The properties consist of name/value pairs of - * strings. Normally, a connection to a database requires at - * least two properties - for {@code "user"} and {@code - * "password"} in order to pass authentication to the database. - * @return the connection to the database. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Connection connect(String url, Properties info) throws SQLException; - - /** - * Gets the driver's major version number. - * - * @return the major version number of the driver - typically starts at 1. - * @since Android 1.0 - */ - public int getMajorVersion(); - - /** - * Gets the driver's minor version number. - * - * @return the minor version number of the driver - typically starts at 0. - * @since Android 1.0 - */ - public int getMinorVersion(); - - /** - * Gets information about possible properties for this driver. - * <p> - * This method is intended to provide a listing of possible properties that - * the client of the driver must supply in order to establish a connection - * to a database. Note that the returned array of properties may change - * depending on the supplied list of property values. - * </p> - * - * @param url - * the URL of the database. An application may call this method - * iteratively as the property list is built up - for example, - * when displaying a dialog to an end-user as part of the - * database login process. - * @param info - * a set of tag/value pairs giving data that a user may be - * prompted to provide in order to connect to the database. - * @return an array of {@code DriverPropertyInfo} records which provide - * details on which additional properties are required (in addition - * to those supplied in the {@code info} parameter) in order to - * connect to the database. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) - throws SQLException; - - /** - * Reports whether this driver is a genuine JDBC CompliantTM driver. The - * driver may only return {@code true} if it passes all the JDBC compliance - * tests. - * <p> - * A driver may not be fully compliant if the underlying database has - * limited functionality. - * </p> - * - * @return {@code true} if the driver is fully JDBC compliant, {@code false} - * otherwise. - * @since Android 1.0 - */ - public boolean jdbcCompliant(); - -} diff --git a/sql/src/main/java/java/sql/DriverManager.java b/sql/src/main/java/java/sql/DriverManager.java deleted file mode 100644 index afcf2f5..0000000 --- a/sql/src/main/java/java/sql/DriverManager.java +++ /dev/null @@ -1,463 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.util.Properties; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Set; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.util.HashSet; -import java.util.Vector; -import org.apache.harmony.sql.internal.nls.Messages; -// BEGIN android-changed -import dalvik.system.VMStack; -// END android-changed - -/** - * Provides facilities for managing JDBC drivers. - * <p> - * The {@code DriverManager} class loads JDBC drivers during its initialization, - * from the list of drivers referenced by the system property {@code - * "jdbc.drivers"}. - * </p> - * - * @since Android 1.0 - */ -public class DriverManager { - - /* - * Facilities for logging. The Print Stream is deprecated but is maintained - * here for compatibility. - */ - private static PrintStream thePrintStream; - - private static PrintWriter thePrintWriter; - - // Login timeout value - by default set to 0 -> "wait forever" - private static int loginTimeout = 0; - - /* - * Set to hold Registered Drivers - initial capacity 10 drivers (will expand - * automatically if necessary. - */ - private static final Set<Driver> theDriverSet = new HashSet<Driver>(10); - - // Permission for setting log - private static final SQLPermission logPermission = new SQLPermission("setLog"); //$NON-NLS-1$ - - /* - * Load drivers on initialization - */ - static { - loadInitialDrivers(); - } - - /* - * Loads the set of JDBC drivers defined by the Property "jdbc.drivers" if - * it is defined. - */ - private static void loadInitialDrivers() { - String theDriverList = System.getProperty("jdbc.drivers", null); //$NON-NLS-1$ - if (theDriverList == null) { - return; - } - - /* - * Get the names of the drivers as an array of Strings from the system - * property by splitting the property at the separator character ':' - */ - String[] theDriverNames = theDriverList.split(":"); //$NON-NLS-1$ - - for (String element : theDriverNames) { - try { - // Load the driver class - Class - .forName(element, true, ClassLoader - .getSystemClassLoader()); - } catch (Throwable t) { - // Ignored - } - } - } - - /* - * A private constructor to prevent allocation - */ - private DriverManager() { - super(); - } - - /** - * Removes a driver from the {@code DriverManager}'s registered driver list. - * This will only succeed when the caller's class loader loaded the driver - * that is to be removed. If the driver was loaded by a different class - * loader, the removal of the driver fails silently. - * <p> - * If the removal succeeds, the {@code DriverManager} will not use this - * driver in the future when asked to get a {@code Connection}. - * </p> - * - * @param driver - * the JDBC driver to remove. - * @throws SQLException - * if there is a problem interfering with accessing the - * database. - * @since Android 1.0 - */ - public static void deregisterDriver(Driver driver) throws SQLException { - if (driver == null) { - return; - } - // BEGIN android-changed - ClassLoader callerClassLoader = VMStack.getCallingClassLoader(); - // END android-changed - - if (!DriverManager.isClassFromClassLoader(driver, callerClassLoader)) { - // sql.1=DriverManager: calling class not authorized to deregister JDBC driver - throw new SecurityException(Messages.getString("sql.1")); //$NON-NLS-1$ - } // end if - synchronized (theDriverSet) { - theDriverSet.remove(driver); - } - } - - /** - * Attempts to establish a connection to the given database URL. - * - * @param url - * a URL string representing the database target to connect with. - * @return a {@code Connection} to the database identified by the URL. - * {@code null} if no connection can be established. - * @throws SQLException - * if there is an error while attempting to connect to the - * database identified by the URL. - * @since Android 1.0 - */ - public static Connection getConnection(String url) throws SQLException { - return getConnection(url, new Properties()); - } - - /** - * Attempts to establish a connection to the given database URL. - * - * @param url - * a URL string representing the database target to connect with - * @param info - * a set of properties to use as arguments to set up the - * connection. Properties are arbitrary string/value pairs. - * Normally, at least the properties {@code "user"} and {@code - * "password"} should be passed, with appropriate settings for - * the user ID and its corresponding password to get access to - * the corresponding database. - * @return a {@code Connection} to the database identified by the URL. - * {@code null} if no connection can be established. - * @throws SQLException - * if there is an error while attempting to connect to the - * database identified by the URL. - * @since Android 1.0 - */ - public static Connection getConnection(String url, Properties info) - throws SQLException { - // 08 - connection exception - // 001 - SQL-client unable to establish SQL-connection - String sqlState = "08001"; //$NON-NLS-1$ - if (url == null) { - // sql.5=The url cannot be null - throw new SQLException(Messages.getString("sql.5"), sqlState); //$NON-NLS-1$ - } - synchronized (theDriverSet) { - /* - * Loop over the drivers in the DriverSet checking to see if one can - * open a connection to the supplied URL - return the first - * connection which is returned - */ - for (Driver theDriver : theDriverSet) { - Connection theConnection = theDriver.connect(url, info); - if (theConnection != null) { - return theConnection; - } - } - } - // If we get here, none of the drivers are able to resolve the URL - // sql.6=No suitable driver - throw new SQLException(Messages.getString("sql.6"), sqlState); //$NON-NLS-1$ - } - - /** - * Attempts to establish a connection to the given database URL. - * - * @param url - * a URL string representing the database target to connect with. - * @param user - * a user ID used to login to the database. - * @param password - * a password for the user ID to login to the database. - * @return a {@code Connection} to the database identified by the URL. - * {@code null} if no connection can be established. - * @throws SQLException - * if there is an error while attempting to connect to the - * database identified by the URL. - * @since Android 1.0 - */ - public static Connection getConnection(String url, String user, - String password) throws SQLException { - Properties theProperties = new Properties(); - if(null != user){ - theProperties.setProperty("user", user); //$NON-NLS-1$ - } - if(null != password){ - theProperties.setProperty("password", password); //$NON-NLS-1$ - } - return getConnection(url, theProperties); - } - - /** - * Tries to find a driver that can interpret the supplied URL. - * - * @param url - * the URL of a database. - * @return a {@code Driver} that matches the provided URL. {@code null} if - * no {@code Driver} understands the URL - * @throws SQLException - * if there is any kind of problem accessing the database. - */ - public static Driver getDriver(String url) throws SQLException { - // BEGIN android-changed - ClassLoader callerClassLoader = VMStack.getCallingClassLoader(); - // END android-changed - - synchronized (theDriverSet) { - /* - * Loop over the drivers in the DriverSet checking to see if one - * does understand the supplied URL - return the first driver which - * does understand the URL - */ - Iterator<Driver> theIterator = theDriverSet.iterator(); - while (theIterator.hasNext()) { - Driver theDriver = theIterator.next(); - if (theDriver.acceptsURL(url) - && DriverManager.isClassFromClassLoader(theDriver, - callerClassLoader)) { - return theDriver; - } - } - } - // If no drivers understand the URL, throw an SQLException - // sql.6=No suitable driver - //SQLState: 08 - connection exception - //001 - SQL-client unable to establish SQL-connection - throw new SQLException(Messages.getString("sql.6"), "08001"); //$NON-NLS-1$ //$NON-NLS-2$ - } - - /** - * Returns an {@code Enumeration} that contains all of the loaded JDBC - * drivers that the current caller can access. - * - * @return An {@code Enumeration} containing all the currently loaded JDBC - * {@code Drivers}. - * @since Android 1.0 - */ - public static Enumeration<Driver> getDrivers() { - // BEGIN android-changed - ClassLoader callerClassLoader = VMStack.getCallingClassLoader(); - // END android-changed - /* - * Synchronize to avoid clashes with additions and removals of drivers - * in the DriverSet - */ - synchronized (theDriverSet) { - /* - * Create the Enumeration by building a Vector from the elements of - * the DriverSet - */ - Vector<Driver> theVector = new Vector<Driver>(); - Iterator<Driver> theIterator = theDriverSet.iterator(); - while (theIterator.hasNext()) { - Driver theDriver = theIterator.next(); - if (DriverManager.isClassFromClassLoader(theDriver, - callerClassLoader)) { - theVector.add(theDriver); - } - } - return theVector.elements(); - } - } - - /** - * Returns the login timeout when connecting to a database in seconds. - * - * @return the login timeout in seconds. - * @since Android 1.0 - */ - public static int getLoginTimeout() { - return loginTimeout; - } - - /** - * Gets the log {@code PrintStream} used by the {@code DriverManager} and - * all the JDBC Drivers. - * - * @deprecated use {@link #getLogWriter()} instead. - * @return the {@code PrintStream} used for logging activities. - * @since Android 1.0 - */ - @Deprecated - public static PrintStream getLogStream() { - return thePrintStream; - } - - /** - * Retrieves the log writer. - * - * @return A {@code PrintWriter} object used as the log writer. {@code null} - * if no log writer is set. - * @since Android 1.0 - */ - public static PrintWriter getLogWriter() { - return thePrintWriter; - } - - /** - * Prints a message to the current JDBC log stream. This is either the - * {@code PrintWriter} or (deprecated) the {@code PrintStream}, if set. - * - * @param message - * the message to print to the JDBC log stream. - * @since Android 1.0 - */ - public static void println(String message) { - if (thePrintWriter != null) { - thePrintWriter.println(message); - thePrintWriter.flush(); - } else if (thePrintStream != null) { - thePrintStream.println(message); - thePrintStream.flush(); - } - /* - * If neither the PrintWriter not the PrintStream are set, then silently - * do nothing the message is not recorded and no exception is generated. - */ - return; - } - - /** - * Registers a given JDBC driver with the {@code DriverManager}. - * <p> - * A newly loaded JDBC driver class should register itself with the - * {@code DriverManager} by calling this method. - * </p> - * - * @param driver - * the {@code Driver} to register with the {@code DriverManager}. - * @throws SQLException - * if a database access error occurs. - */ - public static void registerDriver(Driver driver) throws SQLException { - if (driver == null) { - throw new NullPointerException(); - } - synchronized (theDriverSet) { - theDriverSet.add(driver); - } - } - - /** - * Sets the login timeout when connecting to a database in seconds. - * - * @param seconds - * seconds until timeout. 0 indicates wait forever. - * @since Android 1.0 - */ - public static void setLoginTimeout(int seconds) { - loginTimeout = seconds; - return; - } - - /** - * Sets the print stream to use for logging data from the {@code - * DriverManager} and the JDBC drivers. - * - * @deprecated Use {@link #setLogWriter} instead. - * @param out - * the {@code PrintStream} to use for logging. - * @since Android 1.0 - */ - @Deprecated - public static void setLogStream(PrintStream out) { - checkLogSecurity(); - thePrintStream = out; - } - - /** - * Sets the {@code PrintWriter} that is used by all loaded drivers, and also - * the {@code DriverManager}. - * - * @param out - * the {@code PrintWriter} to be used. - * @since Android 1.0 - */ - public static void setLogWriter(PrintWriter out) { - checkLogSecurity(); - thePrintWriter = out; - } - - /* - * Method which checks to see if setting a logging stream is allowed by the - * Security manager - */ - private static void checkLogSecurity() { - SecurityManager securityManager = System.getSecurityManager(); - if (securityManager != null) { - // Throws a SecurityException if setting the log is not permitted - securityManager.checkPermission(logPermission); - } - } - - /** - * Determines whether the supplied object was loaded by the given {@code ClassLoader}. - * - * @param theObject - * the object to check. - * @param theClassLoader - * the {@code ClassLoader}. - * @return {@code true} if the Object does belong to the {@code ClassLoader} - * , {@code false} otherwise - */ - private static boolean isClassFromClassLoader(Object theObject, - ClassLoader theClassLoader) { - - if ((theObject == null) || (theClassLoader == null)) { - return false; - } - - Class<?> objectClass = theObject.getClass(); - - try { - Class<?> checkClass = Class.forName(objectClass.getName(), true, - theClassLoader); - if (checkClass == objectClass) { - return true; - } - } catch (Throwable t) { - // Empty - } - return false; - } -} diff --git a/sql/src/main/java/java/sql/DriverPropertyInfo.java b/sql/src/main/java/java/sql/DriverPropertyInfo.java deleted file mode 100644 index 3875abb..0000000 --- a/sql/src/main/java/java/sql/DriverPropertyInfo.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -/** - * A class holding information about driver properties of a database connection. - * This class is returned by the - * {@link Driver#getPropertyInfo(String, java.util.Properties)} method and - * allows for the advanced connection handling. - * - * @since Android 1.0 - */ -public class DriverPropertyInfo { - - /** - * If the value member can be chosen from a set of possible values, they are - * contained here. Otherwise choices is {@code null}. - * - * @since Android 1.0 - */ - public String[] choices; - - /** - * A description of the property. May be {@code null}. - * - * @since Android 1.0 - */ - public String description; - - /** - * The name of the property. - * - * @since Android 1.0 - */ - public String name; - - /** - * {@code True} when the value member must be provided during {@code - * Driver.connect}. {@code False} otherwise. - * - * @since Android 1.0 - */ - public boolean required; - - /** - * The current value associated with this property. It is depending on the - * data gathered by the {@code getPropertyInfo} method, the general Java - * environment and the driver's default values. - * - * @since Android 1.0 - */ - public String value; - - /** - * Creates a {@code DriverPropertyInfo} instance with the supplied name and - * value. Other class members take their default values. - * - * @param name - * The property name. - * @param value - * The property value. - * @since Android 1.0 - */ - public DriverPropertyInfo(String name, String value) { - this.name = name; - this.value = value; - this.choices = null; - this.description = null; - this.required = false; - } -} diff --git a/sql/src/main/java/java/sql/ParameterMetaData.java b/sql/src/main/java/java/sql/ParameterMetaData.java deleted file mode 100644 index 94901ae..0000000 --- a/sql/src/main/java/java/sql/ParameterMetaData.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -/** - * An interface used to get information about the types and properties of - * parameters in a {@code PreparedStatement}. - * - * @since Android 1.0 - */ -public interface ParameterMetaData { - - /** - * Indicates that the parameter mode is {@code IN}. - * - * @since Android 1.0 - */ - public static final int parameterModeIn = 1; - - /** - * Indicates that the parameter mode is {@code INOUT}. - * - * @since Android 1.0 - */ - public static final int parameterModeInOut = 2; - - /** - * Indicates that the parameter mode is {@code OUT}. - * - * @since Android 1.0 - */ - public static final int parameterModeOut = 4; - - /** - * Indicates that the parameter mode is not known. - * - * @since Android 1.0 - */ - public static final int parameterModeUnknown = 0; - - /** - * Indicates that a parameter is not permitted to be {@code NULL}. - * - * @since Android 1.0 - */ - public static final int parameterNoNulls = 0; - - /** - * Indicates that a parameter is permitted to be {@code NULL}. - * - * @since Android 1.0 - */ - public static final int parameterNullable = 1; - - /** - * Indicates that whether a parameter is allowed to be {@code null} or not - * is not known. - * - * @since Android 1.0 - */ - public static final int parameterNullableUnknown = 2; - - /** - * Gets the fully-qualified name of the Java class which should be passed as - * a parameter to the method {@code PreparedStatement.setObject}. - * - * @param paramIndex - * the index number of the parameter, where the first parameter - * has index 1. - * @return the fully qualified Java class name of the parameter with the - * specified index. This class name is used for custom mapping - * between SQL types and Java objects. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public String getParameterClassName(int paramIndex) throws SQLException; - - /** - * Gets the number of parameters in the {@code PreparedStatement} for which - * this {@code ParameterMetaData} contains information. - * - * @return the number of parameters. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getParameterCount() throws SQLException; - - /** - * Gets the mode of the specified parameter. Can be one of: - * <ul> - * <li>ParameterMetaData.parameterModeIn</li> - * <li>ParameterMetaData.parameterModeOut</li> - * <li>ParameterMetaData.parameterModeInOut</li> - * <li>ParameterMetaData.parameterModeUnknown</li> - * </ul> - * - * @param paramIndex - * the index number of the parameter, where the first parameter - * has index 1. - * @return the parameter's mode. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getParameterMode(int paramIndex) throws SQLException; - - /** - * Gets the SQL type of a specified parameter. - * - * @param paramIndex - * the index number of the parameter, where the first parameter - * has index 1. - * @return the SQL type of the parameter as defined in {@code - * java.sql.Types}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getParameterType(int paramIndex) throws SQLException; - - /** - * Gets the database-specific type name of a specified parameter. - * - * @param paramIndex - * the index number of the parameter, where the first parameter - * has index 1. - * @return the type name for the parameter as used by the database. A - * fully-qualified name is returned if the parameter is a <i>User - * Defined Type</i> (UDT). - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public String getParameterTypeName(int paramIndex) throws SQLException; - - /** - * Gets the number of decimal digits for a specified parameter. - * - * @param paramIndex - * the index number of the parameter, where the first parameter - * has index 1. - * @return the number of decimal digits ("the precision") for the parameter. - * {@code 0} if the parameter is not a numeric type. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getPrecision(int paramIndex) throws SQLException; - - /** - * Gets the number of digits after the decimal point for a specified - * parameter. - * - * @param paramIndex - * the index number of the parameter, where the first parameter - * has index 1. - * @return the number of digits after the decimal point ("the scale") for - * the parameter. {@code 0} if the parameter is not a numeric type. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getScale(int paramIndex) throws SQLException; - - /** - * Gets whether {@code null} values are allowed for the specified parameter. - * The returned value is one of: - * <ul> - * <li>ParameterMetaData.parameterNoNulls</li> - * <li>ParameterMetaData.parameterNullable</li> - * <li>ParameterMetaData.parameterNullableUnknown</li> - * </ul> - * - * @param paramIndex - * the index number of the parameter, where the first parameter - * has index 1. - * @return the int code indicating the nullability of the parameter. - * @throws SQLException - * if a database error is encountered. - * @since Android 1.0 - */ - public int isNullable(int paramIndex) throws SQLException; - - /** - * Gets whether values for the specified parameter can be signed numbers. - * - * @param paramIndex - * the index number of the parameter, where the first parameter - * has index 1. - * @return {@code true} if values can be signed numbers for this parameter, - * {@code false} otherwise. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean isSigned(int paramIndex) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/PreparedStatement.java b/sql/src/main/java/java/sql/PreparedStatement.java deleted file mode 100644 index ab81871..0000000 --- a/sql/src/main/java/java/sql/PreparedStatement.java +++ /dev/null @@ -1,742 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.util.Calendar; -import java.net.URL; -import java.io.InputStream; -import java.io.Reader; -import java.math.BigDecimal; - -/** - * An interface for a precompiled SQL Statement. - * <p> - * An SQL Statement is put into a {@code PreparedStatement} and is precompiled - * so that it can be executed efficiently multiple times. - * </p> - * <p> - * Setter methods are supplied in the {@code PreparedStatement} interface for - * the setting of {@code IN} parameters for the statement. The setter method - * used for each {@code IN} parameter must match the parameter's type. - * </p> - * - * @since Android 1.0 - */ -public interface PreparedStatement extends Statement { - - /** - * Add a set of parameters to the {@code PreparedStatement}'s command batch. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void addBatch() throws SQLException; - - /** - * Clear the current parameter values. - * <p> - * Typically, parameter values are retained for multiple executions of the - * {@code Statement}. Setting a parameter value replaces the previous value. This - * method clears the values for all parameters, releasing all resources used - * by those parameters. - * </p> - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void clearParameters() throws SQLException; - - /** - * Executes the SQL statement in this {@code PreparedStatement}. - * <p> - * A {@code PreparedStatement} may return multiple results. The execute - * method executes the {@code PreparedStatement} and returns a flag - * indicating the kind of result produced by the action. The methods - * {@code getResultSet} or {@code getUpdateCount} are used to retrieve - * the first result, and the second and subsequent results are - * retrieved with {@code getMoreResults}. - * </p> - * - * @return {@code true} if the result of the execution is a {@code - * ResultSet}, {@code false} if there is no result or if the result - * is an update count. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean execute() throws SQLException; - - /** - * Executes the SQL query in the {@code PreparedStatement} and returns the - * {@code ResultSet} generated by the query. - * - * @return the {@code ResultSet} generated by the query, never {@code null}. - * @throws SQLException - * if a database error happens or if the SQL statement does not - * produce a {@code ResultSet}. - * @since Android 1.0 - */ - public ResultSet executeQuery() throws SQLException; - - /** - * Invokes the SQL command contained within the prepared statement. This - * must be {@code INSERT}, {@code UPDATE}, {@code DELETE}, or a command that - * returns nothing. - * - * @return the number of affected rows for {@code INSERT}, {@code UPDATE} or {@code - * DELETE} statements, {@code 0} for statements that return nothing. - * @throws SQLException - * if a database error happens or if the SQL statement returns a - * {@code ResultSet}. - * @since Android 1.0 - */ - public int executeUpdate() throws SQLException; - - /** - * Returns a {@code ResultSetMetaData} describing the {@code - * ResultSet} that would be produced by execution of the {@code PreparedStatement}. - * <p> - * It is possible to know the metadata for the {@code ResultSet} without - * executing the {@code PreparedStatement}, because the {@code - * PreparedStatement} is precompiled. As a result the metadata can be - * queried ahead of time without actually executing the statement. - * </p> - * - * @return a {@code ResultSetMetaData} object with the information about the - * columns of the {@code ResultSet}, if the driver can return a - * {@code ResultSetMetaData}. {@code null} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public ResultSetMetaData getMetaData() throws SQLException; - - /** - * Gets information about the parameters of the {@code PreparedStatement}. - * - * @return a {@code ParameterMetaData} object which holds information about - * the number, type, and properties of the parameters of this {@code - * PreparedStatement}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public ParameterMetaData getParameterMetaData() throws SQLException; - - /** - * Sets the value of a specified parameter to the supplied {@code Array}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theArray - * a {@code java.sql.Array} giving the new value of the parameter at {@code - * parameterIndex}. - * @throws SQLException - * if a database error happens. - * @see Array - * @since Android 1.0 - */ - public void setArray(int parameterIndex, Array theArray) - throws SQLException; - - /** - * Sets the value of a specified parameter to the content of a supplied - * {@code InputStream}, which has a specified number of bytes. - * <p> - * This is a good method for setting an SQL {@code LONVARCHAR} parameter - * where the length of the data is large. Data is read from the {@code - * InputStream} until end-of-file is reached or the specified number of - * bytes is copied. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theInputStream - * the ASCII {@code InputStream} carrying the data to which the - * parameter at {@code parameterIndex} is set. - * @param length - * the number of bytes in the {@code InputStream} to copy to the - * parameter. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setAsciiStream(int parameterIndex, InputStream theInputStream, - int length) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.math.BigDecimal} value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theBigDecimal - * the value to which the parameter at {@code parameterIndex} is - * set. - * @throws SQLException - * if a database error happens. - * @see java.math.BigDecimal - * @since Android 1.0 - */ - public void setBigDecimal(int parameterIndex, BigDecimal theBigDecimal) - throws SQLException; - - /** - * Sets the value of a specified parameter to the content of a supplied - * binary {@code InputStream}, which has a specified number of bytes. - * <p> - * Use this method when a large amount of data needs to be set into a - * {@code LONGVARBINARY} parameter. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theInputStream - * the binary {@code InputStream} carrying the data to update the - * parameter. - * @param length - * the number of bytes in the {@code InputStream} to copy to the - * parameter. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setBinaryStream(int parameterIndex, InputStream theInputStream, - int length) throws SQLException; - - /** - * Sets the value of a specified parameter to the given {@code Blob} object. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theBlob - * the {@code java.sql.Blob} to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - * @see Blob - */ - public void setBlob(int parameterIndex, Blob theBlob) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code boolean} - * value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theBoolean - * the boolean value to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setBoolean(int parameterIndex, boolean theBoolean) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code byte} value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theByte - * the byte value to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setByte(int parameterIndex, byte theByte) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied array of bytes. The - * array is mapped to a {@code VARBINARY} or {@code LONGVARBINARY} in the - * database. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theBytes - * the array of bytes to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setBytes(int parameterIndex, byte[] theBytes) - throws SQLException; - - /** - * Sets the value of a specified parameter to the character content of a - * {@code Reader} object, with the specified length of character data. - * <p> - * Data is read from the {@code - * Reader} until end-of-file is reached or the specified number of - * characters are copied. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1 - * @param reader - * the {@code java.io.Reader} containing the character data. - * @param length - * the number of characters to be read. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setCharacterStream(int parameterIndex, Reader reader, int length) - throws SQLException; - - /** - * Sets the value of a specified parameter to the given {@code Clob} object. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theClob - * a {@code java.sql.Clob} holding the data to which the - * parameter at {@code parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setClob(int parameterIndex, Clob theClob) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Date} value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theDate - * a {@code java.sql.Date} to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setDate(int parameterIndex, Date theDate) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Date} value, using a supplied {@code Calendar} to map the Date. - * The {@code Calendar} allows the application to control the timezone used - * to compute the SQL {@code DATE} in the database - without the supplied - * {@code Calendar}, the driver uses the default timezone of the Java - * virtual machine. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theDate - * a {@code java.sql.Date} to which the parameter at {@code - * parameterIndex} is set. - * @param cal - * a {@code Calendar} to use to construct the SQL {@code DATE} - * value. - * @throws SQLException - * if a database error happens. - * @see Date - * @see java.util.Calendar - * @since Android 1.0 - */ - public void setDate(int parameterIndex, Date theDate, Calendar cal) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code double} - * value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theDouble - * the {@code double} value to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setDouble(int parameterIndex, double theDouble) - throws SQLException; - - /** - * Sets the value of a specified parameter to to a supplied {@code float} - * value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theFloat - * the {@code float} value to update the parameter. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setFloat(int parameterIndex, float theFloat) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code int} value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theInt - * the {@code int} value to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setInt(int parameterIndex, int theInt) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code long} value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theLong - * the {@code long} value to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setLong(int parameterIndex, long theLong) throws SQLException; - - /** - * Sets the value of a specified parameter to SQL {@code NULL}. Don't use - * this version of {@code setNull} for <i>User Defined Types</i> (UDT) or - * for REF type parameters. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param sqlType - * the SQL type of the parameter, as defined in {@code - * java.sql.Types}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setNull(int parameterIndex, int sqlType) throws SQLException; - - /** - * Sets the value of a specified parameter to SQL {@code NULL}. This version - * of {@code setNull} should be used for <i>User Defined Types</i> (UDTs) - * and also REF types. UDTs can be {@code STRUCT}, {@code DISTINCT}, {@code - * JAVA_OBJECT} and named array types. - * <p> - * Applications must provide the SQL type code and also a fully qualified - * SQL type name when supplying a {@code NULL} UDT or REF. For a UDT, the - * type name is the type name of the parameter itself, but for a REF - * parameter the type name is the type name of the referenced type. - * </p> - * - * @param paramIndex - * the parameter number index, where the first parameter has - * index 1. - * @param sqlType - * the SQL type of the parameter, as defined in {@code - * java.sql.Types}. - * @param typeName - * the fully qualified name of a UDT or REF type - ignored if the - * parameter is not a UDT. - * @throws SQLException - * if a database error happens. - * @see Types - * @since Android 1.0 - */ - public void setNull(int paramIndex, int sqlType, String typeName) - throws SQLException; - - /** - * Sets the value of a specified parameter using a supplied object. - * <p> - * There is a standard mapping from Java types to SQL types, defined in the - * JDBC specification. The passed object is then transformed into the - * appropriate SQL type, and then transferred to the database. {@code - * setObject} can be used to pass abstract data types unique to the - * database, by using a JDBC driver specific Java type. If the object's - * class implements the interface {@code SQLData}, the JDBC driver calls - * {@code SQLData.writeSQL} to write it to the SQL data stream. If the - * object's class implements {@code Ref}, {@code Blob}, {@code Clob}, - * {@code Struct}, or {@code Array}, the driver passes it to the database as - * a value of the corresponding SQL type. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theObject - * the object containing the value to which the parameter at - * {@code parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setObject(int parameterIndex, Object theObject) - throws SQLException; - - /** - * Sets the value of a specified parameter using a supplied object. - * <p> - * The object is converted to the given {@code targetSqlType} before it is - * sent to the database. If the object has a custom mapping (its class - * implements the interface {@code SQLData}), the JDBC driver will call the method - * {@code SQLData.writeSQL} to write it to the SQL data stream. If the - * object's class implements {@code Ref}, {@code Blob}, {@code Clob}, - * {@code Struct}, or {@code Array}, the driver will pass it to the database - * in the form of the relevant SQL type. - * </p> - * - * @param parameterIndex - * the parameter index, where the first parameter has index 1. - * @param theObject - * the Object containing the value to which the parameter at - * {@code parameterIndex} is set. - * @param targetSqlType - * the SQL type to send to the database, as defined in {@code - * java.sql.Types}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setObject(int parameterIndex, Object theObject, - int targetSqlType) throws SQLException; - - /** - * Sets the value of a specified parameter using a supplied object. - * <p> - * The object is converted to the given {@code targetSqlType} before it is - * sent to the database. If the object has a custom mapping (its class - * implements the interface {@code SQLData}), the JDBC driver will call the method - * {@code SQLData.writeSQL} to write it to the SQL data stream. If the - * object's class implements {@code Ref}, {@code Blob}, {@code Clob}, - * {@code Struct}, or {@code Array}, the driver will pass it to the database - * in the form of the relevant SQL type. - * </p> - * - * @param parameterIndex - * the parameter index, where the first parameter has index 1. - * @param theObject - * the Object containing the value to which the parameter at - * {@code parameterIndex} is set. - * @param targetSqlType - * the SQL type to send to the database, as defined in {@code - * java.sql.Types}. - * @param scale - * the number of digits after the decimal point - only applies to - * the types {@code java.sql.Types.DECIMAL} and {@code - * java.sql.Types.NUMERIC} - ignored for all other types. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setObject(int parameterIndex, Object theObject, - int targetSqlType, int scale) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * REF(<structured-type>)} value. This is stored as an SQL {@code REF}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theRef - * a {@code java.sql.Ref} value to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @see Ref - * @since Android 1.0 - */ - public void setRef(int parameterIndex, Ref theRef) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code short} - * value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theShort - * a {@code short} value to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setShort(int parameterIndex, short theShort) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied string. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theString - * the value to which the parameter at {@code parameterIndex} is - * set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setString(int parameterIndex, String theString) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Time} value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theTime - * a {@code java.sql.Time} value to which the parameter at - * {@code parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setTime(int parameterIndex, Time theTime) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Time} value, using a supplied {@code Calendar}. - * <p> - * The driver uses the supplied {@code Calendar} to create the SQL {@code - * TIME} value, which allows it to use a custom timezone - otherwise the - * driver uses the default timezone of the Java virtual machine. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theTime - * a {@code java.sql.Time} value to which the parameter at - * {@code parameterIndex} is set. - * @param cal - * a {@code Calendar} to use to construct the SQL {@code TIME} - * value. - * @throws SQLException - * if a database error happens. - * @see Time - * @see java.util.Calendar - * @since Android 1.0 - */ - public void setTime(int parameterIndex, Time theTime, Calendar cal) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied java.sql.Timestamp - * value. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theTimestamp - * the java.sql.Timestamp value to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setTimestamp(int parameterIndex, Timestamp theTimestamp) - throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.sql.Timestamp} value, using the supplied {@code Calendar}. - * <p> - * The driver uses the supplied {@code Calendar} to create the SQL {@code - * TIMESTAMP} value, which allows it to use a custom timezone - otherwise - * the driver uses the default timezone of the Java virtual machine. - * </p> - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theTimestamp - * the {@code java.sql.Timestamp} value to which the parameter at - * {@code parameterIndex} is set. - * @param cal - * a {@code Calendar} to use to construct the SQL {@code - * TIMESTAMP} value - * @throws SQLException - * if a database error happens. - * @see Timestamp - * @see java.util.Calendar - * @since Android 1.0 - */ - public void setTimestamp(int parameterIndex, Timestamp theTimestamp, - Calendar cal) throws SQLException; - - /** - * Sets the value of a specified parameter to the characters from a supplied - * {@code InputStream}, with a specified number of bytes. - * - * @deprecated Use {@link #setCharacterStream(int, Reader, int)} - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theInputStream - * the {@code InputStream} with the character data to which the - * parameter at {@code parameterIndex} is set. - * @param length - * the number of bytes to read from the {@code InputStream}. - * @throws SQLException - * if a database error happens. - */ - @Deprecated - public void setUnicodeStream(int parameterIndex, - InputStream theInputStream, int length) throws SQLException; - - /** - * Sets the value of a specified parameter to a supplied {@code - * java.net.URL}. - * - * @param parameterIndex - * the parameter number index, where the first parameter has - * index 1. - * @param theURL - * the {@code URL} to which the parameter at {@code - * parameterIndex} is set. - * @throws SQLException - * if a database error happens. - * @see URL - * @since Android 1.0 - */ - public void setURL(int parameterIndex, URL theURL) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/Ref.java b/sql/src/main/java/java/sql/Ref.java deleted file mode 100644 index 2ceac8b..0000000 --- a/sql/src/main/java/java/sql/Ref.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.util.Map; - -/** - * This interface represents an SQL Ref - a data object containing a cursor - * or pointer to a result table. - * <p> - * The data structure identified by an instance of Ref is held in the - * database, so the data is not necessarily read and converted - * into a Java object until {@code getObject} is called. However, if - * the database supports the {@code Ref} type, it is not typically - * necessary to get the underlying object before using it in a method call - - * the {@code Ref} object can be used in place of the data structure. - * </p> - * A {@code Ref} object is stored into the database using the - * {@link PreparedStatement#setRef(int, Ref)} method. - * - * @since Android 1.0 - */ -public interface Ref { - - /** - * Gets the fully-qualified SQL name of the SQL structured type that this - * {@code Ref} references. - * - * @return the fully qualified name of the SQL structured type. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getBaseTypeName() throws SQLException; - - /** - * Gets the SQL structured type instance referenced by this {@code Ref}. - * - * @return a Java object whose type is defined by the mapping for the SQL - * structured type. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Object getObject() throws SQLException; - - /** - * Returns the associated object and uses the relevant mapping to convert it - * to a Java type. - * - * @param map - * the mapping for type conversion. - * @return a Java object whose type is defined by the mapping for the SQL - * structured type. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Object getObject(Map<String, Class<?>> map) throws SQLException; - - /** - * Sets the value of the structured type that this {@code Ref} references to - * a supplied object. - * - * @param value - * the {@code Object} representing the new SQL structured type - * that this {@code Ref} references. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public void setObject(Object value) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/ResultSet.java b/sql/src/main/java/java/sql/ResultSet.java deleted file mode 100644 index f33f9de..0000000 --- a/sql/src/main/java/java/sql/ResultSet.java +++ /dev/null @@ -1,2122 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.InputStream; -import java.math.BigDecimal; -import java.io.Reader; -import java.util.Calendar; -import java.util.Map; -import java.net.URL; - -/** - * An interface for an object which represents a database table entry, returned - * as the result of the query to the database. - * <p> - * {@code ResultSet}s have a cursor which points to the current data table row. - * When the {@code ResultSet} is created, the cursor's location is one position - * ahead of the first row. To move the cursor to the first and consecutive rows, - * use the {@code next} method. The {@code next} method returns {@code true} as - * long as there are more rows in the {@code ResultSet}, otherwise it returns - * {@code false}. - * </p> - * <p> - * The default type of {@code ResultSet} can not be updated and its cursor can - * only advance forward through the rows of data. This means that it is only - * possible to read through it once. However, other kinds of {@code ResultSet} - * are implemented: an <i>updatable</i> type and also types where the cursor can - * be <i>scrolled</i> forward and backward through the rows of data. How such a - * {@code ResultSet} is created is demonstrated in the following example: - * </p> - * <ul> - * <dd> - * {@code Connection con;}</dd> - * <dd>{@code Statement aStatement = con.createStatement( - * ResultSet.TYPE_SCROLL_SENSITIVE,}{@code ResultSet.CONCUR_UPDATABLE );}</dd> - * <dd>{@code ResultSet theResultSet = - * theStatement.executeQuery("SELECT price, quantity FROM STOCKTABLE");}</dd> - * <dd>{@code // theResultSet is both scrollable and updatable}</dd> </ul> - * <p> - * The {@code ResultSet} interface provides a series of methods for retrieving - * data from columns in the current row, such as {@code getDate} and {@code - * getFloat}. The columns are retrieved either by their index number (starting - * at 1) or by their name - there are separate methods for both techniques of - * column addressing. The column names are case insensitive. If several columns - * have the same name, then the getter methods use the first matching column. - * This means that if column names are used, it is not possible to guarantee - * that the name will retrieve data from the intended column - for certainty it - * is better to use column indexes. Ideally the columns should be read - * left-to-right and read once only, since not all databases are optimized to - * handle other techniques of reading the data. - * </p> - * <p> - * When reading data via the appropriate getter methods, the JDBC driver maps - * the SQL data retrieved from the database to the Java type implied by the - * method invoked by the application. The JDBC specification has a table for the - * mappings from SQL types to Java types. - * </p> - * <p> - * There are also methods for writing data into the {@code ResultSet}, such as - * {@code updateInt} and {@code updateString}. The update methods can be used - * either to modify the data of an existing row or to insert new data rows into - * the {@code ResultSet} . Modification of existing data involves moving the - * cursor to the row which needs modification and then using the update methods - * to modify the data, followed by calling the {@code ResultSet.updateRow} - * method. For insertion of new rows, the cursor is first moved to a special row - * called the <i>Insert Row</i>, data is added using the update methods, - * followed by calling the {@code ResultSet.insertRow} method. - * </p> - * <p> - * A {@code ResultSet} is closed if the statement which generated it closes, the - * statement is executed again, or the same statement's next {@code ResultSet} - * is retrieved (if the statement returned of multiple results). - * </p> - * - * @since Android 1.0 - */ -public interface ResultSet { - - /** - * A constant used to indicate that a {@code ResultSet} object must be - * closed when the method {@code Connection.commit} is invoked. - * - * @since Android 1.0 - */ - public static final int CLOSE_CURSORS_AT_COMMIT = 2; - - /** - * A constant used to indicate that a {@code ResultSet} object must not be - * closed when the method {@code Connection.commit} is invoked. - * - * @since Android 1.0 - */ - public static final int HOLD_CURSORS_OVER_COMMIT = 1; - - /** - * A constant used to indicate the concurrency mode for a {@code ResultSet} - * object that cannot be updated. - * - * @since Android 1.0 - */ - public static final int CONCUR_READ_ONLY = 1007; - - /** - * A constant used to indicate the concurrency mode for a {@code ResultSet} - * object that can be updated. - * - * @since Android 1.0 - */ - public static final int CONCUR_UPDATABLE = 1008; - - /** - * A constant used to indicate processing of the rows of a {@code ResultSet} - * in the forward direction, first to last. - * - * @since Android 1.0 - */ - public static final int FETCH_FORWARD = 1000; - - /** - * A constant used to indicate processing of the rows of a {@code ResultSet} - * in the reverse direction, last to first. - * - * @since Android 1.0 - */ - public static final int FETCH_REVERSE = 1001; - - /** - * A constant used to indicate that the order of processing of the rows of a - * {@code ResultSet} is unknown. - * - * @since Android 1.0 - */ - public static final int FETCH_UNKNOWN = 1002; - - /** - * A constant used to indicate a {@code ResultSet} object whose cursor can - * only move forward. - * - * @since Android 1.0 - */ - public static final int TYPE_FORWARD_ONLY = 1003; - - /** - * A constant used to indicate a {@code ResultSet} object which is - * scrollable but is insensitive to changes made by others. - * - * @since Android 1.0 - */ - public static final int TYPE_SCROLL_INSENSITIVE = 1004; - - /** - * A constant used to indicate a {@code ResultSet} object which is - * scrollable and sensitive to changes made by others. - * - * @since Android 1.0 - */ - public static final int TYPE_SCROLL_SENSITIVE = 1005; - - /** - * Moves the cursor to a specified row number in the {@code ResultSet}. - * - * @param row - * the index of the row starting at index 1. Index {@code -1} - * returns the last row. - * @return {@code true} if the new cursor position is on the {@code - * ResultSet}, {@code false} otherwise. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean absolute(int row) throws SQLException; - - /** - * Moves the cursor to the end of the {@code ResultSet}, after the last row. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void afterLast() throws SQLException; - - /** - * Moves the cursor to the start of the {@code ResultSet}, before the first - * row. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void beforeFirst() throws SQLException; - - /** - * Cancels any updates made to the current row in the {@code ResultSet}. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void cancelRowUpdates() throws SQLException; - - /** - * Clears all warnings related to this {@code ResultSet}. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void clearWarnings() throws SQLException; - - /** - * Releases this {@code ResultSet}'s database and JDBC resources. You are - * strongly advised to use this method rather than relying on the release - * being done when the {@code ResultSet}'s finalize method is called during - * garbage collection process. Note that the {@code close()} method might - * take some time to complete since it is dependent on the behavior of the - * connection to the database and the database itself. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void close() throws SQLException; - - /** - * Deletes the current row from the {@code ResultSet} and from the - * underlying database. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void deleteRow() throws SQLException; - - /** - * Gets the index number for a column in the {@code ResultSet} from the - * provided column name. - * - * @param columnName - * the column name. - * @return the column's index in the {@code ResultSet} identified by column - * name. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int findColumn(String columnName) throws SQLException; - - /** - * Shifts the cursor position to the first row in the {@code ResultSet}. - * - * @return {@code true} if the position is in a legitimate row, {@code - * false} if the {@code ResultSet} contains no rows. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean first() throws SQLException; - - /** - * Gets the content of a column specified by column index in the current row - * of this {@code ResultSet} as a {@code java.sql.Array}. - * - * @param columnIndex - * the index of the column to read - * @return a {@code java.sql.Array} with the data from the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Array getArray(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a {@code - * java.sql.Array}. - * - * @param colName - * the name of the column to read. - * @return a {@code java.sql.Array} with the data from the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Array getArray(String colName) throws SQLException; - - /** - * Gets the value of a column specified by column index as an ASCII - * character stream. - * - * @param columnIndex - * the index of the column to read. - * @return an {@code InputStream} with the data from the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public InputStream getAsciiStream(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as an ASCII character - * stream. - * - * @param columnName - * the name of the column to read - * @return an {@code InputStream} with the data from the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public InputStream getAsciiStream(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.math.BigDecimal}. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code BigDecimal} with the value of the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public BigDecimal getBigDecimal(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.math.BigDecimal}. - * - * @deprecated use {@link #getBigDecimal(int)} or - * {@link #getBigDecimal(String)} - * @param columnIndex - * the index of the column to read. - * @param scale - * the number of digits after the decimal point - * @return a {@code BigDecimal} with the value of the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - @Deprecated - public BigDecimal getBigDecimal(int columnIndex, int scale) - throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code - * java.math.BigDecimal}. - * - * @param columnName - * the name of the column to read. - * @return a BigDecimal with value of the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public BigDecimal getBigDecimal(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code - * java.math.BigDecimal}. - * - * @deprecated use {@link #getBigDecimal(int)} or - * {@link #getBigDecimal(String)} - * @param columnName - * the name of the column to read. - * @param scale - * the number of digits after the decimal point - * @return a BigDecimal with value of the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - @Deprecated - public BigDecimal getBigDecimal(String columnName, int scale) - throws SQLException; - - /** - * Gets the value of a column specified by column index as a binary - * stream. - * <p> - * This method can be used to read {@code LONGVARBINARY} values. All of the - * data in the {@code InputStream} should be read before getting data from - * any other column. A further call to a getter method will implicitly close - * the {@code InputStream}. - * </p> - * - * @param columnIndex - * the index of the column to read. - * @return an {@code InputStream} with the data from the column. If the - * column value is SQL {@code NULL}, {@code null} is returned. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public InputStream getBinaryStream(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a binary stream. - * <p> - * This method can be used to read {@code LONGVARBINARY} values. All of the - * data in the {@code InputStream} should be read before getting data from - * any other column. A further call to a getter method will implicitly close - * the {@code InputStream}. - * </p> - * - * @param columnName - * the name of the column to read. - * @return an {@code InputStream} with the data from the column if the - * column value is SQL {@code NULL}, {@code null} is returned. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public InputStream getBinaryStream(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.sql.Blob} object. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code java.sql.Blob} with the value of the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Blob getBlob(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code - * java.sql.Blob} object. - * - * @param columnName - * the name of the column to read. - * @return a {@code java.sql.Blob} with the value of the column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Blob getBlob(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code boolean} - * . - * - * @param columnIndex - * the index of the column to read. - * @return a {@code boolean} value from the column. If the column is SQL - * {@code NULL}, {@code false} is returned. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean getBoolean(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code boolean} - * . - * - * @param columnName - * the name of the column to read. - * @return a {@code boolean} value from the column. If the column is SQL - * {@code NULL}, {@code false} is returned. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean getBoolean(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code byte}. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code byte} equal to the value of the column. 0 if the value - * is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public byte getByte(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a {@code byte}. - * - * @param columnName - * the name of the column to read. - * @return a {@code byte} equal to the value of the column. 0 if the value - * is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public byte getByte(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a byte array. - * - * @param columnIndex - * the index of the column to read. - * @return a byte array containing the value of the column. {@code null} if - * the column contains SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public byte[] getBytes(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a byte array. - * - * @param columnName - * the name of the column to read. - * @return a byte array containing the value of the column. {@code null} if - * the column contains SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public byte[] getBytes(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.io.Reader} object. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code Reader} holding the value of the column. {@code null} if - * the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @see java.io.Reader - * @since Android 1.0 - */ - public Reader getCharacterStream(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a {@code - * java.io.Reader} object. - * - * @param columnName - * the name of the column to read. - * @return a {@code Reader} holding the value of the column. {@code null} if - * the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Reader getCharacterStream(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.sql.Clob}. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code Clob} object representing the value in the column. - * {@code null} if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Clob getClob(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a {@code - * java.sql.Clob}. - * - * @param colName - * the name of the column to read. - * @return a {@code Clob} object representing the value in the column. - * {@code null} if the value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Clob getClob(String colName) throws SQLException; - - /** - * Gets the concurrency mode of this {@code ResultSet}. - * - * @return the concurrency mode - one of: {@code ResultSet.CONCUR_READ_ONLY} - * , {@code ResultSet.CONCUR_UPDATABLE}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getConcurrency() throws SQLException; - - /** - * Gets the name of the SQL cursor of this {@code ResultSet}. - * - * @return the SQL cursor name. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public String getCursorName() throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.sql.Date}. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code java.sql.Date} matching the column value. {@code null} - * if the column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Date getDate(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.sql.Date}. This method uses a supplied calendar to compute the Date. - * - * @param columnIndex - * the index of the column to read. - * @param cal - * a {@code java.util.Calendar} to use in constructing the Date. - * @return a {@code java.sql.Date} matching the column value. {@code null} - * if the column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Date getDate(int columnIndex, Calendar cal) throws SQLException; - - /** - * Gets the value of a column specified by column name as a {@code - * java.sql.Date}. - * - * @param columnName - * the name of the column to read. - * @return a {@code java.sql.Date} matching the column value. {@code null} - * if the column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Date getDate(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code - * java.sql.Date} object. - * - * @param columnName - * the name of the column to read. - * @param cal - * {@code java.util.Calendar} to use in constructing the Date. - * @return a {@code java.sql.Date} matching the column value. {@code null} - * if the column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Date getDate(String columnName, Calendar cal) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code double} - * value. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code double} equal to the column value. {@code 0.0} if the - * column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public double getDouble(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a {@code double} - * value. - * - * @param columnName - * the name of the column to read. - * @return a {@code double} equal to the column value. {@code 0.0} if the - * column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public double getDouble(String columnName) throws SQLException; - - /** - * Gets the direction in which rows are fetched for this {@code ResultSet} - * object. - * - * @return the fetch direction. Will be one of: - * <ul> - * <li>ResultSet.FETCH_FORWARD</li><li>ResultSet.FETCH_REVERSE</li> - * <li>ResultSet.FETCH_UNKNOWN</li> - * </ul> - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getFetchDirection() throws SQLException; - - /** - * Gets the fetch size (in number of rows) for this {@code ResultSet}. - * - * @return the fetch size as an int - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getFetchSize() throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code float} - * value. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code float} equal to the column value. {@code 0.0} if the - * column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public float getFloat(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a {@code float} - * value. - * - * @param columnName - * the name of the column to read. - * @return a {@code float} equal to the column value. {@code 0.0} if the - * column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public float getFloat(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as an {@code int} - * value. - * - * @param columnIndex - * the index of the column to read. - * @return an {@code int} equal to the column value. {@code 0} if the - * column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getInt(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name, as an {@code int} - * value. - * - * @param columnName - * the name of the column to read. - * @return an {@code int} equal to the column value. {@code 0} if the - * column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getInt(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code long} - * value. - * - * @param columnIndex - * the index of the column to read. - * @return a {@code long} equal to the column value. {@code 0} if the - * column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public long getLong(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code long} - * value. - * - * @param columnName - * the name of the column to read. - * @return a {@code long} equal to the column value. {@code 0} if the - * column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public long getLong(String columnName) throws SQLException; - - /** - * Gets the metadata for this {@code ResultSet}. This defines the number, - * types and properties of the columns in the {@code ResultSet}. - * - * @return a {@code ResultSetMetaData} object with information about this - * {@code ResultSet}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public ResultSetMetaData getMetaData() throws SQLException; - - /** - * Gets the value of a specified column as a Java {@code Object}. The type - * of the returned object will be the default according to the column's SQL - * type, following the JDBC specification for built-in types. - * <p> - * For SQL User Defined Types, if a column value is Structured or Distinct, - * this method behaves the same as a call to: {@code - * getObject(columnIndex,this.getStatement().getConnection().getTypeMap())} - * </p> - * - * @param columnIndex - * the index of the column to read. - * @return an {@code Object} containing the value of the column. {@code - * null} if the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Object getObject(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column index as a Java {@code - * Object}. - * <p> - * The type of the Java object will be determined by the supplied Map to - * perform the mapping of SQL {@code Struct} or Distinct types into Java - * objects. - * </p> - * - * @param columnIndex - * the index of the column to read. - * @param map - * a {@code java.util.Map} containing a mapping from SQL Type - * names to Java classes. - * @return an {@code Object} containing the value of the column. {@code - * null} if the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Object getObject(int columnIndex, Map<String, Class<?>> map) - throws SQLException; - - /** - * Gets the value of a specified column as a Java {@code Object}. The type - * of the returned object will be the default according to the column's SQL - * type, following the JDBC specification for built-in types. - * <p> - * For SQL User Defined Types, if a column value is structured or distinct, - * this method behaves the same as a call to: {@code - * getObject(columnIndex,this.getStatement().getConnection().getTypeMap())} - * </p> - * - * @param columnName - * the name of the column to read. - * @return an {@code Object} containing the value of the column. {@code - * null} if the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Object getObject(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column name as a Java {@code - * Object}. - * <p> - * The type of the Java object will be determined by the supplied Map to - * perform the mapping of SQL Struct or Distinct types into Java objects. - * </p> - * - * @param columnName - * the name of the column to read. - * @param map - * a {@code java.util.Map} containing a mapping from SQL Type names to - * Java classes. - * @return an {@code Object} containing the value of the column. {@code - * null} if the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Object getObject(String columnName, Map<String, Class<?>> map) - throws SQLException; - - /** - * Gets the value of a column specified by column index as a Java {@code - * java.sql.Ref}. - * - * @param columnIndex - * the index of the column to read. - * @return a Ref representing the value of the SQL REF in the column - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Ref getRef(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a Java {@code - * java.sql.Ref}. - * - * @param colName - * the name of the column to read. - * @return a Ref representing the value of the SQL {@code REF} in the column - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Ref getRef(String colName) throws SQLException; - - /** - * Gets the number of the current row in the {@code ResultSet}. Row numbers - * start at 1 for the first row. - * - * @return the index number of the current row. {@code 0} is returned if - * there is no current row. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public int getRow() throws SQLException; - - /** - * Gets the value of a column specified by column index as a short value. - * - * @param columnIndex - * the index of the column to read. - * @return a short value equal to the value of the column. {@code 0} if - * the value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public short getShort(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a short value. - * - * @param columnName - * the name of the column to read. - * @return a short value equal to the value of the column. {@code 0} if - * the value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public short getShort(String columnName) throws SQLException; - - /** - * Gets the statement that produced this {@code ResultSet}. If the {@code - * ResultSet} was not created by a statement (i.e. because it was returned - * from one of the {@link DatabaseMetaData} methods), {@code null} is - * returned. - * - * @return the Statement which produced this {@code ResultSet}, or {@code - * null} if the {@code ResultSet} was not created by a Statement. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Statement getStatement() throws SQLException; - - /** - * Gets the value of a column specified by column index as a String. - * - * @param columnIndex - * the index of the column to read. - * @return the String representing the value of the column, {@code null} if - * the column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public String getString(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a String. - * - * @param columnName - * the name of the column to read. - * @return the String representing the value of the column, {@code null} if - * the column is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public String getString(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.sql.Time} value. - * - * @param columnIndex - * the index of the column to read. - * @return a Time representing the column value, {@code null} if the column - * value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Time getTime(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.sql.Time} value. The supplied {@code Calendar} is used to - * map the SQL {@code Time} value to a Java Time value. - * - * @param columnIndex - * the index of the column to read. - * @param cal - * a {@code Calendar} to use in creating the Java Time value. - * @return a Time representing the column value, {@code null} if the column - * value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Time getTime(int columnIndex, Calendar cal) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code - * java.sql.Time} value. - * - * @param columnName - * the name of the column to read. - * @return the column value, {@code null} if the column value is SQL {@code - * NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Time getTime(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index, as a {@code - * java.sql.Time} value. The supplied {@code Calendar} is used to - * map the SQL {@code Time} value to a Java Time value. - * - * @param columnName - * the name of the column to read. - * @param cal - * a {@code Calendar} to use in creating the Java time value. - * @return a Time representing the column value, {@code null} if the column - * value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Time getTime(String columnName, Calendar cal) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.sql.Timestamp} value. - * - * @param columnIndex - * the index of the column to read. - * @return a timestamp representing the column value, {@code null} if the - * column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Timestamp getTimestamp(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column index, as a {@code - * java.sql.Timestamp} value. The supplied Calendar is used when mapping - * the SQL {@code Timestamp} value to a Java {@code Timestamp} value. - * - * @param columnIndex - * the index of the column to read. - * @param cal - * Calendar to use in creating the Java timestamp value. - * @return a timestamp representing the column value, {@code null} if the - * column value is SQL NULL. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Timestamp getTimestamp(int columnIndex, Calendar cal) - throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code - * java.sql.Timestamp} value. - * - * @param columnName - * the name of the column to read. - * @return a timestamp representing the column value, {@code null} if the - * column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Timestamp getTimestamp(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column name, as a {@code - * java.sql.Timestamp} value. The supplied Calendar is used when mapping - * the SQL {@code Timestamp} value to a Java {@code Timestamp} value. - * - * @param columnName - * the name of the column to read. - * @param cal - * Calendar to use in creating the Java {@code Timestamp} value. - * @return a timestamp representing the column value, {@code null} if the - * column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public Timestamp getTimestamp(String columnName, Calendar cal) - throws SQLException; - - /** - * Gets the type of the {@code ResultSet}. - * - * @return The {@code ResultSet} type, one of: - * <ul> - * <li>{@code ResultSet.TYPE_FORWARD_ONLY}</li> <li>{@code - * ResultSet.TYPE_SCROLL_INSENSITIVE}</li> <li>{@code - * ResultSet.TYPE_SCROLL_SENSITIVE}</li> - * </ul> - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public int getType() throws SQLException; - - /** - * Gets the value of the column as an {@code InputStream} of unicode - * characters. - * - * @deprecated Use {@link #getCharacterStream}. - * @param columnIndex - * the index of the column to read. - * @return an {@code InputStream} holding the value of the column. {@code - * null} if the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - @Deprecated - public InputStream getUnicodeStream(int columnIndex) throws SQLException; - - /** - * Gets the value of the column as an {@code InputStream} of Unicode - * characters. - * - * @deprecated Use {@link #getCharacterStream} - * @param columnName - * the name of the column to read. - * @return an {@code InputStream} holding the value of the column. {@code - * null} if the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - @Deprecated - public InputStream getUnicodeStream(String columnName) throws SQLException; - - /** - * Gets the value of a column specified by column index as a {@code - * java.net.URL}. - * - * @param columnIndex - * the index of the column to read. - * @return a URL. {@code null} if the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public URL getURL(int columnIndex) throws SQLException; - - /** - * Gets the value of a column specified by column name as a {@code - * java.net.URL} object. - * - * @param columnName - * the name of the column to read. - * @return the column vaule as a URL. {@code null} if the column value is SQL {@code NULL}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public URL getURL(String columnName) throws SQLException; - - /** - * Gets the first warning generated by calls on this {@code ResultSet}. - * Subsequent warnings on this {@code ResultSet} are chained to the first - * one. - * <p> - * The warnings are cleared when a new Row is read from the {@code - * ResultSet}. The warnings returned by this method are only the warnings - * generated by {@code ResultSet} method calls - warnings generated by - * Statement methods are held by the Statement. - * <p> - * </p> - * An {@code SQLException} is generated if this method is called on a closed - * {@code ResultSet}. </p> - * - * @return an SQLWarning which is the first warning for this {@code - * ResultSet}. {@code null} if there are no warnings. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public SQLWarning getWarnings() throws SQLException; - - /** - * Insert the insert row into the {@code ResultSet} and into the underlying - * database. The cursor must be set to the Insert Row before this method is - * invoked. - * - * @throws SQLException - * if a database error happens. Particular cases include the - * cursor not being on the Insert Row or if any columns in the - * row do not have a value where the column is declared as - * not-nullable. - * @since Android 1.0 - */ - public void insertRow() throws SQLException; - - /** - * Gets if the cursor is after the last row of the {@code ResultSet}. - * - * @return {@code true} if the cursor is after the last row in the {@code - * ResultSet}, {@code false} if the cursor is at any other position - * in the {@code ResultSet}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean isAfterLast() throws SQLException; - - /** - * Gets if the cursor is before the first row of the {@code ResultSet}. - * - * @return {@code true} if the cursor is before the first row in the {@code - * ResultSet}, {@code false} if the cursor is at any other position - * in the {@code ResultSet}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean isBeforeFirst() throws SQLException; - - /** - * Gets if the cursor is on the first row of the {@code ResultSet}. - * - * @return {@code true} if the cursor is on the first row in the {@code - * ResultSet}, {@code false} if the cursor is at any other position - * in the {@code ResultSet}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean isFirst() throws SQLException; - - /** - * Gets if the cursor is on the last row of the {@code ResultSet} - * - * @return {@code true} if the cursor is on the last row in the {@code - * ResultSet}, {@code false} if the cursor is at any other position - * in the {@code ResultSet}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean isLast() throws SQLException; - - /** - * Shifts the cursor position to the last row of the {@code ResultSet}. - * - * @return {@code true} if the new position is in a legitimate row, {@code - * false} if the {@code ResultSet} contains no rows. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean last() throws SQLException; - - /** - * Moves the cursor to the remembered position, namely the - * row that was the current row before a call to {@code moveToInsertRow}. - * This only applies if the cursor is on the Insert Row. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void moveToCurrentRow() throws SQLException; - - /** - * Moves the cursor position to the Insert Row. The current position is - * remembered and the cursor is positioned at the Insert Row. The columns in - * the Insert Row should be filled in with the appropriate update methods, - * before calling {@code insertRow} to insert the new row into the database. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void moveToInsertRow() throws SQLException; - - /** - * Shifts the cursor position down one row in this {@code ResultSet} object. - * <p> - * Any input streams associated with the current row are closed and any - * warnings are cleared. - * </p> - * - * @return {@code true} if the updated cursor position is pointing to a - * valid row, {@code false} otherwise (i.e. when the cursor is after - * the last row in the {@code ResultSet}). - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean next() throws SQLException; - - /** - * Relocates the cursor position to the preceding row in this {@code - * ResultSet}. - * - * @return {@code true} if the new position is in a legitimate row, {@code - * false} if the cursor is now before the first row. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean previous() throws SQLException; - - /** - * Refreshes the current row with its most up to date value in the database. - * Must not be called when the cursor is on the Insert Row. - * <p> - * If any columns in the current row have been updated but the {@code - * updateRow} has not been called, then the updates are lost when this - * method is called. - * </p> - * - * @throws SQLException - * if a database error happens., including if the current row is - * the Insert row. - * @since Android 1.0 - */ - public void refreshRow() throws SQLException; - - /** - * Moves the cursor position up or down by a specified number of rows. If - * the new position is beyond the start row (or end row), the cursor position is - * set before the first row (or, respectively, after the last row). - * - * @param rows - * a number of rows to move the cursor - may be positive or - * negative - * @return {@code true} if the new cursor position is on a row, {@code - * false} otherwise - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean relative(int rows) throws SQLException; - - /** - * Indicates whether a row has been deleted. This method depends on whether - * the JDBC driver and database can detect deletions. - * - * @return {@code true} if a row has been deleted and if deletions are - * detected, {@code false} otherwise. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean rowDeleted() throws SQLException; - - /** - * Indicates whether the current row has had an insertion operation. This - * method depends on whether the JDBC driver and database can detect - * insertions. - * - * @return {@code true} if a row has been inserted and if insertions are - * detected, {@code false} otherwise. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean rowInserted() throws SQLException; - - /** - * Indicates whether the current row has been updated. This method depends - * on whether the JDBC driver and database can detect updates. - * - * @return {@code true} if the current row has been updated and if updates - * can be detected, {@code false} otherwise. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean rowUpdated() throws SQLException; - - /** - * Indicates which direction (forward/reverse) will be used to process the - * rows of this {@code ResultSet} object. This is treated as a hint by the - * JDBC driver. - * - * @param direction - * can be {@code ResultSet.FETCH_FORWARD}, {@code - * ResultSet.FETCH_REVERSE}, or {@code ResultSet.FETCH_UNKNOWN} - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public void setFetchDirection(int direction) throws SQLException; - - /** - * Indicates the number of rows to fetch from the database when extra rows - * are required for this {@code ResultSet}. This used as a hint to the JDBC - * driver. - * - * @param rows - * the number of rows to fetch. {@code 0} implies that the JDBC - * driver can make its own decision about the fetch size. The - * number should not be greater than the maximum number of rows - * established by the statement that generated the {@code - * ResultSet}. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void setFetchSize(int rows) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code - * java.sql.Array} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateArray(int columnIndex, Array x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code java.sql.Array} - * value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateArray(String columnName, Array x) throws SQLException; - - /** - * Updates a column specified by a column index with an ASCII stream value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @param length - * the length of the data to write from the stream - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateAsciiStream(int columnIndex, InputStream x, int length) - throws SQLException; - - /** - * Updates a column specified by a column name with an Ascii stream value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @param length - * the length of the data to write from the stream - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateAsciiStream(String columnName, InputStream x, int length) - throws SQLException; - - /** - * Updates a column specified by a column index with a {@code - * java.sql.BigDecimal} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBigDecimal(int columnIndex, BigDecimal x) - throws SQLException; - - /** - * Updates a column specified by a column name with a {@code - * java.sql.BigDecimal} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBigDecimal(String columnName, BigDecimal x) - throws SQLException; - - /** - * Updates a column specified by a column index with a binary stream value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @param length - * the number of bytes to be read from the the stream. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBinaryStream(int columnIndex, InputStream x, int length) - throws SQLException; - - /** - * Updates a column specified by a column name with a binary stream value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @param length - * he number of bytes to be read from the the stream. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBinaryStream(String columnName, InputStream x, int length) - throws SQLException; - - /** - * Updates a column specified by a column index with a {@code java.sql.Blob} - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBlob(int columnIndex, Blob x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code java.sql.Blob} - * value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBlob(String columnName, Blob x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code boolean} - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBoolean(int columnIndex, boolean x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code boolean} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBoolean(String columnName, boolean x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code byte} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateByte(int columnIndex, byte x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code byte} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateByte(String columnName, byte x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code byte} array - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBytes(int columnIndex, byte[] x) throws SQLException; - - /** - * Updates a column specified by a column name with a byte array value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateBytes(String columnName, byte[] x) throws SQLException; - - /** - * Updates a column specified by a column index with a character stream - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @param length - * the length of data to write from the stream - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateCharacterStream(int columnIndex, Reader x, int length) - throws SQLException; - - /** - * Updates a column specified by a column name with a character stream - * value. - * - * @param columnName - * the name of the column to update. - * @param reader - * the new value for the specified column. - * @param length - * the length of data to write from the Reader - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateCharacterStream(String columnName, Reader reader, - int length) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code java.sql.Clob} - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateClob(int columnIndex, Clob x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code java.sql.Clob} - * value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateClob(String columnName, Clob x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code java.sql.Date} - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateDate(int columnIndex, Date x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code java.sql.Date} - * value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateDate(String columnName, Date x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code double} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateDouble(int columnIndex, double x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code double} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateDouble(String columnName, double x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code float} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateFloat(int columnIndex, float x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code float} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateFloat(String columnName, float x) throws SQLException; - - /** - * Updates a column specified by a column index with an {@code int} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateInt(int columnIndex, int x) throws SQLException; - - /** - * Updates a column specified by a column name with an {@code int} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateInt(String columnName, int x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code long} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column.. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateLong(int columnIndex, long x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code long} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateLong(String columnName, long x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code null} value. - * - * @param columnIndex - * the index of the column to update. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateNull(int columnIndex) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code null} value. - * - * @param columnName - * the name of the column to update. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateNull(String columnName) throws SQLException; - - /** - * Updates a column specified by a column index with an {@code Object} - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateObject(int columnIndex, Object x) throws SQLException; - - /** - * Updates a column specified by a column index with an {@code Object} - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @param scale - * for the types {@code java.sql.Types.DECIMAL} or {@code - * java.sql.Types.NUMERIC}, this specifies the number of digits - * after the decimal point. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateObject(int columnIndex, Object x, int scale) - throws SQLException; - - /** - * Updates a column specified by a column name with an {@code Object} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateObject(String columnName, Object x) throws SQLException; - - /** - * Updates a column specified by a column name with an {@code Object} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @param scale - * for the types {@code java.sql.Types.DECIMAL} or {@code - * java.sql.Types.NUMERIC}, this specifies the number of digits - * after the decimal point. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateObject(String columnName, Object x, int scale) - throws SQLException; - - /** - * Updates a column specified by a column index with a {@code java.sql.Ref} - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateRef(int columnIndex, Ref x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code java.sql.Ref} - * value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateRef(String columnName, Ref x) throws SQLException; - - /** - * Updates the database with the new contents of the current row of this - * {@code ResultSet} object. - * - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateRow() throws SQLException; - - /** - * Updates a column specified by a column index with a {@code short} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateShort(int columnIndex, short x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code short} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateShort(String columnName, short x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code String} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateString(int columnIndex, String x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code String} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateString(String columnName, String x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code Time} value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateTime(int columnIndex, Time x) throws SQLException; - - /** - * Updates a column specified by a column name with a {@code Time} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateTime(String columnName, Time x) throws SQLException; - - /** - * Updates a column specified by a column index with a {@code Timestamp} - * value. - * - * @param columnIndex - * the index of the column to update. - * @param x - * the new timestamp value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateTimestamp(int columnIndex, Timestamp x) - throws SQLException; - - /** - * Updates a column specified by column name with a {@code Timestamp} value. - * - * @param columnName - * the name of the column to update. - * @param x - * the new timestamp value for the specified column. - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public void updateTimestamp(String columnName, Timestamp x) - throws SQLException; - - /** - * Determines whether the last column read from this {@code ResultSet} - * contained SQL {@code NULL}. - * - * @return {@code {@code true} if the last column contained SQL {@code - * NULL}, {@code false} otherwise - * @throws SQLException - * if a database error happens. - * @since Android 1.0 - */ - public boolean wasNull() throws SQLException; -} diff --git a/sql/src/main/java/java/sql/ResultSetMetaData.java b/sql/src/main/java/java/sql/ResultSetMetaData.java deleted file mode 100644 index 95c515d..0000000 --- a/sql/src/main/java/java/sql/ResultSetMetaData.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -/** - * Provides information about the columns returned in a {@code ResultSet}. - * - * @since Android 1.0 - */ -public interface ResultSetMetaData { - - /** - * Indicates that a column cannot contain {@code NULL} values. - * - * @since Android 1.0 - */ - public static final int columnNoNulls = 0; - - /** - * Indicates that a column can contain {@code NULL} values. - * - * @since Android 1.0 - */ - public static final int columnNullable = 1; - - /** - * Indicates that it is unknown whether a column can contain {@code NULL}s or not. - * - * @since Android 1.0 - */ - public static final int columnNullableUnknown = 2; - - /** - * Returns the title of an indexed column's catalog. - * - * @param column - * the column index, starting at 1. - * @return the catalog title. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getCatalogName(int column) throws SQLException; - - /** - * Returns the fully-qualified type of the class that is produced when - * invoking {@code ResultSet.getObject} to recover this column's value. - * - * @param column - * the column index, starting at 1. - * @return the fully-qualified class name. - * @throws SQLException - * if there is a database error. - * @see ResultSet#getObject - * @since Android 1.0 - */ - public String getColumnClassName(int column) throws SQLException; - - /** - * Returns number of columns contained in the associated result set. - * - * @return the column count. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public int getColumnCount() throws SQLException; - - /** - * Returns the indexed column's standard maximum width, expressed in number - * of characters. - * - * @param column - * the column index, starting at 1. - * @return the column's max width. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public int getColumnDisplaySize(int column) throws SQLException; - - /** - * Returns a recommended title for the indexed column, to be used when the - * title needs to be displayed. - * - * @param column - * the column index, starting at 1. - * @return the column's title. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getColumnLabel(int column) throws SQLException; - - /** - * Returns the title of the indexed column. - * - * @param column - * the column index, starting at 1. - * @return the column title. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getColumnName(int column) throws SQLException; - - /** - * Returns the type of the indexed column as SQL type code. - * - * @param column - * the column index, starting at 1. - * @return the column type code. - * @throws SQLException - * if there is a database error. - * @see Types - * @since Android 1.0 - */ - public int getColumnType(int column) throws SQLException; - - /** - * Returns the type name of the indexed column. - * - * @param column - * the column index, starting at 1. - * @return the type name. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getColumnTypeName(int column) throws SQLException; - - /** - * Returns the decimal precision of the indexed column. - * - * @param column - * the column index, starting at 1. - * @return the precision. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public int getPrecision(int column) throws SQLException; - - /** - * Returns the number of digits to the right of the decimal point of the - * indexed column. - * - * @param column - * the column index, starting at 1. - * @return number of decimal places. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public int getScale(int column) throws SQLException; - - /** - * Returns the name of the indexed columns schema. - * - * @param column - * the column index, starting at 1. - * @return the name of the columns schema. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getSchemaName(int column) throws SQLException; - - /** - * Returns the title of the indexed columns table. - * - * @param column - * the column index, starting at 1. - * @return the table title. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String getTableName(int column) throws SQLException; - - /** - * Returns an indication of whether the indexed column is automatically - * incremented and is therefore read-only. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if it is automatically numbered, {@code false} - * otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean isAutoIncrement(int column) throws SQLException; - - /** - * Returns an indication of whether the case of the indexed column is - * important. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if case matters, {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean isCaseSensitive(int column) throws SQLException; - - /** - * Returns whether the indexed column contains a monetary amount. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if it is a monetary value, {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean isCurrency(int column) throws SQLException; - - /** - * Returns an indication of whether writing to the indexed column is - * guaranteed to be successful. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if the write is guaranteed, {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean isDefinitelyWritable(int column) throws SQLException; - - /** - * Returns whether the indexed column is nullable. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if it is nullable, {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public int isNullable(int column) throws SQLException; - - /** - * Returns an indication of whether writing to the indexed column is - * guaranteed to be unsuccessful. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if the column is read-only, {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean isReadOnly(int column) throws SQLException; - - /** - * Returns an indication of whether the indexed column is searchable. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if the indexed column is searchable, {@code false} - * otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean isSearchable(int column) throws SQLException; - - /** - * Returns an indication of whether the values contained in the indexed - * column are signed. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if they are signed, {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean isSigned(int column) throws SQLException; - - /** - * Returns an indication of whether writing to the indexed column is - * possible. - * - * @param column - * the column index, starting at 1. - * @return {@code true} if it is possible to write, {@code false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean isWritable(int column) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/SQLData.java b/sql/src/main/java/java/sql/SQLData.java deleted file mode 100644 index cae9d15..0000000 --- a/sql/src/main/java/java/sql/SQLData.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -/** - * An interface for the custom mapping of an SQL <i>User Defined Type</i> (UDT) - * to a Java class. The Java class object is added to the connection's type map - * paired with the SQL name of the corresponding UDT. - * <p> - * Usually within an implementation of {@code SQLData}, there is a corresponding - * field for every attribute of an SQL type, but only one field, if the type is - * SQL {@code DISTINCT}. When the UDT is returned within a {@code ResultSet}, it - * is accessed with the {@link ResultSet#getObject} method and is returned as an - * object which is an instance of the class defined by the {@code SQLData} - * mapping. The application can use this object just like any other Java object - * and can store changes back into the database using the - * {@link PreparedStatement#setObject} method which performs the reverse mapping - * into the SQL {@code UDT}. - * </p> - * Normally the implementation of a custom mapping is generated by - * a tool requiring the name of the SQL {@code UDT}, the name - * of the class which it is going to be mapped to, and the field names to which - * the UDT attributes are mapped. The tool can then implement the {@code - * SQLData}, {@code readSQL}, and {@code writeSQL} methods. {@code readSQL} reads - * attributes from an {@code SQLInput} object, and {@code writeSQL} writes them. - * This is done via {@code SQLInput} and {@code SQLOutput} method calls - * respectively. - * <p> - * Ordinarily an application would not call {@code SQLData} methods directly. - * Similarly {@code SQLInput} and {@code SQLOutput} methods are not usually - * called directly. - * </p> - * - * @since Android 1.0 - */ -public interface SQLData { - - /** - * Gets the SQL name of the <i>User Defined Type</i> (UDT) that this object - * represents. This method, usually invoked by the JDBC driver, retrieves - * the name of the UDT instance associated with this {@code SQLData} object. - * - * @return a string with UDT type name for this object mapping, passed to - * {@code readSQL} when the object was created. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public String getSQLTypeName() throws SQLException; - - /** - * Reads data from the database into this object. This method follows these - * steps: - * <p> - * <ul> - * <li>Utilize the passed input stream to read the attributes or entries of - * the SQL type</li> - * <li>This is carried out by reading each entry from the input stream, - * ordered as they are in the SQL definition.</li> - * <li>Assign the data to the appropriate fields or elements. This is done - * by calling the relevant reader method for the type involved (e.g. {@code - * SQLInput.readString}, {@code SQLInputreadBigDecimal}). If the type is - * distinct, then read its only data entry. For structured types, read every - * entry.</li> - * </ul> - * </p> - * <p> - * The supplied input stream is typically initialized by the calling JDBC - * driver with the type map before {@code readSQL} is called. - * </p> - * - * @param stream - * the {@code SQLInput} stream from which the type map data is - * read for the custom mapping. - * @param typeName - * the SQL type name for the type which is being mapped. - * @throws SQLException - * if a database error occurs. - * @see SQLInput - * @since Android 1.0 - */ - public void readSQL(SQLInput stream, String typeName) throws SQLException; - - /** - * Writes the object to a supplied {@code SQLOutput} data stream, writing it - * out as an SQL value to the data source. - * <p> - * This method follows the following steps: - * <ul> - * <li>Write each attribute of the SQL type to the output stream.</li> - * <li>Write each item by calling a method on the output stream, in the - * order they appear in the SQL definition of the type. Use the appropriate - * {@code SQLOutput} methods (e.g. {@code writeInt}, {@code writeString}). - * Write a single data element for a distinct type. For a structured type, - * write a value for each attribute of the the SQL type.</li> - * </ul> - * </p> - * - * @param stream - * the {@code SQLOutput} stream to use to write out the data for - * the custom mapping. - * @throws SQLException - * if a database error occurs. - * @see SQLOutput - * @since Android 1.0 - */ - public void writeSQL(SQLOutput stream) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/SQLException.java b/sql/src/main/java/java/sql/SQLException.java deleted file mode 100644 index 2cea139..0000000 --- a/sql/src/main/java/java/sql/SQLException.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.Serializable; - -/** - * An {@code Exception} class that is used in conjunction with JDBC operations. - * It provides information about problems encountered with database access and - * other problems related to JDBC - * <p> - * The {@code SQLException} class provides the following information: - * <ul> - * <li>A standard Java exception message, as a {@code String}</li> - * <li>An {@code SQLState} string. This is an error description string which - * follows either the SQL 99 conventions or the X/OPEN {@code SQLstate} - * conventions. The potential values of the {@code SQLState} string are - * described in each of the specifications. Which of the conventions is being - * used by the {@code SQLState} string can be discovered by using the {@code - * getSQLStateType} method of the {@code DatabaseMetaData} interface.</li> - * <li>An error code, an an integer. The error code is specific to each database - * vendor and is typically the error code returned by the database itself.</li> - * <li>A chain to a next {@code Exception}, if relevant, which can give access - * to additional error information.</li> - * </ul> - * </p> - * - * @see DatabaseMetaData - * - * @since Android 1.0 - */ -public class SQLException extends Exception implements Serializable { - - private static final long serialVersionUID = 2135244094396331484L; - - private String SQLState = null; - - private int vendorCode = 0; - - private SQLException next = null; - - /** - * Creates an {@code SQLException} object. The reason string is set to - * {@code null}, the {@code SQLState} string is set to {@code null} and the - * error code is set to 0. - */ - public SQLException() { - super(); - } - - /** - * Creates an {@code SQLException} object. The reason string is set to the given - * reason string, the {@code SQLState} string is set to {@code null} and the error code is - * set to 0. - * - * @param theReason - * the string to use as the Reason string - */ - public SQLException(String theReason) { - this(theReason, null, 0); - } - - /** - * Creates an {@code SQLException} object. The reason string is set to the - * given reason string, the {@code SQLState} string is set to the given - * {@code SQLState} string and the error code is set to 0. - * - * @param theReason - * the string to use as the reason string. - * @param theSQLState - * the string to use as the {@code SQLState} string. - * @since Android 1.0 - */ - public SQLException(String theReason, String theSQLState) { - this(theReason, theSQLState, 0); - } - - /** - * Creates an {@code SQLException} object. The reason string is set to the - * given reason string, the {@code SQLState} string is set to the given - * {@code SQLState} string and the error code is set to the given error code - * value. - * - * @param theReason - * the string to use as the reason string. - * @param theSQLState - * the string to use as the {@code SQLState} string. - * @param theErrorCode - * the integer value for the error code. - * @since Android 1.0 - */ - public SQLException(String theReason, String theSQLState, int theErrorCode) { - super(theReason); - SQLState = theSQLState; - vendorCode = theErrorCode; - } - - /** - * Returns the integer error code for this {@code SQLException}. - * - * @return The integer error code for this {@code SQLException}. The meaning - * of the code is specific to the vendor of the database. - * @since Android 1.0 - */ - public int getErrorCode() { - return vendorCode; - } - - /** - * Retrieves the {@code SQLException} chained to this {@code SQLException}, - * if any. - * - * @return The {@code SQLException} chained to this {@code SQLException}. - * {@code null} if there is no {@code SQLException} chained to this - * {@code SQLException}. - */ - public SQLException getNextException() { - return next; - } - - /** - * Retrieves the {@code SQLState} description string for this {@code - * SQLException} object. - * - * @return The {@code SQLState} string for this {@code SQLException} object. - * This is an error description string which follows either the SQL - * 99 conventions or the X/OPEN {@code SQLstate} conventions. The - * potential values of the {@code SQLState} string are described in - * each of the specifications. Which of the conventions is being - * used by the {@code SQLState} string can be discovered by using - * the {@code getSQLStateType} method of the {@code - * DatabaseMetaData} interface. - */ - public String getSQLState() { - return SQLState; - } - - /** - * Adds the SQLException to the end of this {@code SQLException} chain. - * - * @param ex - * the new {@code SQLException} to be added to the end of the - * chain. - * @since Android 1.0 - */ - public void setNextException(SQLException ex) { - if (next != null) { - next.setNextException(ex); - } else { - next = ex; - } - } -} diff --git a/sql/src/main/java/java/sql/SQLInput.java b/sql/src/main/java/java/sql/SQLInput.java deleted file mode 100644 index b72c839..0000000 --- a/sql/src/main/java/java/sql/SQLInput.java +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.math.BigDecimal; -import java.io.Reader; -import java.io.InputStream; -import java.net.URL; - -/** - * The {@code SQLInput} interface defines operations which apply to a type of - * input stream which carries a series of values representing an instance of - * an SQL structured type or SQL distinct type. - * <p> - * This interface is used to define custom mappings of SQL <i>User Defined - * Types</i> (UDTs) to Java classes. It is used by JDBC drivers, therefore - * application programmers do not normally use the {@code SQLInput} methods - * directly. Reader methods such as {@code readLong} and {@code readBytes} - * provide means to read values from an {@code SQLInput} stream. - * </p><p> - * When the {@code getObject} method is called with an object which implements - * the {@code SQLData} interface, the JDBC driver determines the SQL type of the - * UDT being mapped by calling the {@code SQLData.getSQLType} method. The driver - * creates an instance of an {@code SQLInput} stream, filling the stream with - * the attributes of the UDT. The {@code SQLInput} stream is passed to the - * {@code SQLData.readSQL} method which then calls the {@code SQLInput} reader - * methods to read the attributes. - * </p> - * - * @see SQLData - * - * @since Android 1.0 - */ -public interface SQLInput { - - /** - * Returns the next attribute in the stream in the form of a {@code String}. - * - * @return the next attribute. {@code null} if the value is SQL {@code NULL}. - * - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public String readString() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code boolean} - * . - * - * @return the next attribute as a {@code boolean}. {@code false} if the - * value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean readBoolean() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code byte}. - * - * @return the next attribute as a {@code byte}. 0 if the value is SQL - * {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public byte readByte() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code short}. - * - * @return the next attribute as a {@code short}. 0 if the value is SQL - * {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public short readShort() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of an {@code int}. - * - * @return the next attribute as an {@code int}. 0 if the value is SQL - * {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public int readInt() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code long}. - * - * @return the next attribute as a {@code long}. 0 if the value is SQL - * {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public long readLong() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code float}. - * - * @return the next attribute as a {@code float}. 0 if the value is SQL - * {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public float readFloat() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code double}. - * - * @return the next attribute as a {@code double}. 0 if the value is SQL - * {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public double readDouble() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.math.BigDecimal}. - * - * @return the attribute as a {@code java.math.BigDecimal}. {@code null} if - * the read returns SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see java.math.BigDecimal - * @since Android 1.0 - */ - public BigDecimal readBigDecimal() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a byte array. - * - * @return the attribute as a byte array. {@code null} if the read returns - * SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public byte[] readBytes() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.sql.Date}. - * - * @return the next attribute as a {@code java.sql.Date}. {@code null} if - * the value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see Date - * @since Android 1.0 - */ - public Date readDate() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.sql.Time}. - * - * @return the attribute as a {@code java.sql.Time}. {@code null} if the - * read returns SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see Time - * @since Android 1.0 - */ - public Time readTime() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.sql.Timestamp}. - * - * @return the attribute as a {@code java.sql.Timestamp}. {@code null} if - * the read returns SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see Timestamp - * @since Android 1.0 - */ - public Timestamp readTimestamp() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a Unicode - * character stream embodied as a {@code java.io.Reader}. - * - * @return the next attribute as a {@code java.io.Reader}. {@code null} if - * the value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see java.io.Reader - * @since Android 1.0 - */ - public Reader readCharacterStream() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of an ASCII - * character stream embodied as a {@code java.io.InputStream}. - * - * @return the next attribute as a {@code java.io.InputStream}. {@code null} - * if the value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see java.io.InputStream - * @since Android 1.0 - */ - public InputStream readAsciiStream() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a stream of bytes - * embodied as a {@code java.io.InputStream}. - * - * @return the next attribute as a {@code java.io.InputStream}. {@code null} - * if the value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see java.io.InputStream - * @since Android 1.0 - */ - public InputStream readBinaryStream() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.lang.Object}. - * <p> - * The type of the {@code Object} returned is determined by the type mapping - * for this JDBC driver, including any customized mappings, if present. A - * type map is given to the {@code SQLInput} by the JDBC driver before the - * {@code SQLInput} is given to the application. - * </p> - * <p> - * If the attribute is an SQL structured or distinct type, its SQL type is - * determined. If the stream's type map contains an element for that SQL - * type, the driver creates an object for the relevant type and invokes the - * method {@code SQLData.readSQL} on it, which reads supplementary data from - * the stream using whichever protocol is defined for that method. - * </p> - * - * @return the next attribute as an Object. {@code null} if the value is SQL - * {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Object readObject() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.sql.Ref}. - * - * @return the next attribute as a {@code java.sql.Ref}. {@code null} if the - * value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see Ref - * @since Android 1.0 - */ - public Ref readRef() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.sql.Blob}. - * - * @return the next attribute as a {@code java.sql.Blob}. {@code null} if - * the value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public Blob readBlob() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.sql.Clob}. - * - * @return the next attribute as a {@code java.sql.Clob}. {@code null} if - * the value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see Clob - * @since Android 1.0 - */ - public Clob readClob() throws SQLException; - - /** - * Returns the next attribute in the stream in the form of a {@code - * java.sql.Array}. - * - * @return the next attribute as an {@code Array}. {@code null} if the value - * is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see Array - * @since Android 1.0 - */ - public Array readArray() throws SQLException; - - /** - * Reports whether the last value read was SQL {@code NULL}. - * - * @return {@code true} if the last value read was SQL {@code NULL}, {@code - * false} otherwise. - * @throws SQLException - * if there is a database error. - * @since Android 1.0 - */ - public boolean wasNull() throws SQLException; - - /** - * Reads the next attribute in the stream (SQL DATALINK value) and returns - * it as a {@code java.net.URL} object. - * - * @return the next attribute as a {@code java.net.URL}. {@code null} if the - * value is SQL {@code NULL}. - * @throws SQLException - * if there is a database error. - * @see java.net.URL - * @since Android 1.0 - */ - public URL readURL() throws SQLException; -} diff --git a/sql/src/main/java/java/sql/SQLOutput.java b/sql/src/main/java/java/sql/SQLOutput.java deleted file mode 100644 index 9fded5e..0000000 --- a/sql/src/main/java/java/sql/SQLOutput.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.InputStream; -import java.io.Reader; -import java.math.BigDecimal; -import java.net.URL; - -/** - * The interface for an output stream used to write attributes of an SQL <i>User - * Defined Type</i> (UDT) to the database. This interface is used for custom - * mapping of types and is called by the JDBC driver. It is not intended to be - * used by applications. - * <p> - * When an object which implements the {@code SQLData} interface is used as an - * argument to an SQL statement, the JDBC driver calls the method {@code - * SQLData.getSQLType} to establish the type of the SQL UDT that is being - * passed. The driver then creates an {@code SQLOutput} stream and passes it to - * the {@code SQLData.writeSQL} method, which in turn uses the appropriate - * {@code SQLOutput} writer methods to write the data from the {@code SQLData} - * object into the stream according to the defined mapping. - * </p> - * - * @see SQLData - * - * @since Android 1.0 - */ -public interface SQLOutput { - - /** - * Write a {@code String} value into the output stream. - * - * @param theString - * the {@code String} to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeString(String theString) throws SQLException; - - /** - * Write a {@code boolean} value into the output stream. - * - * @param theFlag - * the {@code boolean} value to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeBoolean(boolean theFlag) throws SQLException; - - /** - * Write a {@code byte} value into the output stream. - * - * @param theByte - * the {@code byte} value to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeByte(byte theByte) throws SQLException; - - /** - * Write a {@code short} value into the output stream. - * - * @param theShort - * the {@code short} value to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeShort(short theShort) throws SQLException; - - /** - * Write an {@code int} value into the output stream. - * - * @param theInt - * the {@code int} value to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeInt(int theInt) throws SQLException; - - /** - * Write a {@code long} value into the output stream. - * - * @param theLong - * the {@code long} value to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeLong(long theLong) throws SQLException; - - /** - * Write a {@code float} value into the output stream. - * - * @param theFloat - * the {@code float} value to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeFloat(float theFloat) throws SQLException; - - /** - * Write a {@code double} value into the output stream. - * - * @param theDouble - * the {@code double} value to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeDouble(double theDouble) throws SQLException; - - /** - * Write a {@code java.math.BigDecimal} value into the output stream. - * - * @param theBigDecimal - * the {@code BigDecimal} value to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeBigDecimal(BigDecimal theBigDecimal) throws SQLException; - - /** - * Write an array of bytes into the output stream. - * - * @param theBytes - * the array of bytes to write. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeBytes(byte[] theBytes) throws SQLException; - - /** - * Write a {@code java.sql.Date} value into the output stream. - * - * @param theDate - * the {@code Date} value to write. - * @throws SQLException - * if a database error occurs. - * @see Date - * @since Android 1.0 - */ - public void writeDate(Date theDate) throws SQLException; - - /** - * Write a {@code java.sql.Time} value into the output stream. - * - * @param theTime - * the {@code Time} value to write. - * @throws SQLException - * if a database error occurs. - * @see Time - * @since Android 1.0 - */ - public void writeTime(Time theTime) throws SQLException; - - /** - * Write a {@code java.sql.Timestamp} value into the output stream. - * - * @param theTimestamp - * the {@code Timestamp} value to write. - * @throws SQLException - * if a database error occurs. - * @see Timestamp - * @since Android 1.0 - */ - public void writeTimestamp(Timestamp theTimestamp) throws SQLException; - - /** - * Write a stream of unicode characters into the output stream. - * - * @param theStream - * the stream of unicode characters to write, as a {@code - * java.io.Reader} object. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeCharacterStream(Reader theStream) throws SQLException; - - /** - * Write a stream of ASCII characters into the output stream. - * - * @param theStream - * the stream of ASCII characters to write, as a {@code - * java.io.InputStream} object - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeAsciiStream(InputStream theStream) throws SQLException; - - /** - * Write a stream of uninterpreted bytes into the output stream. - * - * @param theStream - * the stream of bytes to write, as a {@code java.io.InputStream} - * object - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public void writeBinaryStream(InputStream theStream) throws SQLException; - - /** - * Write an {@code SQLData} object into the output stream. - * <p> - * If the {@code SQLData} object is null, writes {@code NULL} to the stream. - * </p> - * <p> - * Otherwise, calls the {@code SQLData.writeSQL} method of the object, which - * writes the object's attributes to the stream by calling the appropriate - * SQLOutput writer methods for each attribute, in order. The order of the - * attributes is the order they are listed in the SQL definition of the User - * Defined Type. - * </p> - * - * @param theObject - * the {@code SQLData} object to write. - * @throws SQLException - * if a database error occurs. - * @see SQLData - * @since Android 1.0 - */ - public void writeObject(SQLData theObject) throws SQLException; - - /** - * Write an SQL {@code Ref} value into the output stream. - * - * @param theRef - * the {@code java.sql.Ref} object to write. - * @throws SQLException - * if a database error occurs. - * @see Ref - * @since Android 1.0 - */ - public void writeRef(Ref theRef) throws SQLException; - - /** - * Write an SQL {@code Blob} value into the output stream. - * - * @param theBlob - * the {@code java.sql.Blob} object to write. - * @throws SQLException - * if a database error occurs. - * @see Blob - * @since Android 1.0 - */ - public void writeBlob(Blob theBlob) throws SQLException; - - /** - * Write an SQL {@code Clob} value into the output stream. - * - * @param theClob - * the {@code java.sql.Clob} object to write. - * @throws SQLException - * if a database error occurs. - * @see Clob - * @since Android 1.0 - */ - public void writeClob(Clob theClob) throws SQLException; - - /** - * Write an SQL {@code Struct} value into the output stream. - * - * @param theStruct - * the {@code java.sql.Struct} object to write. - * @throws SQLException - * if a database error occurs. - * @see Struct - * @since Android 1.0 - */ - public void writeStruct(Struct theStruct) throws SQLException; - - /** - * Write an SQL {@code Array} value into the output stream. - * - * @param theArray - * the {@code java.sql.Array} object to write. - * @throws SQLException - * if a database error occurs. - * @see Array - * @since Android 1.0 - */ - public void writeArray(Array theArray) throws SQLException; - - /** - * Write an SQL {@code DATALINK} value into the output stream. - * - * @param theURL - * the datalink value as a {@code java.net.URL} to write. - * @throws SQLException - * if a database error occurs. - * @see java.net.URL - * @since Android 1.0 - */ - public void writeURL(URL theURL) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/SQLPermission.java b/sql/src/main/java/java/sql/SQLPermission.java deleted file mode 100644 index a9f82d1..0000000 --- a/sql/src/main/java/java/sql/SQLPermission.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.Serializable; -import java.security.BasicPermission; -import java.security.Guard; - -/** - * A Permission relating to security access control in the {@code java.sql} - * package. - * <p> - * Currently, the only permission supported has the name " {@code setLog}". The - * {@code setLog} permission controls whether a Java application or applet can - * open a logging stream using the {@code DriverManager.setLogWriter} method or - * the {@code DriverManager.setLogStream} method. This is a potentially - * dangerous operation since the logging stream can contain sensitive - * information such as usernames and passwords. - * </p> - * - * @see DriverManager - * - * @since Android 1.0 - */ -public final class SQLPermission extends BasicPermission implements Guard, - Serializable { - - private static final long serialVersionUID = -1439323187199563495L; - - /** - * Creates a new {@code SQLPermission} object with the specified name. - * - * @param name - * the name to use for this {@code SQLPermission}. - */ - public SQLPermission(String name) { - super(name); - } - - /** - * Creates a new {@code SQLPermission} object with the specified name. - * - * @param name - * is the name of the {@code SQLPermission}. Currently only - * {@code "setLog"} is allowed. - * @param actions - * is currently unused and should be set to {@code null}. - */ - public SQLPermission(String name, String actions) { - super(name, null); - } -} diff --git a/sql/src/main/java/java/sql/SQLWarning.java b/sql/src/main/java/java/sql/SQLWarning.java deleted file mode 100644 index de94da5..0000000 --- a/sql/src/main/java/java/sql/SQLWarning.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.io.Serializable; - -import org.apache.harmony.sql.internal.nls.Messages; - -/** - * An exception class that holds information about Database access warnings. - * - * @since Android 1.0 - */ -public class SQLWarning extends SQLException implements Serializable { - - private static final long serialVersionUID = 3917336774604784856L; - - /** - * Creates an {@code SQLWarning} object. The reason string is set to {@code - * null}, the {@code SQLState} string is set to {@code null} and the error - * code is set to 0. - * - * @since Android 1.0 - */ - public SQLWarning() { - super(); - } - - /** - * Creates an {@code SQLWarning} object. The reason string is set to the - * given reason string, the {@code SQLState} string is set to {@code null} - * and the error code is set to 0. - * - * @param theReason - * the reason why this warning is issued. - * @since Android 1.0 - */ - public SQLWarning(String theReason) { - super(theReason); - } - - /** - * Creates an {@code SQLWarning} object. The reason string is set to the - * given reason string, the {@code SQLState} string is set to the given - * {@code SQLState} string and the error code is set to 0. - * - * @param theReason - * the reason why this warning is issued. - * @param theSQLState - * the string to use as the {@code SQLState} string. - */ - public SQLWarning(String theReason, String theSQLState) { - super(theReason, theSQLState); - } - - /** - * Creates an {@code SQLWarning} object. The reason string is set to the - * given reason string, the {@code SQLState} string is set to the given - * {@code SQLState} string and the error code is set to the given error code - * value. - * - * @param theReason - * the reason why this warning is issued. - * @param theSQLState - * the X/Open standard specifc error code. - * @param theErrorCode - * a vendor specific error code. - * @since Android 1.0 - */ - public SQLWarning(String theReason, String theSQLState, int theErrorCode) { - super(theReason, theSQLState, theErrorCode); - } - - /** - * Gets the next {@code SQLWarning} chained to this {@code SQLWarning} object. - * - * @return the {@code SQLWarning} chained to this {@code SQLWarning}. - * {@code null} if no {@code SQLWarning} is chained to this {@code - * SQLWarning}. - * @since Android 1.0 - */ - public SQLWarning getNextWarning() { - SQLException next = super.getNextException(); - if (next == null) { - return null; - } - if (next instanceof SQLWarning) { - return (SQLWarning) next; - } - throw new Error(Messages.getString("sql.8")); //$NON-NLS-1$ - } - - /** - * Chains a supplied {@code SQLWarning} to this {@code SQLWarning}. - * - * @param w - * the {@code SQLWarning} linked to this {@code SQLWarning}. - * @since Android 1.0 - */ - public void setNextWarning(SQLWarning w) { - super.setNextException(w); - } -} diff --git a/sql/src/main/java/java/sql/Savepoint.java b/sql/src/main/java/java/sql/Savepoint.java deleted file mode 100644 index 42b4a17..0000000 --- a/sql/src/main/java/java/sql/Savepoint.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -/** - * A savepoint is an instant during the current transaction that can be utilized - * by a rollback via the {@link Connection#rollback} command. Rolling back to a - * particular savepoint means that all changes that occurred after that - * savepoint are undone. - * - * @since Android 1.0 - */ -public interface Savepoint { - - /** - * Returns the constructed ID for this savepoint. - * - * @return the ID for this savepoint. - * @throws SQLException - * if an error occurrs accessing the database. - * @since Android 1.0 - */ - public int getSavepointId() throws SQLException; - - /** - * Returns the name for this savepoint. - * - * @return the name of this savepoint. - * @throws SQLException - * if an error occurrs accessing the database. - * @since Android 1.0 - */ - public String getSavepointName() throws SQLException; -} diff --git a/sql/src/main/java/java/sql/Statement.java b/sql/src/main/java/java/sql/Statement.java deleted file mode 100644 index 4985a9e..0000000 --- a/sql/src/main/java/java/sql/Statement.java +++ /dev/null @@ -1,716 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -/** - * Interface used for executing static SQL statements to retrieve query results. - * The resulting table rows are returned as {@code ResultSet}s. For any given - * {@code Statement} object, only one {@code ResultSet} can be opened at one - * time. A call to any of the execution methods of {@code Statement} will cause - * any previously created {@code ResultSet} object for that {@code Statement} to - * be closed implicitly. - * <p> - * To have multiple {@code ResultSet} objects opened concurrently, multiple - * {@code Statement} objects must be created and then executed. - * </p> - * <p> - * To obtain such an executable statement one needs to invoke {@code - * Connection#createStatement}. - * </p> - * - * @see ResultSet - * @see Connection#createStatement - * - * @since Android 1.0 - */ -public interface Statement { - - /** - * Passing this constant to {@link #getMoreResults} implies that all {@code - * ResultSet} objects previously kept open should be closed. - * - * @since Android 1.0 - */ - public static final int CLOSE_ALL_RESULTS = 3; - - /** - * Passing this constant to {@link #getMoreResults} implies that the current - * {@code ResultSet} object should be closed. - * - * @since Android 1.0 - */ - public static final int CLOSE_CURRENT_RESULT = 1; - - /** - * Indicates that an error was encountered during execution of a batch - * statement. - * - * @since Android 1.0 - */ - public static final int EXECUTE_FAILED = -3; - - /** - * Passing this constant to <i>getMoreResults</i> implies that the current - * {@code ResultSet} object should not be closed. - * - * @since Android 1.0 - */ - public static final int KEEP_CURRENT_RESULT = 2; - - /** - * Indicates that generated keys should not be accessible for retrieval. - * - * @since Android 1.0 - */ - public static final int NO_GENERATED_KEYS = 2; - - /** - * Indicates that generated keys should be accessible for retrieval. - * - * @since Android 1.0 - */ - public static final int RETURN_GENERATED_KEYS = 1; - - /** - * Indicates that a batch statement was executed with a successful result, - * but a count of the number of rows it affected is unavailable. - * - * @since Android 1.0 - */ - public static final int SUCCESS_NO_INFO = -2; - - /** - * Adds a specified SQL command to the list of commands for this {@code - * Statement}. - * <p> - * The list of commands is executed by invoking the {@code executeBatch} - * method. - * </p> - * - * @param sql - * the SQL command as a String. Typically an {@code INSERT} or - * {@code UPDATE} statement. - * @throws SQLException - * if an error occurs accessing the database or the database - * does not support batch updates. - * @since Android 1.0 - */ - public void addBatch(String sql) throws SQLException; - - /** - * Cancels this statement's execution if both the database and the JDBC - * driver support aborting an SQL statement in flight. This method can be - * used by one thread to stop a statement that is executed on another - * thread. - * - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void cancel() throws SQLException; - - /** - * Clears the current list of SQL commands for this statement. - * - * @throws SQLException - * if an error occurs accessing the database or the database - * does not support batch updates. - * @since Android 1.0 - */ - public void clearBatch() throws SQLException; - - /** - * Clears all {@code SQLWarnings} from this statement. - * - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void clearWarnings() throws SQLException; - - /** - * Releases this statement's database and JDBC driver resources. - * <p> - * Using this method to release these resources as soon as possible is - * strongly recommended. - * </p> - * <p> - * One should not rely on the resources being automatically released when - * finalized during garbage collection. Doing so can result in unpredictable - * behavior for the application. - * </p> - * - * @throws SQLException - * if an error occurs accessing the database. - */ - public void close() throws SQLException; - - /** - * Executes a supplied SQL statement. This may return multiple {@code - * ResultSet}s. - * <p> - * Use the {@code getResultSet} or {@code getUpdateCount} methods to get the - * first result and {@code getMoreResults} to get any subsequent results. - * </p> - * - * @param sql - * the SQL statement to execute - * @return {@code true} if the first result is a {@code ResultSet}, {@code - * false} if the first result is an update count or if there is no - * result. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public boolean execute(String sql) throws SQLException; - - /** - * Executes a supplied SQL statement. This may return multiple {@code - * ResultSet}s. This method allows control of whether auto-generated Keys - * should be made available for retrieval, if the SQL statement is an - * {@code INSERT} statement. - * <p> - * Use the {@code getResultSet} or {@code getUpdateCount} methods to get the - * first result and {@code getMoreResults} to get any subsequent results. - * </p> - * - * @param sql - * the SQL statement to execute. - * @param autoGeneratedKeys - * a flag indicating whether to make auto generated keys - * available for retrieval. This parameter must be one of {@code - * Statement.NO_GENERATED_KEYS} or {@code - * Statement.RETURN_GENERATED_KEYS}. - * @return {@code true} if results exists and the first result is a {@code - * ResultSet}, {@code false} if the first result is an update count - * or if there is no result. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public boolean execute(String sql, int autoGeneratedKeys) - throws SQLException; - - /** - * Executes the supplied SQL statement. This may return multiple {@code - * ResultSet}s. This method allows retrieval of auto generated keys - * specified by the supplied array of column indexes, if the SQL statement - * is an {@code INSERT} statement. - * <p> - * Use the {@code getResultSet} or {@code getUpdateCount} methods to get the - * first result and {@code getMoreResults} to get any subsequent results. - * </p> - * - * @param sql - * the SQL statement to execute. - * @param columnIndexes - * an array of indexes of the columns in the inserted row which - * should be made available for retrieval via the {@code - * getGeneratedKeys} method. - * @return {@code true} if the first result is a {@code ResultSet}, {@code - * false} if the first result is an update count or if there is no - * result. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public boolean execute(String sql, int[] columnIndexes) throws SQLException; - - /** - * Executes the supplied SQL statement. This may return multiple {@code - * ResultSet}s. This method allows retrieval of auto generated keys - * specified by the supplied array of column indexes, if the SQL statement - * is an {@code INSERT} statement. - * <p> - * Use the {@code getResultSet} or {@code getUpdateCount} methods to get the - * first result and {@code getMoreResults} to get any subsequent results. - * </p> - * - * @param sql - * the SQL statement to execute. - * @param columnNames - * an array of column names in the inserted row which should be - * made available for retrieval via the {@code getGeneratedKeys} - * method. - * @return {@code true} if the first result is a {@code ResultSet}, {@code - * false} if the first result is an update count or if there is no - * result - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public boolean execute(String sql, String[] columnNames) - throws SQLException; - - /** - * Submits a batch of SQL commands to the database. Returns an array of - * update counts, if all the commands execute successfully. - * <p> - * If one of the commands in the batch fails, this method can throw a - * {@link BatchUpdateException} and the JDBC driver may or may not process - * the remaining commands. The JDBC driver must behave consistently with the - * underlying database, following the "all or nothing" principle. If the - * driver continues processing, the array of results returned contains the - * same number of elements as there are commands in the batch, with a - * minimum of one of the elements having the {@code EXECUTE_FAILED} value. - * - * @return an array of update counts, with one entry for each command in the - * batch. The elements are ordered according to the order in which - * the commands were added to the batch. - * <p> - * <ol> - * <li>If the value of an element is ≥ 0, the corresponding - * command completed successfully and the value is the <i>update - * count</i> (the number of rows in the database affected by the - * command) for that command.</li> - * <li>If the value is {@code SUCCESS_NO_INFO}, the command - * completed successfully but the number of rows affected is - * unknown. - * <li> - * <li>If the value is {@code EXECUTE_FAILED}, the command failed. - * </ol> - * @throws SQLException - * if an error occurs accessing the database. - */ - public int[] executeBatch() throws SQLException; - - /** - * Executes a supplied SQL statement. Returns a single {@code ResultSet}. - * - * @param sql - * an SQL statement to execute. Typically a {@code SELECT} - * statement - * @return a {@code ResultSet} containing the data produced by the SQL - * statement. Never null. - * @throws SQLException - * if an error occurs accessing the database or if the statement - * produces anything other than a single {@code ResultSet}. - * @since Android 1.0 - */ - public ResultSet executeQuery(String sql) throws SQLException; - - /** - * Executes the supplied SQL statement. The statement may be an {@code - * INSERT}, {@code UPDATE} or {@code DELETE} statement or a statement which - * returns nothing. - * - * @param sql - * an SQL statement to execute - an SQL {@code INSERT}, {@code - * UPDATE}, {@code DELETE} or a statement which returns nothing - * @return the count of updated rows, or 0 for a statement that returns - * nothing. - * @throws SQLException - * if an error occurs accessing the database or if the statement - * produces a {@code ResultSet}. - * @since Android 1.0 - */ - public int executeUpdate(String sql) throws SQLException; - - /** - * Executes the supplied SQL statement. This method allows control of - * whether auto-generated Keys should be made available for retrieval. - * - * @param sql - * an SQL statement to execute - an SQL {@code INSERT}, {@code - * UPDATE}, {@code DELETE} or a statement which does not return - * anything. - * @param autoGeneratedKeys - * a flag that indicates whether to allow retrieval of auto - * generated keys. Parameter must be one of {@code - * Statement.RETURN_GENERATED_KEYS} or {@code - * Statement.NO_GENERATED_KEYS} - * @return the number of updated rows, or 0 if the statement returns - * nothing. - * @throws SQLException - * if an error occurs accessing the database or if the statement - * produces a {@code ResultSet}. - * @since Android 1.0 - */ - public int executeUpdate(String sql, int autoGeneratedKeys) - throws SQLException; - - /** - * Executes the supplied SQL statement. This method allows retrieval of auto - * generated keys specified by the supplied array of column indexes. - * - * @param sql - * an SQL statement to execute - an SQL {@code INSERT}, {@code - * UPDATE}, {@code DELETE} or a statement which returns nothing - * @param columnIndexes - * an array of indexes of the columns in the inserted row which - * should be made available for retrieval via the {@code - * getGeneratedKeys} method. - * @return the count of updated rows, or 0 for a statement that returns - * nothing. - * @throws SQLException - * if an error occurs accessing the database or if the statement - * produces a {@code ResultSet}. - * @since Android 1.0 - */ - public int executeUpdate(String sql, int[] columnIndexes) - throws SQLException; - - /** - * Executes the supplied SQL statement. This method allows retrieval of auto - * generated keys specified by the supplied array of column names. - * - * @param sql - * an SQL statement to execute - an SQL {@code INSERT}, {@code - * UPDATE}, {@code DELETE} or a statement which returns nothing - * @param columnNames - * an array of column names in the inserted row which should be - * made available for retrieval via the {@code getGeneratedKeys} - * method. - * @return the count of updated rows, or 0 for a statement that returns - * nothing. - * @throws SQLException - * if an error occurs accessing the database or if the statement - * produces a {@code ResultSet}. - * @since Android 1.0 - */ - public int executeUpdate(String sql, String[] columnNames) - throws SQLException; - - /** - * Gets the {@code Connection} object which created this statement. - * - * @return the {@code Connection} through which this statement is - * transmitted to the database. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public Connection getConnection() throws SQLException; - - /** - * Gets the default direction for fetching rows for {@code ResultSet}s - * generated from this statement. - * - * @return the default fetch direction, one of: - * <ul> - * <li>ResultSet.FETCH_FORWARD</li> <li>ResultSet.FETCH_REVERSE</li> - * <li>ResultSet.FETCH_UNKNOWN</li> - * </ul> - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public int getFetchDirection() throws SQLException; - - /** - * Gets the default number of rows for a fetch for the {@code ResultSet} - * objects returned from this statement. - * - * @return the default fetch size for {@code ResultSet}s produced by this - * statement. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public int getFetchSize() throws SQLException; - - /** - * Returns auto generated keys created by executing this statement. - * - * @return a {@code ResultSet} containing the auto generated keys - empty if - * no keys are generated by this statement. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public ResultSet getGeneratedKeys() throws SQLException; - - /** - * Gets the maximum number of bytes which can be returned as values from - * character and binary type columns in a {@code ResultSet} derived from this - * statement. This limit applies to {@code BINARY}, {@code VARBINARY}, - * {@code LONGVARBINARY}, {@code CHAR}, {@code VARCHAR}, and {@code - * LONGVARCHAR} types. Any data exceeding the maximum size is abandoned - * without announcement. - * - * @return the current size limit, where {@code 0} means that there is no - * limit. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public int getMaxFieldSize() throws SQLException; - - /** - * Gets the maximum number of rows that a {@code ResultSet} can contain when - * produced from this statement. If the limit is exceeded, the excess rows - * are discarded silently. - * - * @return the current row limit, where {@code 0} means that there is no - * limit. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public int getMaxRows() throws SQLException; - - /** - * Moves to this statement's next result. Returns {@code true} if it is a - * {@code ResultSet}. Any current {@code ResultSet} objects previously - * obtained with {@code getResultSet()} are closed implicitly. - * - * @return {@code true} if the next result is a {@code ResultSet}, {@code - * false} if the next result is not a {@code ResultSet} or if there - * are no more results. Note that if there is no more data, this - * method will return {@code false} and {@code getUpdateCount} will - * return -1. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public boolean getMoreResults() throws SQLException; - - /** - * Moves to this statement's next result. Returns {@code true} if the next - * result is a {@code ResultSet}. Any current {@code ResultSet} objects - * previously obtained with {@code getResultSet()} are handled as indicated - * by a supplied Flag parameter. - * - * @param current - * a flag indicating what to do with existing {@code ResultSet}s. - * This parameter must be one of {@code - * Statement.CLOSE_ALL_RESULTS}, {@code - * Statement.CLOSE_CURRENT_RESULT} or {@code - * Statement.KEEP_CURRENT_RESULT}. - * @return {@code true} if the next result exists and is a {@code ResultSet} - * , {@code false} if the next result is not a {@code ResultSet} or - * if there are no more results. Note that if there is no more data, - * this method will return {@code false} and {@code getUpdateCount} - * will return -1. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public boolean getMoreResults(int current) throws SQLException; - - /** - * Gets the timeout value for the statement's execution time. The JDBC - * driver will wait up to this value for the execution to complete - after - * the limit is exceeded an SQL {@code Exception} is thrown. - * - * @return the current query timeout value, where {@code 0} indicates that - * there is no current timeout. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public int getQueryTimeout() throws SQLException; - - /** - * Gets the current result. Should only be called once per result. - * - * @return the {@code ResultSet} for the current result. {@code null} if the - * result is an update count or if there are no more results. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public ResultSet getResultSet() throws SQLException; - - /** - * Gets the concurrency setting for {@code ResultSet} objects generated by - * this statement. - * - * @return {@code ResultSet.CONCUR_READ_ONLY} or {@code - * ResultSet.CONCUR_UPDATABLE}. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public int getResultSetConcurrency() throws SQLException; - - /** - * Gets the cursor hold setting for {@code ResultSet} objects generated by - * this statement. - * - * @return {@code ResultSet.HOLD_CURSORS_OVER_COMMIT} or {@code - * ResultSet.CLOSE_CURSORS_AT_COMMIT} - * @throws SQLException - * if there is an error while accessing the database. - * @since Android 1.0 - */ - public int getResultSetHoldability() throws SQLException; - - /** - * Gets the {@code ResultSet} type setting for {@code ResultSet}s derived - * from this statement. - * - * @return {@code ResultSet.TYPE_FORWARD_ONLY} for a {@code ResultSet} where - * the cursor can only move forwards, {@code - * ResultSet.TYPE_SCROLL_INSENSITIVE} for a {@code ResultSet} which - * is scrollable but is not sensitive to changes made by others, - * {@code ResultSet.TYPE_SCROLL_SENSITIVE} for a {@code ResultSet} - * which is scrollable but is sensitive to changes made by others. - * @throws SQLException - * if there is an error accessing the database. - * @since Android 1.0 - */ - public int getResultSetType() throws SQLException; - - /** - * Gets an update count for the current result if it is not a {@code - * ResultSet}. - * - * @return the current result as an update count. {@code -1} if the current - * result is a {@code ResultSet} or if there are no more results. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public int getUpdateCount() throws SQLException; - - /** - * Retrieves the first {@code SQLWarning} reported by calls on this - * statement. If there are multiple warnings, subsequent warnings are - * chained to the first one. The chain of warnings is cleared each time the - * statement is executed. - * <p> - * Warnings associated with reads from the {@code ResultSet} returned from - * executing the statement will be attached to the {@code ResultSet}, not the - * statement object. - * </p> - * - * @return an SQLWarning, null if there are no warnings - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public SQLWarning getWarnings() throws SQLException; - - /** - * Sets the SQL cursor name. This name is used by subsequent statement - * execute methods. - * <p> - * Cursor names must be unique within one Connection. - * </p> - * <p> - * With the cursor name set, it can then be used in SQL positioned - * update or delete statements to determine the current row in a {@code - * ResultSet} generated from this statement. The positioned update or delete - * must be done with a different statement than this one. - * </p> - * - * @param name - * the Cursor name as a string, - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setCursorName(String name) throws SQLException; - - /** - * Sets Escape Processing mode. - * <p> - * If Escape Processing is on, the JDBC driver will do escape substitution - * on an SQL statement before sending it for execution. This does not apply - * to {@link PreparedStatement}s since they are processed when created, - * before this method can be called. - * </p> - * - * @param enable - * {@code true} to set escape processing mode <i>on</i>, {@code - * false} to turn it <i>off</i>. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setEscapeProcessing(boolean enable) throws SQLException; - - /** - * Sets the fetch direction - a hint to the JDBC driver about the direction - * of processing of rows in {@code ResultSet}s created by this statement. - * The default fetch direction is {@code FETCH_FORWARD}. - * - * @param direction - * which fetch direction to use. This parameter should be one of - * <ul> - * <li>{@code ResultSet.FETCH_UNKNOWN}</li> - * <li>{@code ResultSet.FETCH_FORWARD}</li> - * <li>{@code ResultSet.FETCH_REVERSE}</li> - * </ul> - * @throws SQLException - * if there is an error while accessing the database or if the - * fetch direction is unrecognized. - */ - public void setFetchDirection(int direction) throws SQLException; - - /** - * Sets the fetch size. This is a hint to the JDBC driver about how many - * rows should be fetched from the database when more are required by - * application processing. - * - * @param rows - * the number of rows that should be fetched. {@code 0} tells the driver - * to ignore the hint. Should be less than {@code getMaxRows} for - * this statement. Should not be negative. - * @throws SQLException - * if an error occurs accessing the database, or if the rows - * parameter is out of range. - * @since Android 1.0 - */ - public void setFetchSize(int rows) throws SQLException; - - /** - * Sets the maximum number of bytes for {@code ResultSet} columns that - * contain character or binary values. This applies to {@code BINARY}, - * {@code VARBINARY}, {@code LONGVARBINARY}, {@code CHAR}, {@code VARCHAR}, - * and {@code LONGVARCHAR} fields. Any data exceeding the maximum size is - * abandoned without announcement. - * - * @param max - * the maximum field size in bytes. {@code 0} means "no limit". - * @throws SQLException - * if an error occurs accessing the database or the {@code max} - * value is < {@code 0}. - * @since Android 1.0 - */ - public void setMaxFieldSize(int max) throws SQLException; - - /** - * Sets the maximum number of rows that any {@code ResultSet} can contain. - * If the number of rows exceeds this value, the additional rows are - * silently discarded. - * - * @param max - * the maximum number of rows. {@code 0} means "no limit". - * @throws SQLException - * if an error occurs accessing the database or if max < {@code - * 0}. - * @since Android 1.0 - */ - public void setMaxRows(int max) throws SQLException; - - /** - * Sets the timeout, in seconds, for queries - how long the driver will - * allow for completion of a statement execution. If the timeout is - * exceeded, the query will throw an {@code SQLException}. - * - * @param seconds - * timeout in seconds. 0 means no timeout ("wait forever") - * @throws SQLException - * if an error occurs accessing the database or if seconds < - * {@code 0}. - * @since Android 1.0 - */ - public void setQueryTimeout(int seconds) throws SQLException; -} diff --git a/sql/src/main/java/java/sql/Struct.java b/sql/src/main/java/java/sql/Struct.java deleted file mode 100644 index 1167cdf..0000000 --- a/sql/src/main/java/java/sql/Struct.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.util.Map; - -/** - * An interface which provides facilities for manipulating an SQL structured type - * as a Java object. The {@code Struct} object has a value for each attribute of the SQL structured - * type. - * - * @since Android 1.0 - */ -public interface Struct { - - /** - * Gets the SQL Type name of the SQL structured type that this {@code - * Struct} represents. - * - * @return the fully qualified name of SQL structured type. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public String getSQLTypeName() throws SQLException; - - /** - * Gets the values of the attributes of this SQL structured type. This - * method uses the type map associated with the {@link Connection} for - * customized type mappings. Where there is no entry in the type mapping - * which matches this structured type, the JDBC driver uses the standard - * mapping. - * - * @return an {@code Object} array containing the ordered attributes. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Object[] getAttributes() throws SQLException; - - /** - * Gets the values of the attributes of this SQL structured type. This - * method uses the supplied type mapping to determine how to map SQL types - * to their corresponding Java objects. In the - * case where there is no entry in the type mapping which matches this - * structured type, the JDBC driver uses the default mapping. The {@code - * Connection} type map is <i>never</i> utilized by this method. - * - * @param theMap - * a Map describing how SQL Type names are mapped to classes. - * @return an Object array containing the ordered attributes,. - * @throws SQLException - * if a database error occurs. - * @since Android 1.0 - */ - public Object[] getAttributes(Map<String, Class<?>> theMap) - throws SQLException; -} diff --git a/sql/src/main/java/java/sql/Time.java b/sql/src/main/java/java/sql/Time.java deleted file mode 100644 index 7fb28e1..0000000 --- a/sql/src/main/java/java/sql/Time.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * Java representation of an SQL {@code TIME} value. Provides utilities to - * format and parse the time's representation as a String in JDBC escape format. - * - * @since Android 1.0 - */ -public class Time extends Date { - - private static final long serialVersionUID = 8397324403548013681L; - - /** - * Constructs a {@code Time} object using the supplied values for <i>Hour</i>, - * <i>Minute</i> and <i>Second</i>. The <i>Year</i>, <i>Month</i> and - * <i>Day</i> elements of the {@code Time} object are set to the date - * of the Epoch (January 1, 1970). - * <p> - * Any attempt to access the <i>Year</i>, <i>Month</i> or <i>Day</i> - * elements of a {@code Time} object will result in an {@code - * IllegalArgumentException}. - * </p><p> - * The result is undefined if any argument is out of bounds. - * </p> - * - * @deprecated Please use the constructor {@link #Time(long)}. - * @param theHour - * a value in the range {@code [0,23]}. - * @param theMinute - * a value in the range {@code [0,59]}. - * @param theSecond - * a value in the range {@code [0,59]}. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - public Time(int theHour, int theMinute, int theSecond) { - super(70, 0, 1, theHour, theMinute, theSecond); - } - - /** - * Constructs a {@code Time} object using a supplied time specified in - * milliseconds. - * - * @param theTime - * a {@code Time} specified in milliseconds since the - * <i>Epoch</i> (January 1st 1970, 00:00:00.000). - * @since Android 1.0 - */ - public Time(long theTime) { - super(theTime); - } - - /** - * @deprecated This method is deprecated and must not be used. An SQL - * {@code Time} object does not have a {@code Date} component. - * @return does not return anything. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public int getDate() { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. An SQL - * {@code Time} object does not have a <i>Day</i> component. - * @return does not return anything. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public int getDay() { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. An SQL - * {@code Time} object does not have a <i>Month</i> component. - * @return does not return anything. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public int getMonth() { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. An SQL - * {@code Time} object does not have a <i>Year</i> component. - * @return does not return anything. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public int getYear() { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. An SQL - * {@code Time} object does not have a {@code Date} component. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public void setDate(int i) { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. An SQL - * {@code Time} object does not have a <i>Month</i> component. - * @throws IllegalArgumentException - * if this method is called. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public void setMonth(int i) { - throw new IllegalArgumentException(); - } - - /** - * @deprecated This method is deprecated and must not be used. An SQL - * {@code Time} object does not have a <i>Year</i> component. - * @throws IllegalArgumentException - * if this method is called. - */ - @SuppressWarnings("deprecation") - @Deprecated - @Override - public void setYear(int i) { - throw new IllegalArgumentException(); - } - - /** - * Sets the time for this {@code Time} object to the supplied milliseconds - * value. - * - * @param time - * A time value expressed as milliseconds since the <i>Epoch</i>. - * Negative values are milliseconds before the Epoch. The Epoch - * is January 1 1970, 00:00:00.000. - * @since Android 1.0 - */ - @Override - public void setTime(long time) { - super.setTime(time); - } - - /** - * Formats the {@code Time} as a String in JDBC escape format: {@code - * hh:mm:ss}. - * - * @return A String representing the {@code Time} value in JDBC escape - * format: {@code HH:mm:ss} - * @since Android 1.0 - */ - @Override - public String toString() { - SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //$NON-NLS-1$ - return dateFormat.format(this); - } - - /** - * Creates a {@code Time} object from a string holding a time represented in - * JDBC escape format: {@code hh:mm:ss}. - * <p> - * An exception occurs if the input string does not comply with this format. - * </p> - * - * @param timeString - * A String representing the time value in JDBC escape format: - * {@code hh:mm:ss}. - * @return The {@code Time} object set to a time corresponding to the given - * time. - * @throws IllegalArgumentException - * if the supplied time string is not in JDBC escape format. - * @since Android 1.0 - */ - public static Time valueOf(String timeString) { - if (timeString == null) { - throw new IllegalArgumentException(); - } - int firstIndex = timeString.indexOf(':'); - int secondIndex = timeString.indexOf(':', firstIndex + 1); - // secondIndex == -1 means none or only one separator '-' has been found. - // The string is separated into three parts by two separator characters, - // if the first or the third part is null string, we should throw - // IllegalArgumentException to follow RI - if (secondIndex == -1|| firstIndex == 0 || secondIndex + 1 == timeString.length()) { - throw new IllegalArgumentException(); - } - // parse each part of the string - int hour = Integer.parseInt(timeString.substring(0, firstIndex)); - int minute = Integer.parseInt(timeString.substring(firstIndex + 1, secondIndex)); - int second = Integer.parseInt(timeString.substring(secondIndex + 1, timeString - .length())); - return new Time(hour, minute, second); - } -} diff --git a/sql/src/main/java/java/sql/Timestamp.java b/sql/src/main/java/java/sql/Timestamp.java deleted file mode 100644 index b526fb3..0000000 --- a/sql/src/main/java/java/sql/Timestamp.java +++ /dev/null @@ -1,530 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -import java.text.DecimalFormat; -import java.text.ParsePosition; -import java.text.SimpleDateFormat; -import java.util.Date; - -import org.apache.harmony.sql.internal.nls.Messages; - -/** - * A Java representation of the SQL {@code TIMESTAMP} type. It provides the - * capability of representing the SQL {@code TIMESTAMP} nanosecond value, in - * addition to the regular date/time value which has millisecond resolution. - * <p> - * The {@code Timestamp} class consists of a regular date/time value, where only - * the integral seconds value is stored, plus a nanoseconds value where the - * fractional seconds are stored. - * </p><p> - * The addition of the nanosecond value field to the {@code Timestamp} object - * makes it significantly different from the {@code java.util.Date} object which - * it extends. Users should be aware that {@code Timestamp} objects are not - * interchangable with {@code java.util.Date} objects when used outside the - * confines of the {@code java.sql} package. - * </p> - * - * @see Date - * @see Time - * @see java.util.Date - * @since Android 1.0 - */ -public class Timestamp extends Date { - - private static final long serialVersionUID = 2745179027874758501L; - - // The nanoseconds time value of the Timestamp - private int nanos; - - /** - * Returns a {@code Timestamp} corresponding to the time specified by the - * supplied values for <i>Year</i>, <i>Month</i>, <i>Date</i>, <i>Hour</i>, - * <i>Minutes</i>, <i>Seconds</i> and <i>Nanoseconds</i>. - * - * @deprecated Please use the constructor {@link #Timestamp(long)}. - * @param theYear - * specified as the year minus 1900. - * @param theMonth - * specified as an integer in the range [0,11]. - * @param theDate - * specified as an integer in the range [1,31]. - * @param theHour - * specified as an integer in the range [0,23]. - * @param theMinute - * specified as an integer in the range [0,59]. - * @param theSecond - * specified as an integer in the range [0,59]. - * @param theNano - * which defines the nanosecond value of the timestamp specified - * as an integer in the range [0,999'999'999] - * @throws IllegalArgumentException - * if any of the parameters is out of range. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Deprecated - public Timestamp(int theYear, int theMonth, int theDate, int theHour, - int theMinute, int theSecond, int theNano) - throws IllegalArgumentException { - super(theYear, theMonth, theDate, theHour, theMinute, theSecond); - if (theNano < 0 || theNano > 999999999) { - throw new IllegalArgumentException(); - } - nanos = theNano; - } - - /** - * Returns a {@code Timestamp} object corresponding to the time represented - * by a supplied time value. - * - * @param theTime - * a time value in the format of milliseconds since the Epoch - * (January 1 1970 00:00:00.000 GMT). - * @since Android 1.0 - */ - public Timestamp(long theTime) { - super(theTime); - /* - * Now set the time for this Timestamp object - which deals with the - * nanosecond value as well as the base time - */ - this.setTime(theTime); - } - - /** - * Returns {@code true} if this timestamp object is later than the supplied - * timestamp, otherwise returns {@code false}. - * - * @param theTimestamp - * the timestamp to compare with this timestamp object. - * @return {@code true} if this {@code Timestamp} object is later than the - * supplied timestamp, {@code false} otherwise. - * @since Android 1.0 - */ - public boolean after(Timestamp theTimestamp) { - long thisTime = this.getTime(); - long compareTime = theTimestamp.getTime(); - - // If the time value is later, the timestamp is later - if (thisTime > compareTime) { - return true; - } - // If the time value is earlier, the timestamp is not later - else if (thisTime < compareTime) { - return false; - } - /* - * Otherwise the time values are equal in which case the nanoseconds - * value determines whether this timestamp is later... - */ - else if (this.getNanos() > theTimestamp.getNanos()) { - return true; - } else { - return false; - } - } - - /** - * Returns {@code true} if this {@code Timestamp} object is earlier than the - * supplied timestamp, otherwise returns {@code false}. - * - * @param theTimestamp - * the timestamp to compare with this {@code Timestamp} object. - * @return {@code true} if this {@code Timestamp} object is earlier than the - * supplied timestamp, {@code false} otherwise. - * @since Android 1.0 - */ - public boolean before(Timestamp theTimestamp) { - long thisTime = this.getTime(); - long compareTime = theTimestamp.getTime(); - - // If the time value is later, the timestamp is later - if (thisTime < compareTime) { - return true; - } - // If the time value is earlier, the timestamp is not later - else if (thisTime > compareTime) { - return false; - } - /* - * Otherwise the time values are equal in which case the nanoseconds - * value determines whether this timestamp is later... - */ - else if (this.getNanos() < theTimestamp.getNanos()) { - return true; - } else { - return false; - } - } - - /** - * Compares this {@code Timestamp} object with a supplied {@code Timestamp} - * object. - * - * @param theObject - * the timestamp to compare with this {@code Timestamp} object, - * passed as an {@code Object}. - * @return <dd> - * <dl> - * {@code 0} if the two {@code Timestamp} objects are equal in time - * </dl> - * <dl> - * a value {@code < 0} if this {@code Timestamp} object is before - * the supplied {@code Timestamp} and a value - * </dl> - * <dl> - * {@code > 0} if this {@code Timestamp} object is after the - * supplied {@code Timestamp} - * </dl> - * </dd> - * @throws ClassCastException - * if the supplied object is not a {@code Timestamp} object. - * @since Android 1.0 - */ - @Override - public int compareTo(Date theObject) throws ClassCastException { - return this.compareTo((Timestamp) theObject); - } - - /** - * Compares this {@code Timestamp} object with a supplied {@code Timestamp} - * object. - * - * @param theTimestamp - * the timestamp to compare with this {@code Timestamp} object, - * passed in as a {@code Timestamp}. - * @return one of the following: - * <ul> - * <li>{@code 0}, if the two {@code Timestamp} objects are - * equal in time</li> - * <li>{@code < 0}, if this {@code Timestamp} object is before the - * supplied {@code Timestamp}</li> - * <li> {@code > 0}, if this {@code Timestamp} object is after the - * supplied {@code Timestamp}</li> - * </ul> - * @since Android 1.0 - */ - public int compareTo(Timestamp theTimestamp) { - int result = super.compareTo(theTimestamp); - if (result == 0) { - int thisNano = this.getNanos(); - int thatNano = theTimestamp.getNanos(); - if (thisNano > thatNano) { - return 1; - } else if (thisNano == thatNano) { - return 0; - } else { - return -1; - } - } - return result; - } - - /** - * Tests to see if this timestamp is equal to a supplied object. - * - * @param theObject - * the object to which this timestamp is compared. - * @return {@code true} if this {@code Timestamp} object is equal to the - * supplied {@code Timestamp} object<br>{@code false} if the object - * is not a {@code Timestamp} object or if the object is a {@code - * Timestamp} but represents a different instant in time. - * @since Android 1.0 - */ - @Override - public boolean equals(Object theObject) { - if (theObject instanceof Timestamp) { - return equals((Timestamp) theObject); - } - return false; - } - - /** - * Tests to see if this timestamp is equal to a supplied timestamp. - * - * @param theTimestamp - * the timestamp to compare with this {@code Timestamp} object, - * passed as an {@code Object}. - * @return {@code true} if this {@code Timestamp} object is equal to the - * supplied {@code Timestamp} object, {@code false} otherwise. - * @since Android 1.0 - */ - public boolean equals(Timestamp theTimestamp) { - if (theTimestamp == null) { - return false; - } - return (this.getTime() == theTimestamp.getTime()) - && (this.getNanos() == theTimestamp.getNanos()); - } - - /** - * Gets this {@code Timestamp}'s nanosecond value - * - * @return The timestamp's nanosecond value, an integer between 0 and - * 999,999,999. - * @since Android 1.0 - */ - public int getNanos() { - return nanos; - } - - /** - * Returns the time represented by this {@code Timestamp} object, as a long - * value containing the number of milliseconds since the Epoch (January 1 - * 1970, 00:00:00.000 GMT). - * - * @return the number of milliseconds that have passed since January 1 1970, - * 00:00:00.000 GMT. - * @since Android 1.0 - */ - @Override - public long getTime() { - long theTime = super.getTime(); - theTime = theTime + (nanos / 1000000); - return theTime; - } - - /** - * Sets the nanosecond value for this {@code Timestamp}. - * - * @param n - * number of nanoseconds. - * @throws IllegalArgumentException - * if number of nanoseconds smaller than 0 or greater than - * 999,999,999. - * @since Android 1.0 - */ - public void setNanos(int n) throws IllegalArgumentException { - if ((n < 0) || (n > 999999999)) { - // sql.0=Value out of range - throw new IllegalArgumentException(Messages.getString("sql.0")); //$NON-NLS-1$ - } - nanos = n; - } - - /** - * Sets the time represented by this {@code Timestamp} object to the - * supplied time, defined as the number of milliseconds since the Epoch - * (January 1 1970, 00:00:00.000 GMT). - * - * @param theTime - * number of milliseconds since the Epoch (January 1 1970, - * 00:00:00.000 GMT). - * @since Android 1.0 - */ - @Override - public void setTime(long theTime) { - /* - * Deal with the nanoseconds value. The supplied time is in milliseconds - - * so we must extract the milliseconds value and multiply by 1000000 to - * get nanoseconds. Things are more complex if theTime value is - * negative, since then the time value is the time before the Epoch but - * the nanoseconds value of the Timestamp must be positive - so we must - * take the "raw" milliseconds value and subtract it from 1000 to get to - * the true nanoseconds value Simultaneously, recalculate the time value - * to the exact nearest second and reset the Date time value - */ - int milliseconds = (int) (theTime % 1000); - theTime = theTime - milliseconds; - if (milliseconds < 0) { - theTime = theTime - 1000; - milliseconds = 1000 + milliseconds; - } - super.setTime(theTime); - setNanos(milliseconds * 1000000); - } - - /** - * Returns the timestamp formatted as a String in the JDBC Timestamp Escape - * format, which is {@code "yyyy-mm-dd hh:mm:ss.nnnnnnnnn"}. - * - * @return A string representing the instant defined by the {@code - * Timestamp}, in JDBC Timestamp escape format. - * @since Android 1.0 - */ - @SuppressWarnings("deprecation") - @Override - public String toString() { - /* - * Use a DecimalFormat to lay out the nanosecond value as a simple - * string of 9 integers, with leading Zeros - */ - DecimalFormat decimalFormat = new DecimalFormat("0"); //$NON-NLS-1$ - decimalFormat.setMinimumIntegerDigits(9); - decimalFormat.setMaximumIntegerDigits(9); - String theNanos = decimalFormat.format(nanos); - theNanos = stripTrailingZeros(theNanos); - - String year = format((getYear() + 1900), 4); - String month = format((getMonth() + 1), 2); - String date = format(getDate(), 2); - String hours = format(getHours(), 2); - String minutes = format(getMinutes(), 2); - String seconds = format(getSeconds(), 2); - - return year + '-' + month + '-' + date + ' ' + hours + ':' + minutes - + ':' + seconds + '.' + theNanos; - } - - /* - * Private method to format the time - */ - private String format(int date, int digits) { - StringBuilder dateStringBuffer = new StringBuilder(String.valueOf(date)); - while (dateStringBuffer.length() < digits) { - dateStringBuffer = dateStringBuffer.insert(0,'0'); - } - return dateStringBuffer.toString(); - } - - /* - * Private method to strip trailing '0' characters from a string. @param - * inputString the starting string @return a string with the trailing zeros - * stripped - will leave a single 0 at the beginning of the string - */ - private String stripTrailingZeros(String inputString) { - String finalString; - - int i; - for (i = inputString.length(); i > 0; i--) { - if (inputString.charAt(i - 1) != '0') { - break; - } - /* - * If the string has a 0 as its first character, return a string - * with a single '0' - */ - if (i == 1) { - return "0"; //$NON-NLS-1$ - } - } - - finalString = inputString.substring(0, i); - return finalString; - } - - /** - * Creates a {@code Timestamp} object with a time value equal to the time - * specified by a supplied String holding the time in JDBC timestamp escape - * format, which is {@code "yyyy-mm-dd hh:mm:ss.nnnnnnnnn}" - * - * @param s - * the {@code String} containing a time in JDBC timestamp escape - * format. - * @return A {@code Timestamp} object with time value as defined by the - * supplied {@code String}. - * @throws IllegalArgumentException - * if the provided string is {@code null}. - * @since Android 1.0 - */ - public static Timestamp valueOf(String s) throws IllegalArgumentException { - if (s == null) { - // sql.3=Argument cannot be null - throw new IllegalArgumentException(Messages.getString("sql.3")); //$NON-NLS-1$ - } - - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //$NON-NLS-1$ - ParsePosition pp = new ParsePosition(0); - - /* - * First parse out the yyyy-MM-dd HH:mm:ss component of the String into - * a Date object using the SimpleDateFormat. This should stop after the - * seconds value, according to the definition of SimpleDateFormat.parse, - * with the ParsePosition indicating the index of the "." which should - * precede the nanoseconds value - */ - Date theDate; - try { - theDate = df.parse(s, pp); - } catch (Exception e) { - throw new IllegalArgumentException(Messages.getString("sql.2")); //$NON-NLS-1$ - } - - if (theDate == null) { - throw new IllegalArgumentException(Messages.getString("sql.2")); //$NON-NLS-1$ - } - - /* - * If we get here, the Date part of the string was OK - now for the - * nanoseconds value. Strictly, this requires the remaining part of the - * String to look like ".nnnnnnnnn". However, we accept anything with a - * '.' followed by 1 to 9 digits - we also accept nothing (no fractions - * of a second). Anything else is interpreted as incorrect format which - * will generate an IllegalArgumentException - */ - int position = pp.getIndex(); - int remaining = s.length() - position; - int theNanos; - - if (remaining == 0) { - // First, allow for the case where no fraction of a second is given: - theNanos = 0; - } else { - /* - * Case where fraction of a second is specified: Require 1 character - * plus the "." in the remaining part of the string... - */ - if ((s.length() - position) < ".n".length()) { //$NON-NLS-1$ - throw new IllegalArgumentException(Messages.getString("sql.2")); //$NON-NLS-1$ - } - - /* - * If we're strict, we should not allow any EXTRA characters after - * the 9 digits - */ - if ((s.length() - position) > ".nnnnnnnnn".length()) { //$NON-NLS-1$ - throw new IllegalArgumentException(Messages.getString("sql.2")); //$NON-NLS-1$ - } - - // Require the next character to be a "." - if (s.charAt(position) != '.') { - // sql.4=Bad input string format: expected '.' not {0} - throw new NumberFormatException(Messages.getString("sql.4", s.charAt(position))); //$NON-NLS-1$ - } - // Get the length of the number string - need to account for the '.' - int nanoLength = s.length() - position - 1; - - // Get the 9 characters following the "." as an integer - String theNanoString = s.substring(position + 1, position + 1 - + nanoLength); - /* - * We must adjust for the cases where the nanos String was not 9 - * characters long by padding out with zeros - */ - theNanoString = theNanoString + "000000000"; //$NON-NLS-1$ - theNanoString = theNanoString.substring(0, 9); - - try { - theNanos = Integer.parseInt(theNanoString); - } catch (Exception e) { - // If we get here, the string was not a number - throw new IllegalArgumentException(Messages.getString("sql.2")); //$NON-NLS-1$ - } - } - - if (theNanos < 0 || theNanos > 999999999) { - throw new IllegalArgumentException(Messages.getString("sql.2")); //$NON-NLS-1$ - } - - Timestamp theTimestamp = new Timestamp(theDate.getTime()); - theTimestamp.setNanos(theNanos); - - return theTimestamp; - } -} diff --git a/sql/src/main/java/java/sql/Types.java b/sql/src/main/java/java/sql/Types.java deleted file mode 100644 index 8ce0421..0000000 --- a/sql/src/main/java/java/sql/Types.java +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package java.sql; - -/** - * A class which defines constants used to identify generic SQL types, also - * called JDBC types. The type constant values are equivalent to those defined - * by X/OPEN. - * - * @since Android 1.0 - */ -public class Types { - - /* - * Private constructor to prevent instantiation. - */ - private Types() { - super(); - } - - /** - * The type code that identifies the SQL type {@code ARRAY}. - * - * @since Android 1.0 - */ - public static final int ARRAY = 2003; - - /** - * The type code that identifies the SQL type {@code BIGINT}. - * - * @since Android 1.0 - */ - public static final int BIGINT = -5; - - /** - * The type code that identifies the SQL type {@code BINARY}. - * - * @since Android 1.0 - */ - public static final int BINARY = -2; - - /** - * The type code that identifies the SQL type {@code BIT}. - * - * @since Android 1.0 - */ - public static final int BIT = -7; - - /** - * The type code that identifies the SQL type {@code BLOB}. - * - * @since Android 1.0 - */ - public static final int BLOB = 2004; - - /** - * The type code that identifies the SQL type {@code BOOLEAN}. - * - * @since Android 1.0 - */ - public static final int BOOLEAN = 16; - - /** - * The type code that identifies the SQL type {@code CHAR}. - * - * @since Android 1.0 - */ - public static final int CHAR = 1; - - /** - * The type code that identifies the SQL type {@code CLOB}. - * - * @since Android 1.0 - */ - public static final int CLOB = 2005; - - /** - * The type code that identifies the SQL type {@code DATALINK}. - * - * @since Android 1.0 - */ - public static final int DATALINK = 70; - - /** - * The type code that identifies the SQL type {@code DATE}. - * - * @since Android 1.0 - */ - public static final int DATE = 91; - - /** - * The type code that identifies the SQL type {@code DECIMAL}. - * - * @since Android 1.0 - */ - public static final int DECIMAL = 3; - - /** - * The type code that identifies the SQL type {@code DISTINCT}. - * - * @since Android 1.0 - */ - public static final int DISTINCT = 2001; - - /** - * The type code that identifies the SQL type {@code DOUBLE}. - * - * @since Android 1.0 - */ - public static final int DOUBLE = 8; - - /** - * The type code that identifies the SQL type {@code FLOAT}. - * - * @since Android 1.0 - */ - public static final int FLOAT = 6; - - /** - * The type code that identifies the SQL type {@code INTEGER}. - * - * @since Android 1.0 - */ - public static final int INTEGER = 4; - - /** - * The type code that identifies the SQL type {@code JAVA_OBJECT}. - * - * @since Android 1.0 - */ - public static final int JAVA_OBJECT = 2000; - - /** - * The type code that identifies the SQL type {@code LONGVARBINARY}. - * - * @since Android 1.0 - */ - public static final int LONGVARBINARY = -4; - - /** - * The type code that identifies the SQL type {@code LONGVARCHAR}. - * - * @since Android 1.0 - */ - public static final int LONGVARCHAR = -1; - - /** - * The type code that identifies the SQL type {@code NULL}. - * - * @since Android 1.0 - */ - public static final int NULL = 0; - - /** - * The type code that identifies the SQL type {@code NUMERIC}. - * - * @since Android 1.0 - */ - public static final int NUMERIC = 2; - - /** - * The type code that identifies that the SQL type is database specific and - * is mapped to a Java object, accessed via the methods - * {@code getObject} and {@code setObject}. - * - * @since Android 1.0 - */ - public static final int OTHER = 1111; - - /** - * The type code that identifies the SQL type {@code REAL}. - * - * @since Android 1.0 - */ - public static final int REAL = 7; - - /** - * The type code that identifies the SQL type {@code REF}. - * - * @since Android 1.0 - */ - public static final int REF = 2006; - - /** - * The type code that identifies the SQL type {@code SMALLINT}. - * - * @since Android 1.0 - */ - public static final int SMALLINT = 5; - - /** - * The type code that identifies the SQL type {@code STRUCT}. - * - * @since Android 1.0 - */ - public static final int STRUCT = 2002; - - /** - * The type code that identifies the SQL type {@code TIME}. - * - * @since Android 1.0 - */ - public static final int TIME = 92; - - /** - * The type code that identifies the SQL type {@code TIMESTAMP}. - * - * @since Android 1.0 - */ - public static final int TIMESTAMP = 93; - - /** - * The type code that identifies the SQL type {@code TINYINT}. - * - * @since Android 1.0 - */ - public static final int TINYINT = -6; - - /** - * The type code that identifies the SQL type {@code VARBINARY}. - * - * @since Android 1.0 - */ - public static final int VARBINARY = -3; - - /** - * The type code that identifies the SQL type {@code VARCHAR}. - * - * @since Android 1.0 - */ - public static final int VARCHAR = 12; -} diff --git a/sql/src/main/java/java/sql/package.html b/sql/src/main/java/java/sql/package.html deleted file mode 100644 index 9ae2488..0000000 --- a/sql/src/main/java/java/sql/package.html +++ /dev/null @@ -1,8 +0,0 @@ -<html> - <body> - <p> - Provides a standard interface for accessing SQL-based databases. - </p> - @since Android 1.0 - </body> -</html>
\ No newline at end of file diff --git a/sql/src/main/java/javax/sql/ConnectionEvent.java b/sql/src/main/java/javax/sql/ConnectionEvent.java deleted file mode 100644 index e07e7c1..0000000 --- a/sql/src/main/java/javax/sql/ConnectionEvent.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.util.EventObject; -import java.sql.SQLException; -import java.io.Serializable; - -/** - * Sent when specific events happen on a {@link PooledConnection} object. These - * events are a facility to report when an application closes the pooled - * connection or when an error occurs in the pooled connection. - * - * @since Android 1.0 - */ -public class ConnectionEvent extends EventObject implements Serializable { - - private static final long serialVersionUID = -4843217645290030002L; - - private SQLException theSQLException; - - /** - * Creates a connection event initialized with the supplied {@code - * PooledConnection} reporting that the application has closed the - * connection. - * - * @param theConnection - * the connection for which this event is created. - * @since Android 1.0 - */ - public ConnectionEvent(PooledConnection theConnection) { - super(theConnection); - } - - /** - * Creates a {@code ConnectionEvent} initialized with the supplied {@code - * PooledConnection} and with the supplied {@code SQLException} indicating - * that an error has occurred within the {@code PooledConnection}. - * - * @param theConnection - * the connection for which this event is created. - * @param theException - * information about the state of error that has occurred on the - * application side. - * @since Android 1.0 - */ - public ConnectionEvent(PooledConnection theConnection, - SQLException theException) { - super(theConnection); - theSQLException = theException; - } - - /** - * Gets the {@code SQLException} which holds information about the error - * which occurred in the {@code PooledConnection}. - * - * @return a {@code SQLException} containing information about the error. - * May be {@code null} if no error has occurred. - * @since Android 1.0 - */ - public SQLException getSQLException() { - return theSQLException; - } -} diff --git a/sql/src/main/java/javax/sql/ConnectionEventListener.java b/sql/src/main/java/javax/sql/ConnectionEventListener.java deleted file mode 100644 index 1333814..0000000 --- a/sql/src/main/java/javax/sql/ConnectionEventListener.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.util.EventListener; - -/** - * An interface used to receive events generated by a {@link PooledConnection}. - * <p> - * This interface would typically be implemented by a component which manages a - * connection pool (a connection pool manager). A connection triggers an event - * to a {@code ConnectionEventListener} either when the application closes a - * connection it has been using or when a significant error occurs while the - * connection is being used. - * </p> - * <p> - * The connection pool manager can return closed connections to the pool for - * later reuse. Connections experiencing an error should be discarded. - * </p> - * - * @since Android 1.0 - */ -public interface ConnectionEventListener extends EventListener { - - /** - * Notifies the {@code ConnectionEventListener} that an application has - * called the {@code close} method on a pooled connection. - * - * @param theEvent - * a {@code ConnectionEvent} containing details about the source - * of the event. - * @since Android 1.0 - */ - public void connectionClosed(ConnectionEvent theEvent); - - /** - * Notifies the {@code ConnectionEventListener} that an error has occurred - * on a {@code PooledConnection}. This notification is triggered <i>before</i> the - * {@code SQLException}, which is available through the event argument, is - * thrown. - * - * @param theEvent - * a {@code ConnectionEvent} containing details about the source - * of the event and the {@code SQLException} that has occurred. - * @since Android 1.0 - */ - public void connectionErrorOccurred(ConnectionEvent theEvent); -} diff --git a/sql/src/main/java/javax/sql/ConnectionPoolDataSource.java b/sql/src/main/java/javax/sql/ConnectionPoolDataSource.java deleted file mode 100644 index d73128b..0000000 --- a/sql/src/main/java/javax/sql/ConnectionPoolDataSource.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.sql.SQLException; -import java.io.PrintWriter; - -/** - * An interface for the creation of {@code ConnectionPoolDataSource} objects. - * Used internally within the package. - * <p> - * A class which implements the {@code ConnectionPoolDataSource} interface is - * typically registered with a JNDI naming service directory and is retrieved - * from there by name. - * </p> - * - * @since Android 1.0 - */ -public interface ConnectionPoolDataSource { - - /** - * Gets the login timeout value for this {@code ConnectionPoolDataSource}. - * The login timeout is the maximum time in seconds that the {@code - * ConnectionPoolDataSource} will wait when opening a connection to a - * database. A timeout value of 0 implies either the system default timeout - * value (if there is one) or that there is no timeout. The default value - * for the login timeout is {@code 0}. - * - * @return the login timeout value in seconds. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public int getLoginTimeout() throws SQLException; - - /** - * Gets the log writer for this {@code ConnectionPoolDataSource}. - * <p> - * The log writer is a stream to which all log and trace messages are sent - * from this {@code ConnectionPoolDataSource}. The log writer can be {@code - * null}, in which case the log and trace capture is disabled. The default - * value for the log writer when an {@code ConnectionPoolDataSource} is - * created is {@code null}. Note that the log writer for an {@code - * ConnectionPoolDataSource} is not the same as the log writer used by a - * {@code DriverManager}. - * </p> - * - * @return a {@code PrintWriter} which is the log writer for this {@code - * ConnectionPoolDataSource}. Can be {@code null}, in which case log - * writing is disabled for this {@code ConnectionPoolDataSource}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public PrintWriter getLogWriter() throws SQLException; - - /** - * Creates a connection to a database which can then be used as a pooled - * connection. - * - * @return a {@code PooledConnection} which represents the connection to the - * database. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public PooledConnection getPooledConnection() throws SQLException; - - /** - * Creates a connection to a database, using the supplied user name and - * password, which can then be used as a pooled connection. - * - * @param theUser - * the a user name for the database login. - * @param thePassword - * the password associated with the user identified by {@code - * theUser}. - * @return a {@code PooledConnection} object which represents the connection - * to the database. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public PooledConnection getPooledConnection(String theUser, - String thePassword) throws SQLException; - - /** - * Sets the login timeout value for this {@code ConnectionPoolDataSource}. - * The login timeout is the maximum time in seconds that the {@code - * ConnectionPoolDataSource} will wait when opening a connection to a - * database. A timeout value of 0 implies either the system default timeout - * value (if there is one) or that there is no timeout. The default value - * for the login timeout is 0. - * - * @param theTimeout - * the new login timeout value in seconds. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void setLoginTimeout(int theTimeout) throws SQLException; - - /** - * Sets the log writer for this {@code ConnectionPoolDataSource}. - * <p> - * The log writer is a stream to which all log and trace messages are sent - * from this {@code ConnectionPoolDataSource}. The log writer can be {@code - * null}, in which case log and trace capture is disabled. The default value - * for the log writer, when a {@code ConnectionPoolDataSource} is created, - * is {@code null}. Note that the log writer for a {@code - * ConnectionPoolDataSource} is not the same as the log writer used by a - * {@code DriverManager}. - * </p> - * - * @param theWriter - * is the log writer for this {@code ConnectionPoolDataSource}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void setLogWriter(PrintWriter theWriter) throws SQLException; -} diff --git a/sql/src/main/java/javax/sql/DataSource.java b/sql/src/main/java/javax/sql/DataSource.java deleted file mode 100644 index 98be761..0000000 --- a/sql/src/main/java/javax/sql/DataSource.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.sql.SQLException; -import java.sql.Connection; -import java.io.PrintWriter; - -/** - * An interface for the creation of {@code Connection} objects which represent a - * connection to a database. This interface is an alternative to the {@code - * java.sql.DriverManager}. - * <p> - * A class which implements the {@code DataSource} interface is typically - * registered with a JNDI naming service directory and is retrieved from there - * by name. - * </p> - * <p> - * The {@code DataSource} interface is typically implemented by the writer of a - * JDBC driver. There are three variants of the {@code DataSource} interface, - * which produce connections with different characteristics: - * </p> - * <ol> - * <li><i>Standard {@code DataSource}</i>: produces standard {@code Connection} - * objects with no special features.</li> - * <li><i>Connection Pool {@code DataSource}</i>: produces {@code - * PooledConnection} objects which require a connection pool manager as an - * intermediary component.</li> - * <li><i>Distributed transaction {@code DataSource} ("XADataSource")</i>: - * produces {@code XAConnection} objects which can be used to handle distributed - * transactions which typically require an intermediary transaction manager - * component. {@code XAConnection} objects also provide connection pooling - * capabilities as well as distributed transaction capabilities.</li> - * </ol> - * <p> - * Note that a JDBC driver which is accessed via the {@code DataSource} - * interface is loaded via a JNDI lookup process. A driver loaded in this way - * does not register itself with the {@code DriverManager}. - * </p> - * - * @since Android 1.0 - */ -public interface DataSource { - - /** - * Creates a connection to the database represented by this {@code - * DataSource}. - * - * @return a {@code Connection} object which is a connection to the - * database. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Connection getConnection() throws SQLException; - - /** - * Creates a connection to the database represented by this {@code - * DataSource}, using the supplied user name and password. - * - * @param theUsername - * the a user name for the database login. - * @param thePassword - * the password associated with the user identified by {@code - * theUsername}. - * @return the {@code Connection} object which is the connection to the - * database. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Connection getConnection(String theUsername, String thePassword) - throws SQLException; - - /** - * Gets the login timeout value for this {@code DataSource}. The login - * timeout is the maximum time in seconds that the {@code DataSource} will - * wait when opening a connection to a database. A timeout value of 0 - * implies either the system default timeout value (if there is one) or that - * there is no timeout. The default value for the login timeout is 0. - * - * @return the login timeout value in seconds. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public int getLoginTimeout() throws SQLException; - - /** - * Gets the log writer for this {@code DataSource}. - * <p> - * The log writer is a stream to which all log and trace messages are sent - * from this {@code DataSource}. The log writer can be {@code null}, in - * which case, log and trace capture is disabled. The default value for the - * log writer when an {@code DataSource} is created is {@code null}. Note - * that the log writer for a {@code DataSource} is not the same as the log - * writer used by a {@code DriverManager}. - * </p> - * - * @return a {@code PrintWriter} which is the log writer for this {@code - * DataSource}. Can be {@code null}, in which case log writing is - * disabled for this {@code DataSource}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public PrintWriter getLogWriter() throws SQLException; - - /** - * Sets the login timeout value for this {@code DataSource}. The login - * timeout is the maximum time in seconds that the {@code DataSource} will - * wait when opening a connection to a database. A timeout value of 0 - * implies either the system default timeout value (if there is one) or that - * there is no timeout. The default value for the login timeout is 0. - * - * @param theTimeout - * the new login timeout value in seconds. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void setLoginTimeout(int theTimeout) throws SQLException; - - /** - * Sets the log writer for this {@code DataSource}. - * <p> - * The log writer is a stream to which all log and trace messages are sent - * from this {@code DataSource}. The log writer can be {@code null}, in - * which case, log and trace capture is disabled. The default value for the - * log writer when a {@code DataSource} is created is {@code null}. Note - * that the log writer for a {@code DataSource} is not the same as the log - * writer used by a {@code DriverManager}. - * </p> - * - * @param theWriter - * a {@code PrintWriter} to use as the log writer for this - * {@code DataSource}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void setLogWriter(PrintWriter theWriter) throws SQLException; -} diff --git a/sql/src/main/java/javax/sql/PooledConnection.java b/sql/src/main/java/javax/sql/PooledConnection.java deleted file mode 100644 index b4c5616..0000000 --- a/sql/src/main/java/javax/sql/PooledConnection.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.sql.SQLException; -import java.sql.Connection; - -/** - * An interface which provides facilities for handling connections to a database - * which are pooled. - * <p> - * Typically, a {@code PooledConnection} is recycled when it is no longer - * required by an application, rather than being closed and discarded. The - * reason for treating connections in this way is that it can be an expensive - * process both to establish a connection to a database and to destroy the - * connection. Reusing connections through a pool is a way of improving system - * performance and reducing overhead. - * </p> - * <p> - * It is not intended that an application uses the {@code PooledConnection} - * interface directly. The {@code PooledConnection} interface is intended for - * use by a component called a connection pool manager, typically part of the - * infrastructure that supports use of the database by applications. - * </p> - * <p> - * Applications obtain connections to the database by calling the - * {@link DataSource#getConnection} method. Behind the scenes, the connection - * pool manager will get a {@code PooledConnection} object from its connection - * pool and passes back a connection object that wraps or references the {@code - * PooledConnection} object. A new {@code PooledConnection} object will only be - * created if the pool is empty. - * </p> - * <p> - * When the application is finished using a {@code PooledConnection}, the - * application calls the {@link Connection#close} method. The connection pool - * manager is notified via a {@link ConnectionEvent} from the connection that - * this has happened (the pool manager registers itself with the connection - * before the connection is given to the application). The pool manager removes - * the underlying {@code PooledConnection} object from the connection and - * returns it to the pool for reuse - the {@code PooledConnection} is thus - * recycled rather than being destroyed. - * </p> - * <p> - * The connection to the database represented by the {@code PooledConnection} is - * kept open until the {@code PooledConnection} object itself is deactivated by - * the connection pool manager, which calls {@code PooledConnection.close()}. - * This is typically done if there are too many inactive connections in the - * pool, if the {@code PooledConnection} encounters a problem that makes it - * unusable or if the whole system is being shut down. - * </p> - * - * @since Android 1.0 - */ -public interface PooledConnection { - - /** - * Registers the supplied {@code ConnectionEventListener} with this {@code - * PooledConnection}. Once registered, the {@code ConnectionEventListener} - * will receive {@link ConnectionEvent} events when they occur in the - * {@code PooledConnection}. - * - * @param theListener - * an object which implements the {@code ConnectionEventListener} - * interface. - * @since Android 1.0 - */ - public void addConnectionEventListener(ConnectionEventListener theListener); - - /** - * Closes the connection to the database held by this {@code - * PooledConnection}. This method should not be called directly by - * application code - it is intended only for the connection pool manager - * component. - * - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void close() throws SQLException; - - /** - * Creates a connection to the database. This method is typically called by - * the connection pool manager when an application invokes the method - * {@code DataSource.getConnection()} and there are no {@code - * PooledConnection} objects available in the connection pool. - * - * @return a {@code Connection} object. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Connection getConnection() throws SQLException; - - /** - * Unregisters the supplied {@code ConnectionEventListener} from this {@code - * PooledConnection}. Once unregistered, the {@code ConnectionEventListener} - * will no longer receive events occurring in the {@code PooledConnection}. - * - * @param theListener - * an object which implements the {@code ConnectionEventListener} - * interface. This object should have previously been registered - * with the {@code PooledConnection} using the {@code - * addConnectionEventListener} method. - * @since Android 1.0 - */ - public void removeConnectionEventListener( - ConnectionEventListener theListener); -} diff --git a/sql/src/main/java/javax/sql/RowSet.java b/sql/src/main/java/javax/sql/RowSet.java deleted file mode 100644 index 4edc3d3..0000000 --- a/sql/src/main/java/javax/sql/RowSet.java +++ /dev/null @@ -1,985 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Array; -import java.sql.Blob; -import java.sql.Clob; -import java.sql.Date; -import java.sql.Ref; -import java.sql.Time; -import java.sql.Timestamp; -import java.util.Map; -import java.io.InputStream; -import java.io.Reader; -import java.util.Calendar; -import java.math.BigDecimal; - -/** - * An interface which provides means to access data which - * persists on a database. It extends the functionality of - * {@link java.sql.ResultSet ResultSet} into a form that it can be used as a - * JavaBean component, suited for a visual programming environment. - * <p> - * {@code RowSet} provides getters and setters for properties relating to the - * general database environment together with the getters and setters for - * distinct data values which constitute the row set. The {@code RowSet} class - * supports JavaBean events so that other components in an application can be - * informed when changes happen such as changes in data values. - * </p> - * <p> - * {@code RowSet} is a facility implemented on top of the remainder of the JDBC - * API. It may be <i>connected</i>, maintaining a connection to the database - * throughout its lifecycle. The changes made on a <i>disconnected</i> {@code - * RowSet} on the other hand can be persisted only establishing a new connection - * with the database each time. - * </p> - * <p> - * Disconnected {@code RowSets} make use of {@code RowSetReaders} to populate - * the {@code RowSet} with data, possibly from a non-relational database source. - * They may also use {@code RowSetWriters} to send data back to the underlying - * data store. There is considerable freedom in the way that {@code - * RowSetReaders} and {@code RowSetWriters} may be implemented to retrieve and - * store data. - * </p> - * - * @see RowSetReader - * @see RowSetWriter - * @since Android 1.0 - */ -public interface RowSet extends ResultSet { - - /** - * Registers the supplied {@link RowSetListener} with this {@code RowSet}. - * Once registered, the {@link RowSetListener} is notified of events - * generated by the {@code RowSet}. - * - * @param theListener - * an object which implements the {@code rowSetListener} - * interface. - * @since Android 1.0 - */ - public void addRowSetListener(RowSetListener theListener); - - /** - * Clears the parameters previously set for this {@code RowSet}. - * <p> - * The {@code RowSet} object retains its value until either a new value for - * a parameter is set or its value is actively reset. {@code - * clearParameters} provides a facility to clear the values for all - * parameters with one method call. - * </p> - * - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void clearParameters() throws SQLException; - - /** - * Fetches data for this {@code RowSet} from the database. If successful, - * any existing data for the {@code RowSet} is discarded and its metadata is - * overwritten. - * <p> - * Data is retrieved connecting to the database and executing an - * according SQL statement. This requires some or all of the following - * properties to be set: URL, database name, user name, password, - * transaction isolation, type map; plus some or all of the properties: - * command, read only, maximum field size, maximum rows, escape processing, - * and query timeout. - * </p> - * <p> - * The {@code RowSet} may use a {@code RowSetReader} to access the database - * it will then invoke the {@link RowSetReader#readData} method on the - * reader to fetch the data. When the new data is fetched all the listeners - * are notified to take appropriate measures. - * </p> - * - * @throws SQLException - * if a problem occurs accessing the database or if the - * properties needed to access the database have not been set. - * @see RowSetMetaData - * @see RowSetReader - * @since Android 1.0 - */ - public void execute() throws SQLException; - - /** - * Gets the {@code RowSet}'s command property. - * - * @return a string containing the {@code RowSet}'s command property. A - * command is a SQL statement which is executed to fetch required - * data into the {@code RowSet}. - * @since Android 1.0 - */ - public String getCommand(); - - /** - * Gets the ODBC Data Source Name property associated with this {@code - * RowSet}. The database name can be used to find a {@link DataSource} - * which has been registered with a naming service - the {@link DataSource} - * can then be used to create a connection to the database. - * - * @return the name of the database. - * @since Android 1.0 - */ - public String getDataSourceName(); - - /** - * Reports if escape processing is enabled for this {@code RowSet}. If - * escape processing is on, the driver performs a substitution of the escape - * syntax with the applicable code before sending an SQL command to the - * database. The default value for escape processing is {@code true}. - * - * @return {@code true} if escape processing is enabled, {@code - * false} otherwise. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public boolean getEscapeProcessing() throws SQLException; - - /** - * Gets the maximum number of bytes that can be returned for column values - * which are of type {@code BINARY}, {@code VARBINARY}, {@code - * LONGVARBINARYBINARY}, {@code CHAR}, {@code VARCHAR}, or {@code - * LONGVARCHAR}. Excess data is silently discarded if the number is - * exceeded. - * - * @return the current maximum size in bytes. 0 implies no size limit. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public int getMaxFieldSize() throws SQLException; - - /** - * Gets the maximum number of rows for this {@code RowSet}. Excess rows are - * discarded silently if the limit is exceeded. - * - * @return the previous maximum number of rows. 0 implies no row limit. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public int getMaxRows() throws SQLException; - - /** - * Gets the value of the password property for this {@code RowSet}. This - * property is used when a connection to the database is established. - * Therefore it should be set prior to invoking the {@link #execute} method. - * - * @return the value of the password property. - * @since Android 1.0 - */ - public String getPassword(); - - /** - * Gets the timeout for the driver when a query operation is executed. If a - * query takes longer than the timeout then a {@code SQLException} is - * thrown. - * - * @return the timeout value in seconds. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public int getQueryTimeout() throws SQLException; - - /** - * Gets the transaction isolation level property set for this - * {@code RowSet}. The transaction isolation level defines the - * policy implemented on the database for maintaining the data - * values consistent. - * - * @return the current transaction isolation level. Must be one of: - * <ul> - * <li>{@code Connection.TRANSACTION_READ_UNCOMMITTED}</li> - * <li>{@code Connection.TRANSACTION_READ_COMMITTED}</li> - * <li>{@code Connection.TRANSACTION_REPEATABLE_READ}</li> - * <li>{@code Connection.TRANSACTION_SERIALIZABLE}</li> - * </ul> - * @see java.sql.Connection - * @since Android 1.0 - */ - public int getTransactionIsolation(); - - /** - * Gets the custom mapping of SQL User-Defined Types (UDTs) and Java classes - * for this {@code RowSet}, if applicable. - * - * @return the custom mappings of SQL types to Java classes. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public Map<String, Class<?>> getTypeMap() throws SQLException; - - /** - * Gets the URL property value for this {@code RowSet}. If there is no - * {@code DataSource} object specified, the {@code RowSet} uses the URL to - * establish a connection to the database. The default value for the URL is - * {@code null}. - * - * @return a String holding the value of the URL property. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public String getUrl() throws SQLException; - - /** - * Gets the value of the {@code username} property for this {@code RowSet}. - * The {@code username} is used when establishing a connection to the - * database and should be set before the {@code execute} method is invoked. - * - * @return a {@code String} holding the value of the {@code username} - * property. - * @since Android 1.0 - */ - public String getUsername(); - - /** - * Indicates if this {@code RowSet} is read-only. - * - * @return {@code true} if this {@code RowSet} is read-only, {@code false} - * if it is updatable. - * @since Android 1.0 - */ - public boolean isReadOnly(); - - /** - * Removes a specified {@link RowSetListener} object from the set of - * listeners which will be notified of events by this {@code RowSet}. - * - * @param theListener - * the {@link RowSetListener} to remove from the set of listeners - * for this {@code RowSet}. - * @since Android 1.0 - */ - public void removeRowSetListener(RowSetListener theListener); - - /** - * Sets the specified {@code ARRAY} parameter in the {@code RowSet} command - * with the supplied {@code java.sql.Array} value. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theArray - * the {@code Array} data value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setArray(int parameterIndex, Array theArray) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * with the ASCII data in the supplied {@code java.io.InputStream} value. - * Data is read from the {@code InputStream} until end-of-file is reached. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theInputStream - * the ASCII data value to which the parameter is set. - * @param length - * the length of the data in bytes. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setAsciiStream(int parameterIndex, InputStream theInputStream, - int length) throws SQLException; - - /** - * Sets the value of the specified SQL {@code NUMERIC} parameter in the - * {@code RowSet} command with the data in the supplied {@code - * java.math.BigDecimal} value. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theBigDecimal - * the big decimal value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setBigDecimal(int parameterIndex, BigDecimal theBigDecimal) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to the binary data in the supplied input stream. Data is read from the - * input stream until end-of-file is reached. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theInputStream - * the binary data stream to which the parameter is set. - * @param length - * the length of the data in bytes. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setBinaryStream(int parameterIndex, InputStream theInputStream, - int length) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to the supplied {@code Blob} value. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theBlob - * the {@code Blob} value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setBlob(int parameterIndex, Blob theBlob) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to the supplied boolean. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theBoolean - * the {@code boolean} value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setBoolean(int parameterIndex, boolean theBoolean) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to the supplied byte value. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theByte - * the {@code byte} value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setByte(int parameterIndex, byte theByte) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to the supplied byte array value. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theByteArray - * the {@code Array} of {@code bytes} to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setBytes(int parameterIndex, byte[] theByteArray) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to the sequence of Unicode characters carried by the supplied {@code - * java.io.Reader}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theReader - * the {@code Reader} which contains the Unicode data to set the - * parameter. - * @param length - * the length of the data in the {@code Reader} in characters. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setCharacterStream(int parameterIndex, Reader theReader, - int length) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * with the value of a supplied {@code java.sql.Clob}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theClob - * the {@code Clob} value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setClob(int parameterIndex, Clob theClob) throws SQLException; - - /** - * Sets the Command property for this {@code RowSet} - the command is an SQL - * query which runs when the {@code execute} method is invoked. This - * property is optional for databases that do not support commands. - * - * @param cmd - * the SQL query. Can be {@code null}. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setCommand(String cmd) throws SQLException; - - /** - * Sets the concurrency property of this {@code RowSet}. The default value - * is {@code ResultSet.CONCUR_READ_ONLY}. - * - * @param concurrency - * the concurrency value. One of: - * <ul> - * <li>{@code ResultSet.CONCUR_READ_ONLY}</li> - * <li>{@code ResultSet.CONCUR_UPDATABLE}</li> - * </ul> - * @throws SQLException - * if an error occurs accessing the database. - * @see java.sql.ResultSet - * @since Android 1.0 - */ - public void setConcurrency(int concurrency) throws SQLException; - - /** - * Sets the database name property for the {@code RowSet}. - * <p> - * The database name can be used to find a {@link DataSource} which has been - * registered with a naming service - the {@link DataSource} can then be - * used to create a connection to the database. - * </p> - * - * @param name - * the database name. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setDataSourceName(String name) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * with the value of a supplied {@code java.sql.Date}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theDate - * the date value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setDate(int parameterIndex, Date theDate) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * with the value of a supplied {@code java.sql.Date}, where the conversion - * of the date to an SQL {@code DATE} value is calculated using a supplied - * {@code Calendar}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theDate - * the date to which the parameter is set. - * @param theCalendar - * the {@code Calendar} to use in converting the Date to an SQL - * {@code DATE} value. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setDate(int parameterIndex, Date theDate, Calendar theCalendar) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * with the supplied {@code double}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theDouble - * the {@code double} value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setDouble(int parameterIndex, double theDouble) - throws SQLException; - - /** - * Sets the escape processing status for this {@code RowSet}. If escape - * processing is on, the driver performs a substitution of the escape syntax - * with the applicable code before sending an SQL command to the database. - * The default value for escape processing is {@code true}. - * - * @param enable - * {@code true} to enable escape processing, {@code false} to - * turn it off. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setEscapeProcessing(boolean enable) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * with the supplied {@code float}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theFloat - * the {@code float} value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setFloat(int parameterIndex, float theFloat) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * with the supplied {@code integer}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theInteger - * the {@code integer} value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setInt(int parameterIndex, int theInteger) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * with the supplied {@code long}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theLong - * the {@code long} value value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setLong(int parameterIndex, long theLong) throws SQLException; - - /** - * Sets the maximum number of bytes which can be returned for a column value - * where the column type is one of {@code BINARY}, {@code VARBINARY}, - * {@code LONGVARBINARYBINARY}, {@code CHAR}, {@code VARCHAR}, or {@code - * LONGVARCHAR}. Data which exceeds this limit is silently discarded. For - * portability, a value greater than 256 is recommended. - * - * @param max - * the maximum size of the returned column value in bytes. 0 - * implies no size limit. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setMaxFieldSize(int max) throws SQLException; - - /** - * Sets the maximum number of rows which can be held by the {@code RowSet}. - * Any additional rows are silently discarded. - * - * @param max - * the maximum number of rows which can be held in the {@code - * RowSet}. 0 means no limit. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setMaxRows(int max) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to SQL {@code NULL}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param sqlType - * the type of the parameter, as defined by {@code - * java.sql.Types}. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setNull(int parameterIndex, int sqlType) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to SQL {@code NULL}. This form of the {@code setNull} method should be - * used for User Defined Types and {@code REF} parameters. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param sqlType - * the type of the parameter, as defined by {@code - * java.sql.Types}. - * @param typeName - * the fully qualified name of an SQL user defined type or the - * name of the SQL structured type referenced by a {@code REF} - * type. Ignored if the sqlType is not a UDT or REF type. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setNull(int parameterIndex, int sqlType, String typeName) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied Java object. - * <p> - * The JDBC specification provides a standard mapping for Java objects to - * SQL data types. Database specific types can be mapped by JDBC driver - * specific Java types. - * </p> - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theObject - * the Java object containing the data value to which the - * parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setObject(int parameterIndex, Object theObject) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied Java object. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theObject - * the Java object containing the data value. - * @param targetSqlType - * the SQL type to send to the database, as defined in {@code - * java.sql.Types}. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setObject(int parameterIndex, Object theObject, - int targetSqlType) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied Java object. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theObject - * the Java object containing the data value. - * @param targetSqlType - * the SQL type to send to the database, as defined in {@code - * java.sql.Types}. - * @param scale - * the number of digits after the decimal point, for {@code - * java.sql.Types.DECIMAL} and {@code java.sql.Types.NUMERIC} - * types. Ignored for all other types. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setObject(int parameterIndex, Object theObject, - int targetSqlType, int scale) throws SQLException; - - /** - * Sets the database Password for this {@code RowSet}. This property is used - * when a connection to the database is established. Therefore it should be - * set prior to invoking the {@link #execute} method. - * - * @param password - * a {@code String} holding the password. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setPassword(String password) throws SQLException; - - /** - * Gets the timeout for the driver when a query operation is executed. If a - * query takes longer than the timeout, a {@code SQLException} is thrown. - * - * @param seconds - * the number of seconds for the timeout. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setQueryTimeout(int seconds) throws SQLException; - - /** - * Sets whether the {@code RowSet} is read-only or updatable. - * - * @param readOnly - * {@code true} to set the {@code RowSet} to read-only state, - * {@code false} to allow updates. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setReadOnly(boolean readOnly) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied {@code java.sql.Ref}. This is sent to the database as an - * SQL {@code REF} value. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theRef - * the value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @see java.sql.Ref - * @since Android 1.0 - */ - public void setRef(int parameterIndex, Ref theRef) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied {@code short integer}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theShort - * the value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setShort(int parameterIndex, short theShort) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied {@code String}. The string is placed into the database as a - * {@code VARCHAR} or {@code LONGVARCHAR} SQL value, depending on the - * database limits for the length of {@code VARCHAR} values. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theString - * the value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setString(int parameterIndex, String theString) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied {@code java.sql.Time}, converting it to an SQL {@code TIME} - * value using the system default {@code Calendar}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theTime - * the value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @see java.util.Calendar - * @see java.sql.Time - * @since Android 1.0 - */ - public void setTime(int parameterIndex, Time theTime) throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied {@code java.sql.Time}, converting it to an SQL {@code TIME} - * value using a supplied {@code Calendar}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theTime - * the value to which the parameter is set. - * @param theCalendar - * the {@code Calendar} to use in the conversion operation. - * @throws SQLException - * if an error occurs accessing the database. - * @see java.util.Calendar - * @see java.sql.Time - * @since Android 1.0 - */ - public void setTime(int parameterIndex, Time theTime, Calendar theCalendar) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied {@code java.sql.Timestamp}, converting it to an SQL {@code - * TIMESTAMP} value using the system default {@code Calendar}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theTimestamp - * the value to which the parameter is set. - * @throws SQLException - * if an error occurs accessing the database. - * @see java.util.Calendar - * @see java.sql.Timestamp - * @since Android 1.0 - */ - public void setTimestamp(int parameterIndex, Timestamp theTimestamp) - throws SQLException; - - /** - * Sets the value of the specified parameter in the {@code RowSet} command - * to a supplied {@code java.sql.Timestamp}, converting it to an SQL {@code - * TIMESTAMP} value using a supplied {@code Calendar}. - * - * @param parameterIndex - * the index of the parameter to set; the first parameter's index - * is 1. - * @param theTimestamp - * the value to which the parameter is set. - * @param theCalendar - * the {@code Calendar} to use in the conversion operation - * @throws SQLException - * if an error occurs accessing the database. - * @see java.util.Calendar - * @see java.sql.Timestamp - * @since Android 1.0 - */ - public void setTimestamp(int parameterIndex, Timestamp theTimestamp, - Calendar theCalendar) throws SQLException; - - /** - * Sets the target instance's transaction isolation level to one of a - * discrete set of possible values. The transaction isolation level defines - * the policy implemented on the database for maintaining the data values - * consistent. - * <p> - * Keep in mind that setting a transaction isolation level has no effect - * unless your driver and DBMS support it. - * </p> - * - * @param level - * the transaction isolation level. One of: - * <ul> - * <li>{@code Connection.TRANSACTION_READ_UNCOMMITTED}</li> - * <li>{@code Connection.TRANSACTION_READ_COMMITTED}</li> - * <li>{@code Connection.TRANSACTION_REPEATABLE_READ}</li> - * <li>{@code Connection.TRANSACTION_SERIALIZABLE}</li> - * </ul> - * @throws SQLException - * if an error occurs accessing the database. - * @see java.sql.Connection - * @since Android 1.0 - */ - public void setTransactionIsolation(int level) throws SQLException; - - /** - * Sets the type of this {@code RowSet}. By default, the type is - * non-scrollable. - * - * @param type - * the type for the {@code RowSet}. One of: - * <ul> - * <li>{@code ResultSet.TYPE_FORWARD_ONLY}</li> - * <li>{@code ResultSet.TYPE_SCROLL_INSENSITIVE}</li> - * <li>{@code ResultSet.TYPE_SCROLL_SENSITIVE}</li> - * </ul> - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setType(int type) throws SQLException; - - /** - * Sets the mapping of SQL User Defined Types (UDTs) to Java classes. The - * Java classes must all implement the {@link java.sql.SQLData SQLData} - * interface. - * - * @param theTypeMap - * the names of SQL UDTs and the Java classes to which they are - * mapped. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setTypeMap(Map<String, Class<?>> theTypeMap) - throws SQLException; - - /** - * Sets the URL used by this {@code RowSet} to access the database via a - * {@code DriverManager}. The URL is optional - an alternative is to use a - * database name to create a connection. - * - * @param theURL - * the URL for the database. Can be {@code null}. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setUrl(String theURL) throws SQLException; - - /** - * Sets the {@code Username} property for the {@code RowSet}, used to - * authenticate a connection to the database. - * - * @param theUsername - * the new user name for this row set. - * @throws SQLException - * if an error occurs accessing the database. - * @since Android 1.0 - */ - public void setUsername(String theUsername) throws SQLException; -} diff --git a/sql/src/main/java/javax/sql/RowSetEvent.java b/sql/src/main/java/javax/sql/RowSetEvent.java deleted file mode 100644 index 9d4c98c..0000000 --- a/sql/src/main/java/javax/sql/RowSetEvent.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.util.EventObject; -import java.io.Serializable; - -/** - * An event which is sent when specific events happen to a {@link RowSet} - * object. The events are sent to inform registered listeners that changes have - * occurred to the {@code RowSet}. The events covered are: - * <ol> - * <li>A single row in the {@code RowSet} changes.</li> - * <li>The whole set of data in the {@code RowSet} changes.</li> - * <li>The {@code RowSet} cursor position changes.</li> - * </ol> - * <p> - * The event contains a reference to the {@code RowSet} object which generated - * the message so that the listeners can extract whatever information they need - * from that reference. - * </p> - * - * @since Android 1.0 - */ -public class RowSetEvent extends EventObject implements Serializable { - - private static final long serialVersionUID = -1875450876546332005L; - - /** - * Creates a {@code RowSetEvent} object containing a reference to the - * {@link RowSet} object that generated the event. Information about the - * changes that have occurred to the {@code RowSet} can be extracted from - * the {@code RowSet} using one or more of the query methods available on - * the {@code RowSet}. - * - * @param theSource - * the {@code RowSet} which generated the event. - * @since Android 1.0 - */ - public RowSetEvent(RowSet theSource) { - super(theSource); - } -} diff --git a/sql/src/main/java/javax/sql/RowSetInternal.java b/sql/src/main/java/javax/sql/RowSetInternal.java deleted file mode 100644 index baa261d..0000000 --- a/sql/src/main/java/javax/sql/RowSetInternal.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.sql.SQLException; -import java.sql.Connection; -import java.sql.ResultSet; - -/** - * An interface provided by a {@code RowSet} object to let either a {@code RowSetReader} or a - * {@code RowSetWriter} access its internal state, thereby providing facilities to read and update the state of - * the {@code RowSet}. - */ -public interface RowSetInternal { - - /** - * Gets the connection associated with this {@code RowSet} object. - * - * @return the connection or {@code null}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Connection getConnection() throws SQLException; - - /** - * Gets the {@code ResultSet} that was the original (unmodified) content of - * the {@code RowSet}. - * <p> - * The {@code ResultSet}'s cursor is positioned before the first row of - * data. - * </p> - * - * @return the {@code ResultSet} that contained the original data value of - * the {@code RowSet}. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public ResultSet getOriginal() throws SQLException; - - /** - * Gets the original value of the current row only. If the current row did - * not have an original value, then an empty value is returned. - * - * @return a {@code ResultSet} containing the value of the current row only. - * @throws SQLException - * if there is a problem accessing the database, or if the - * cursor is not on a valid row (before the first row, after the - * last one or pointing to the insert row). - * @since Android 1.0 - */ - public ResultSet getOriginalRow() throws SQLException; - - /** - * Gets the parameter values that have been set for this {@code RowSet}'s - * command. - * - * @return the values of parameters that have been set. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public Object[] getParams() throws SQLException; - - /** - * Sets {@code RowSetMetaData} for this {@code RowSet}. The {@code - * RowSetMetaData} is used by a {@code RowSetReader} to set values giving - * information about the {@code RowSet}'s columns. - * - * @param theMetaData - * holds the metadata about the {@code RowSet}'s columns. - * @throws SQLException - * if there is a problem accessing the database. - * @since Android 1.0 - */ - public void setMetaData(RowSetMetaData theMetaData) throws SQLException; -} diff --git a/sql/src/main/java/javax/sql/RowSetListener.java b/sql/src/main/java/javax/sql/RowSetListener.java deleted file mode 100644 index 06a7253..0000000 --- a/sql/src/main/java/javax/sql/RowSetListener.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.util.EventListener; - -/** - * An interface used to send notification of events occurring in the context of - * a {@link RowSet}. To receive the notification events, an object must - * implement the {@code RowSetListener} interface and then register itself with - * the {@code RowSet} of interest using the - * {@link RowSet#addRowSetListener(RowSetListener)} method. - * - * @since Android 1.0 - */ -public interface RowSetListener extends EventListener { - - /** - * Notifies the listener that the {@code RowSet}'s cursor in {@code - * theEvent.getSource} has moved. - * - * @param theEvent - * a {@code RowSetEvent} that contains information about the - * {@code RowSet} involved. This information can be used to - * retrieve information about the change, such as the updated - * data values. - * @since Android 1.0 - */ - public void cursorMoved(RowSetEvent theEvent); - - /** - * Notifies the listener that one of the {@code RowSet}'s rows in {@code - * theEvent.getSource} has changed. - * - * @param theEvent - * a {@code RowSetEvent} that contains information about the - * {@code RowSet} involved. This information can be used to - * retrieve information about the change, such as the new cursor - * position. - * @since Android 1.0 - */ - public void rowChanged(RowSetEvent theEvent); - - /** - * Notifies the listener that the {@code RowSet}'s entire contents in - * {@code theEvent.getSource} have been updated (an example is the execution - * of a command which retrieves new data from the database). - * - * @param theEvent - * a {@code RowSetEvent} that contains information about the - * {@code RowSet} involved. This information can be used to - * retrieve information about the change, such as the updated - * rows of data. - * @since Android 1.0 - */ - public void rowSetChanged(RowSetEvent theEvent); -} diff --git a/sql/src/main/java/javax/sql/RowSetMetaData.java b/sql/src/main/java/javax/sql/RowSetMetaData.java deleted file mode 100644 index 3051876..0000000 --- a/sql/src/main/java/javax/sql/RowSetMetaData.java +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.sql.ResultSetMetaData; -import java.sql.SQLException; - -/** - * An interface which provides facilities for getting information about the - * columns in a {@code RowSet}. - * <p> - * {@code RowSetMetaData} extends {@link java.sql.ResultSetMetaData}, adding new - * operations for carrying out value sets. - * </p> - * <p> - * Application code would not normally call this interface directly. It would be - * called internally when {@code RowSet.execute} is called. - * </p> - * - * @see RowSetInternal#setMetaData(RowSetMetaData) - * @since Android 1.0 - */ -public interface RowSetMetaData extends ResultSetMetaData { - - /** - * Sets automatic numbering for a specified column in the {@code RowSet}. If - * automatic numbering is on, the column is read-only. The default value for - * the auto increment parameter is {@code false}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param autoIncrement - * {@code true} to set automatic numbering on, {@code false} to - * turn it off (default). - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setAutoIncrement(int columnIndex, boolean autoIncrement) - throws SQLException; - - /** - * Sets the case sensitive property for a specified column in the {@code - * RowSet}. The default is that the column is not case sensitive. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param caseSensitive - * {@code true} to make the column case sensitive, {@code false} - * to make it case insensitive (default). - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setCaseSensitive(int columnIndex, boolean caseSensitive) - throws SQLException; - - /** - * Sets the catalog name for a specified column in the {@code RowSet}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param catalogName - * the new catalog's name. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setCatalogName(int columnIndex, String catalogName) - throws SQLException; - - /** - * Sets the number of columns contained in the row set. - * - * @param columnCount - * the number of columns contained in the {@code RowSet}. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setColumnCount(int columnCount) throws SQLException; - - /** - * Sets the normal maximum width in characters for a specified column in the - * {@code RowSet}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param displaySize - * the normal maximum column width in characters. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setColumnDisplaySize(int columnIndex, int displaySize) - throws SQLException; - - /** - * Sets the suggested name as label for the column contained in the {@code - * RowSet}. The label is an alias for printing and displaying purposes. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param theLabel - * the alias name for the column. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setColumnLabel(int columnIndex, String theLabel) - throws SQLException; - - /** - * Sets the column name for a specified column in the {@code RowSet}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param theColumnName - * the column's label. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setColumnName(int columnIndex, String theColumnName) - throws SQLException; - - /** - * Sets the SQL type for a specified column in the {@code RowSet}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param theSQLType - * the SQL Type, as defined by {@code java.sql.Types}. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setColumnType(int columnIndex, int theSQLType) - throws SQLException; - - /** - * Sets the type name for a specified column in the {@code RowSet}, where - * the data type is specific to the data source. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param theTypeName - * the SQL type name for the column. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setColumnTypeName(int columnIndex, String theTypeName) - throws SQLException; - - /** - * Sets whether a specified column is a currency value. The default value is - * {@code false}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param isCurrency - * {@code true} if the column should be treated as a currency - * value, {@code false} if it should not be treated as a currency - * value (default). - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setCurrency(int columnIndex, boolean isCurrency) - throws SQLException; - - /** - * Sets whether a specified column can contain SQL {@code NULL} values. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param nullability - * an integer which is one of the following values: - * <ul> - * <li>{@code ResultSetMetaData.columnNoNulls}</li> - * <li>{@code ResultSetMetaData.columnNullable}</li> - * <li>{@code ResultSetMetaData.columnNullableUnknown}</li> - * </ul> - * <p> - * The default value is {@code - * ResultSetMetaData.columnNullableUnknown}. - * </p> - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setNullable(int columnIndex, int nullability) - throws SQLException; - - /** - * Sets the number of decimal digits for a specified column in the {@code - * RowSet}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param thePrecision - * the number of decimal digits. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setPrecision(int columnIndex, int thePrecision) - throws SQLException; - - /** - * Declares how many decimal digits there should be after a decimal point - * for the column specified by {@code columnIndex}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param theScale - * the number of digits after the decimal point. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setScale(int columnIndex, int theScale) throws SQLException; - - /** - * Sets the schema name for a specified column in the {@code RowSet}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param theSchemaName - * a {@code String} containing the schema name. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setSchemaName(int columnIndex, String theSchemaName) - throws SQLException; - - /** - * Sets whether a specified column can be used in a search involving a - * {@code WHERE} clause. The default value is {@code false}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param isSearchable - * {@code true} of the column can be used in a {@code WHERE} - * clause search, {@code false} otherwise. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setSearchable(int columnIndex, boolean isSearchable) - throws SQLException; - - /** - * Sets if a specified column can contain signed numbers. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param isSigned - * {@code true} if the column can contain signed numbers, {@code - * false} otherwise. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setSigned(int columnIndex, boolean isSigned) - throws SQLException; - - /** - * Sets the table name for a specified column in the {@code RowSet}. - * - * @param columnIndex - * the index number for the column; the first column's index is - * 1. - * @param theTableName - * the table name for the column. - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public void setTableName(int columnIndex, String theTableName) - throws SQLException; -} diff --git a/sql/src/main/java/javax/sql/RowSetReader.java b/sql/src/main/java/javax/sql/RowSetReader.java deleted file mode 100644 index d4a902f..0000000 --- a/sql/src/main/java/javax/sql/RowSetReader.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.sql.SQLException; - -/** - * An interface which provides functionality for a disconnected {@code RowSet} - * to get data from a database into its rows. The {@code RowSet} calls the - * {@code RowSetReader} interface when the {@code RowSet}'s execute method is - * invoked - a {@code RowSetReader} must first be registered with the {@code - * RowSet} for this to work. - * - * @see RowSet - * @since Android 1.0 - */ -public interface RowSetReader { - - /** - * Reads new data into the {@code RowSet}. The calling {@code RowSet} object - * must itself implement the {@code RowSetInternal} interface and the - * {@code RowSetReader} must be registered as a reader on the - * {@code RowSet}. - * <p> - * This method adds rows into the calling {@code RowSet}. The reader may - * invoke any of the {@code RowSet}'s methods except for the {@code execute} - * method (calling {@code execute} will cause an {@code SQLException} to be - * thrown). However, when the reader calls the {@code RowSet}'s methods, no - * events are sent to listeners - any listeners are informed by the calling - * {@code RowSet}'s {@code execute} method once the reader returns from the - * {@code readData} method. - * </p> - * - * @param theCaller - * must be the calling {@code RowSet} object, which must have - * implemented the {@code RowSetInternal} interface. - * @throws SQLException - * if a problem occurs accessing the database or if the reader - * calls the {@link RowSet#execute()} method. - * @see RowSetInternal - * @since Android 1.0 - */ - public void readData(RowSetInternal theCaller) throws SQLException; -} diff --git a/sql/src/main/java/javax/sql/RowSetWriter.java b/sql/src/main/java/javax/sql/RowSetWriter.java deleted file mode 100644 index 34473b2..0000000 --- a/sql/src/main/java/javax/sql/RowSetWriter.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package javax.sql; - -import java.sql.SQLException; - -/** - * An interface which provides functionality for a disconnected {@code RowSet} - * to put data updates back to the data source from which the {@code RowSet} was - * originally populated. An object implementing this interface is called a - * writer. - * <p> - * The writer must establish a connection to the {@code RowSet}'s database - * before writing the data. The {@code RowSet} calling this interface must - * implement the {@code RowSetInternal} interface. - * </p> - * <p> - * The writer may encounter a situation where the updated data needs to be - * written back to the database, but has already been updated there in the mean - * time. How a conflict of this kind is handled is determined by the - * implementation of this writer. - * </p> - * - * @see RowSetInternal - * @since Android 1.0 - */ -public interface RowSetWriter { - - /** - * Writes changes made in the {@code RowSet}, which is associated with this - * {@code RowSetWriter}, back to the database. - * - * @param theRowSet - * a row set that fulfills the following criteria: - * <ul> - * <li>it must implement the {@code RowSetInternal} interface,</li> - * <li>have this {@code RowSetWriter} registered with it,</li> - * <li>must call this method internally.</li> - * </ul> - * @return {@code true} if the modified data was written, {@code false} - * otherwise (which typically implies some form of conflict). - * @throws SQLException - * if a problem occurs accessing the database. - * @since Android 1.0 - */ - public boolean writeData(RowSetInternal theRowSet) throws SQLException; -} diff --git a/sql/src/main/java/javax/sql/package.html b/sql/src/main/java/javax/sql/package.html deleted file mode 100644 index 6c9500f..0000000 --- a/sql/src/main/java/javax/sql/package.html +++ /dev/null @@ -1,9 +0,0 @@ -<html> - <body> - <p> - Provides extensions to the standard interface for accessing SQL-based - databases. - <p> - @since Android 1.0 - </body> -</html>
\ No newline at end of file diff --git a/sql/src/main/java/org/apache/harmony/sql/internal/nls/Messages.java b/sql/src/main/java/org/apache/harmony/sql/internal/nls/Messages.java deleted file mode 100644 index b3dbd32..0000000 --- a/sql/src/main/java/org/apache/harmony/sql/internal/nls/Messages.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * THE FILE HAS BEEN AUTOGENERATED BY MSGTOOL TOOL. - * All changes made to this file manually will be overwritten - * if this tool runs again. Better make changes in the template file. - */ - -// BEGIN android-note -// Redundant code has been removed and is now called from MsgHelp. -// END android-note - -package org.apache.harmony.sql.internal.nls; - - -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.Locale; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -// BEGIN android-changed -import org.apache.harmony.luni.util.MsgHelp; -// END android-changed - -/** - * This class retrieves strings from a resource bundle and returns them, - * formatting them with MessageFormat when required. - * <p> - * It is used by the system classes to provide national language support, by - * looking up messages in the <code> - * org.apache.harmony.sql.internal.nls.messages - * </code> - * resource bundle. Note that if this file is not available, or an invalid key - * is looked up, or resource bundle support is not available, the key itself - * will be returned as the associated message. This means that the <em>KEY</em> - * should a reasonable human-readable (english) string. - * - */ -public class Messages { - - // BEGIN android-changed - private static final String sResource = - "org.apache.harmony.sql.internal.nls.messages"; //$NON-NLS-1$ - // END android-changed - - /** - * Retrieves a message which has no arguments. - * - * @param msg - * String the key to look up. - * @return String the message for that key in the system message bundle. - */ - static public String getString(String msg) { - // BEGIN android-changed - return MsgHelp.getString(sResource, msg); - // END android-changed - } - - /** - * Retrieves a message which takes 1 argument. - * - * @param msg - * String the key to look up. - * @param arg - * Object the object to insert in the formatted output. - * @return String the message for that key in the system message bundle. - */ - static public String getString(String msg, Object arg) { - return getString(msg, new Object[] { arg }); - } - - /** - * Retrieves a message which takes 1 integer argument. - * - * @param msg - * String the key to look up. - * @param arg - * int the integer to insert in the formatted output. - * @return String the message for that key in the system message bundle. - */ - static public String getString(String msg, int arg) { - return getString(msg, new Object[] { Integer.toString(arg) }); - } - - /** - * Retrieves a message which takes 1 character argument. - * - * @param msg - * String the key to look up. - * @param arg - * char the character to insert in the formatted output. - * @return String the message for that key in the system message bundle. - */ - static public String getString(String msg, char arg) { - return getString(msg, new Object[] { String.valueOf(arg) }); - } - - /** - * Retrieves a message which takes 2 arguments. - * - * @param msg - * String the key to look up. - * @param arg1 - * Object an object to insert in the formatted output. - * @param arg2 - * Object another object to insert in the formatted output. - * @return String the message for that key in the system message bundle. - */ - static public String getString(String msg, Object arg1, Object arg2) { - return getString(msg, new Object[] { arg1, arg2 }); - } - - /** - * Retrieves a message which takes several arguments. - * - * @param msg - * String the key to look up. - * @param args - * Object[] the objects to insert in the formatted output. - * @return String the message for that key in the system message bundle. - */ - static public String getString(String msg, Object[] args) { - // BEGIN android-changed - return MsgHelp.getString(sResource, msg, args); - // END android-changed - } - - // BEGIN android-note - // Duplicate code was dropped in favor of using MsgHelp. - // END android-note -} diff --git a/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties b/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties deleted file mode 100644 index 3e6ff1d..0000000 --- a/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties +++ /dev/null @@ -1,42 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# messages for EN locale -sql.0=Value out of range -sql.1=DriverManager: calling class not authorized to deregister JDBC driver -sql.2=Timestamp format must be yyyy-mm-dd hh:mm:ss.fffffffff -sql.3=Argument cannot be null -sql.4=Bad input string format: expected '.' not {0} -sql.5=The url cannot be null -sql.6=No suitable driver -sql.8=SQLWarning chain holds value that is not a SQLWarning -sql.9=Cannot instantiate a SerialRef object with a null Ref object -sql.10=Cannot instantiate a SerialRef object that returns a null base type name -sql.11=SQLException: {0} -sql.12=Cannot serialize empty URL instance -sql.13=Cannot instantiate a SerialBlob object with a null Blob object -sql.14=Invalid starting position or length -sql.15=Invalid position in BLOB object set -sql.16=Invalid offset in byte array set -sql.17=javax.sql.rowset.serial.SerialException: Length more than what can be truncated -sql.18=Unsupported operation. SerialBlob cannot return a writable binary stream, unless instantiated with a Blob object that provides a setBinaryStream() implementation -sql.19=Cannot instantiate a SerialClob object with a null Clob object -sql.20=Invalid Clob object. Calls to getCharacterStream or getAsciiStream return null which cannot be serialized. -sql.21=Invalid position in CLOB object set -sql.22=Invalid position and substring length -sql.23=Buffer is not sufficient to hold the value -sql.24=Invalid length for truncate -sql.25=Unsupported operation. SerialClob is not instantiated with a fully implemented Clob object. diff --git a/sql/src/main/native/sqlite_jni.c b/sql/src/main/native/sqlite_jni.c deleted file mode 100644 index c8a76e4..0000000 --- a/sql/src/main/native/sqlite_jni.c +++ /dev/null @@ -1,4398 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "sqlite_jni_defs.h" - -#if HAVE_SQLITE2 -#include "sqlite.h" -#endif - -#if HAVE_SQLITE3 -#include "sqlite3.h" -#undef HAVE_SQLITE_COMPILE -#define HAVE_SQLITE_COMPILE 1 -#undef HAVE_SQLITE_PROGRESS_HANDLER -#define HAVE_SQLITE_PROGRESS_HANDLER 1 -#undef HAVE_SQLITE_TRACE -#define HAVE_SQLITE_TRACE 1 -#if !HAVE_SQLITE3_MALLOC -#define sqlite3_malloc malloc -#define sqlite3_free free -#endif -#if !HAVE_SQLITE3_BIND_PARAMETER_COUNT -#define sqlite3_bind_parameter_count(dummy) (1000) -#endif -#endif - -#if HAVE_SQLITE2 && HAVE_SQLITE3 -#define HAVE_BOTH_SQLITE 1 -#endif - -#include "sqlite_jni.h" - -#if defined(_WIN32) || !defined(CANT_PASS_VALIST_AS_CHARPTR) -#define MAX_PARAMS 256 -#else -#define MAX_PARAMS 32 -#endif - -/* free memory proc */ - -typedef void (freemem)(void *); - -/* internal handle for SQLite database */ - -typedef struct { - void *sqlite; /* SQLite handle */ -#if HAVE_BOTH_SQLITE - int is3; /* True for SQLITE3 handle */ -#endif - int ver; /* version code */ - jobject bh; /* BusyHandler object */ - jobject cb; /* Callback object */ - jobject ai; /* Authorizer object */ - jobject tr; /* Trace object */ - jobject ph; /* ProgressHandler object */ - JNIEnv *env; /* Java environment for callbacks */ - int row1; /* true while processing first row */ - int haveutf; /* true for SQLite UTF-8 support */ - jstring enc; /* encoding or 0 */ - struct hfunc *funcs; /* SQLite user defined function handles */ -#if HAVE_SQLITE_COMPILE - struct hvm *vms; /* Compiled SQLite VMs */ -#endif -#if HAVE_SQLITE3 - sqlite3_stmt *stmt; /* For callback() */ -#endif -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - struct hbl *blobs; /* SQLite3 blob handles */ -#endif -} handle; - -/* internal handle for SQLite user defined function */ - -typedef struct hfunc { - struct hfunc *next; /* next function */ -#if HAVE_BOTH_SQLITE - int is3; /* True for SQLITE3 handle */ -#endif - jobject fc; /* FunctionContext object */ - jobject fi; /* Function object */ - jobject db; /* Database object */ - handle *h; /* SQLite database handle */ - void *sf; /* SQLite function handle */ - JNIEnv *env; /* Java environment for callbacks */ -} hfunc; - -#if HAVE_SQLITE_COMPILE -/* internal handle for SQLite VM (sqlite_compile()) */ - -typedef struct hvm { - struct hvm *next; /* next vm handle */ -#if HAVE_BOTH_SQLITE - int is3; /* True for SQLITE3 handle */ -#endif - void *vm; /* SQLite 2/3 VM/statement */ - char *tail; /* tail SQL string */ - int tail_len; /* only for SQLite3/prepare */ - handle *h; /* SQLite database handle */ - handle hh; /* fake SQLite database handle */ -} hvm; -#endif - -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO -/* internal handle for sqlite3_blob */ - -typedef struct hbl { - struct hbl *next; /* next blob handle */ - sqlite3_blob *blob; /* SQLite3 blob */ - handle *h; /* SQLite database handle */ -} hbl; -#endif - -/* ISO to/from UTF-8 translation */ - -typedef struct { - char *result; /* translated C string result */ - char *tofree; /* memory to be free'd, or 0 */ - jstring jstr; /* resulting Java string or 0 */ -} transstr; - -/* static cached weak class refs, field and method ids */ - -static jclass C_java_lang_String = 0; - -static jfieldID F_SQLite_Database_handle = 0; -static jfieldID F_SQLite_Database_error_code = 0; -static jfieldID F_SQLite_FunctionContext_handle = 0; -static jfieldID F_SQLite_Vm_handle = 0; -static jfieldID F_SQLite_Vm_error_code = 0; -static jfieldID F_SQLite_Stmt_handle = 0; -static jfieldID F_SQLite_Stmt_error_code = 0; -static jfieldID F_SQLite_Blob_handle = 0; -static jfieldID F_SQLite_Blob_size = 0; - -static jmethodID M_java_lang_String_getBytes = 0; -static jmethodID M_java_lang_String_getBytes2 = 0; -static jmethodID M_java_lang_String_initBytes = 0; -static jmethodID M_java_lang_String_initBytes2 = 0; - -static const char xdigits[] = "0123456789ABCDEF"; - -static void -seterr(JNIEnv *env, jobject obj, int err) -{ - jvalue v; - - v.j = 0; - v.i = (jint) err; - (*env)->SetIntField(env, obj, F_SQLite_Database_error_code, v.i); -} - -#if HAVE_SQLITE_COMPILE -static void -setvmerr(JNIEnv *env, jobject obj, int err) -{ - jvalue v; - - v.j = 0; - v.i = (jint) err; - (*env)->SetIntField(env, obj, F_SQLite_Vm_error_code, v.i); -} - -#if HAVE_SQLITE3 -static void -setstmterr(JNIEnv *env, jobject obj, int err) -{ - jvalue v; - - v.j = 0; - v.i = (jint) err; - (*env)->SetIntField(env, obj, F_SQLite_Stmt_error_code, v.i); -} - -static int -jstrlen(const jchar *jstr) -{ - int len = 0; - - if (jstr) { - while (*jstr++) { - len++; - } - } - return len; -} -#endif -#endif - -static void * -gethandle(JNIEnv *env, jobject obj) -{ - jvalue v; - - v.j = (*env)->GetLongField(env, obj, F_SQLite_Database_handle); - return (void *) v.l; -} - -#if HAVE_SQLITE_COMPILE -static void * -gethvm(JNIEnv *env, jobject obj) -{ - jvalue v; - - v.j = (*env)->GetLongField(env, obj, F_SQLite_Vm_handle); - return (void *) v.l; -} - -#if HAVE_SQLITE3 -static void * -gethstmt(JNIEnv *env, jobject obj) -{ - jvalue v; - - v.j = (*env)->GetLongField(env, obj, F_SQLite_Stmt_handle); - return (void *) v.l; -} -#endif -#endif - -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO -static void * -gethbl(JNIEnv *env, jobject obj) -{ - jvalue v; - - v.j = (*env)->GetLongField(env, obj, F_SQLite_Blob_handle); - return (void *) v.l; -} -#endif - -static void -delglobrefp(JNIEnv *env, jobject *obj) -{ - if (*obj) { - (*env)->DeleteGlobalRef(env, *obj); - *obj = 0; - } -} - -static jobject -globrefpop(JNIEnv *env, jobject *obj) -{ - jobject ret = 0; - - if (*obj) { - ret = *obj; - *obj = 0; - } - return ret; -} - -static void -globrefset(JNIEnv *env, jobject obj, jobject *ref) -{ - if (ref) { - if (obj) { - *ref = (*env)->NewGlobalRef(env, obj); - } else { - *ref = 0; - } - } -} - -static void -freep(char **strp) -{ - if (strp && *strp) { - free(*strp); - *strp = 0; - } -} - -static void -throwex(JNIEnv *env, const char *msg) -{ - jclass except = (*env)->FindClass(env, "SQLite/Exception"); - - (*env)->ExceptionClear(env); - if (except) { - (*env)->ThrowNew(env, except, msg); - } -} - -static void -throwoom(JNIEnv *env, const char *msg) -{ - jclass except = (*env)->FindClass(env, "java/lang/OutOfMemoryError"); - - (*env)->ExceptionClear(env); - if (except) { - (*env)->ThrowNew(env, except, msg); - } -} - -static void -throwclosed(JNIEnv *env) -{ - throwex(env, "database already closed"); -} - -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO -static void -throwioex(JNIEnv *env, const char *msg) -{ - jclass except = (*env)->FindClass(env, "java/io/IOException"); - - (*env)->ExceptionClear(env); - if (except) { - (*env)->ThrowNew(env, except, msg); - } -} -#endif - -static void -transfree(transstr *dest) -{ - dest->result = 0; - freep(&dest->tofree); -} - -static char * -trans2iso(JNIEnv *env, int haveutf, jstring enc, jstring src, - transstr *dest) -{ - jbyteArray bytes = 0; - jthrowable exc; - - dest->result = 0; - dest->tofree = 0; - if (haveutf) { - const char *utf = (*env)->GetStringUTFChars(env, src, 0); - - if (!utf) { - return dest->result; - } - dest->tofree = malloc(strlen(utf) + 1); - dest->result = dest->tofree; - strcpy(dest->result, utf); - (*env)->ReleaseStringUTFChars(env, src, utf); - return dest->result; - } - if (enc) { - bytes = (*env)->CallObjectMethod(env, src, - M_java_lang_String_getBytes2, enc); - } else { - bytes = (*env)->CallObjectMethod(env, src, - M_java_lang_String_getBytes); - } - exc = (*env)->ExceptionOccurred(env); - if (!exc) { - jint len = (*env)->GetArrayLength(env, bytes); - dest->tofree = malloc(len + 1); - if (!dest->tofree) { - throwoom(env, "string translation failed"); - return dest->result; - } - dest->result = dest->tofree; - (*env)->GetByteArrayRegion(env, bytes, 0, len, (jbyte *) dest->result); - dest->result[len] = '\0'; - } else { - (*env)->DeleteLocalRef(env, exc); - } - return dest->result; -} - -static jstring -trans2utf(JNIEnv *env, int haveutf, jstring enc, const char *src, - transstr *dest) -{ - jbyteArray bytes = 0; - int len; - - dest->result = 0; - dest->tofree = 0; - dest->jstr = 0; - if (!src) { - return dest->jstr; - } - if (haveutf) { - dest->jstr = (*env)->NewStringUTF(env, src); - return dest->jstr; - } - len = strlen(src); - bytes = (*env)->NewByteArray(env, len); - if (bytes) { - (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte *) src); - if (enc) { - dest->jstr = - (*env)->NewObject(env, C_java_lang_String, - M_java_lang_String_initBytes2, bytes, enc); - } else { - dest->jstr = - (*env)->NewObject(env, C_java_lang_String, - M_java_lang_String_initBytes, bytes); - } - (*env)->DeleteLocalRef(env, bytes); - return dest->jstr; - } - throwoom(env, "string translation failed"); - return dest->jstr; -} - -#if HAVE_SQLITE2 -static int -busyhandler(void *udata, const char *table, int count) -{ - handle *h = (handle *) udata; - JNIEnv *env = h->env; - int ret = 0; - - if (env && h->bh) { - transstr tabstr; - jclass cls = (*env)->GetObjectClass(env, h->bh); - jmethodID mid = (*env)->GetMethodID(env, cls, "busy", - "(Ljava/lang/String;I)Z"); - - if (mid == 0) { - return ret; - } - trans2utf(env, h->haveutf, h->enc, table, &tabstr); - ret = (*env)->CallBooleanMethod(env, h->bh, mid, tabstr.jstr, - (jint) count) - != JNI_FALSE; - (*env)->DeleteLocalRef(env, tabstr.jstr); - } - return ret; -} -#endif - -#if HAVE_SQLITE3 -static int -busyhandler3(void *udata, int count) -{ - handle *h = (handle *) udata; - JNIEnv *env = h->env; - int ret = 0; - - if (env && h->bh) { - jclass cls = (*env)->GetObjectClass(env, h->bh); - jmethodID mid = (*env)->GetMethodID(env, cls, "busy", - "(Ljava/lang/String;I)Z"); - - if (mid == 0) { - return ret; - } - ret = (*env)->CallBooleanMethod(env, h->bh, mid, 0, (jint) count) - != JNI_FALSE; - } - return ret; -} -#endif - -static int -progresshandler(void *udata) -{ - handle *h = (handle *) udata; - JNIEnv *env = h->env; - int ret = 0; - - if (env && h->ph) { - jclass cls = (*env)->GetObjectClass(env, h->ph); - jmethodID mid = (*env)->GetMethodID(env, cls, "progress", "()Z"); - - if (mid == 0) { - return ret; - } - ret = (*env)->CallBooleanMethod(env, h->ph, mid) != JNI_TRUE; - } - return ret; -} - -static int -callback(void *udata, int ncol, char **data, char **cols) -{ - handle *h = (handle *) udata; - JNIEnv *env = h->env; - - if (env && h->cb) { - jthrowable exc; - jclass cls = (*env)->GetObjectClass(env, h->cb); - jmethodID mid; - jobjectArray arr = 0; - jint i; - - if (h->row1) { - mid = (*env)->GetMethodID(env, cls, "columns", - "([Ljava/lang/String;)V"); - - if (mid) { - arr = (*env)->NewObjectArray(env, ncol, C_java_lang_String, 0); - for (i = 0; i < ncol; i++) { - if (cols[i]) { - transstr col; - - trans2utf(env, h->haveutf, h->enc, cols[i], &col); - (*env)->SetObjectArrayElement(env, arr, i, col.jstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, col.jstr); - } - } - h->row1 = 0; - (*env)->CallVoidMethod(env, h->cb, mid, arr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, arr); - } -#if HAVE_BOTH_SQLITE - if (h->is3) { - mid = (*env)->GetMethodID(env, cls, "types", - "([Ljava/lang/String;)V"); - - if (mid && h->stmt) { - arr = (*env)->NewObjectArray(env, ncol, - C_java_lang_String, 0); - for (i = 0; i < ncol; i++) { - const char *ctype = - sqlite3_column_decltype(h->stmt, i); - - if (!ctype) { - switch (sqlite3_column_type(h->stmt, i)) { - case SQLITE_INTEGER: ctype = "integer"; break; - case SQLITE_FLOAT: ctype = "double"; break; - default: -#if defined(SQLITE_TEXT) && defined(SQLITE3_TEXT) && (SQLITE_TEXT != SQLITE3_TEXT) - case SQLITE_TEXT: -#else -#ifdef SQLITE3_TEXT - case SQLITE3_TEXT: -#endif -#endif - ctype = "text"; break; - case SQLITE_BLOB: ctype = "blob"; break; - case SQLITE_NULL: ctype = "null"; break; - } - } - if (ctype) { - transstr ty; - - trans2utf(env, 1, 0, ctype, &ty); - (*env)->SetObjectArrayElement(env, arr, i, - ty.jstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, ty.jstr); - } - } - (*env)->CallVoidMethod(env, h->cb, mid, arr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, arr); - } - } else { - if (h->ver >= 0x020506 && cols[ncol]) { - mid = (*env)->GetMethodID(env, cls, "types", - "([Ljava/lang/String;)V"); - - if (mid) { - arr = (*env)->NewObjectArray(env, ncol, - C_java_lang_String, 0); - for (i = 0; i < ncol; i++) { - if (cols[i + ncol]) { - transstr ty; - - trans2utf(env, h->haveutf, h->enc, - cols[i + ncol], &ty); - (*env)->SetObjectArrayElement(env, arr, i, - ty.jstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, ty.jstr); - } - } - (*env)->CallVoidMethod(env, h->cb, mid, arr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, arr); - } - } - } -#else -#if HAVE_SQLITE2 - if (h->ver >= 0x020506 && cols[ncol]) { - mid = (*env)->GetMethodID(env, cls, "types", - "([Ljava/lang/String;)V"); - - if (mid) { - arr = (*env)->NewObjectArray(env, ncol, - C_java_lang_String, 0); - for (i = 0; i < ncol; i++) { - if (cols[i + ncol]) { - transstr ty; - - trans2utf(env, h->haveutf, h->enc, - cols[i + ncol], &ty); - (*env)->SetObjectArrayElement(env, arr, i, - ty.jstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, ty.jstr); - } - } - (*env)->CallVoidMethod(env, h->cb, mid, arr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, arr); - } - } -#endif -#if HAVE_SQLITE3 - mid = (*env)->GetMethodID(env, cls, "types", - "([Ljava/lang/String;)V"); - - if (mid && h->stmt) { - arr = (*env)->NewObjectArray(env, ncol, - C_java_lang_String, 0); - for (i = 0; i < ncol; i++) { - const char *ctype = sqlite3_column_decltype(h->stmt, i); - - if (!ctype) { - switch (sqlite3_column_type(h->stmt, i)) { - case SQLITE_INTEGER: ctype = "integer"; break; - case SQLITE_FLOAT: ctype = "double"; break; - default: -#if defined(SQLITE_TEXT) && defined(SQLITE3_TEXT) && (SQLITE_TEXT != SQLITE3_TEXT) - case SQLITE_TEXT: -#else -#ifdef SQLITE3_TEXT - case SQLITE3_TEXT: -#endif -#endif - ctype = "text"; break; - case SQLITE_BLOB: ctype = "blob"; break; - case SQLITE_NULL: ctype = "null"; break; - } - } - if (ctype) { - transstr ty; - - trans2utf(env, 1, 0, ctype, &ty); - (*env)->SetObjectArrayElement(env, arr, i, ty.jstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, ty.jstr); - } - } - (*env)->CallVoidMethod(env, h->cb, mid, arr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, arr); - } -#endif -#endif - } - mid = (*env)->GetMethodID(env, cls, "newrow", - "([Ljava/lang/String;)Z"); - if (mid) { - jboolean rc; - - if (data) { - arr = (*env)->NewObjectArray(env, ncol, C_java_lang_String, 0); - } else { - arr = 0; - } - for (i = 0; arr && i < ncol; i++) { - if (data[i]) { - transstr dats; - - trans2utf(env, h->haveutf, h->enc, data[i], &dats); - (*env)->SetObjectArrayElement(env, arr, i, dats.jstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - (*env)->DeleteLocalRef(env, dats.jstr); - } - } - rc = (*env)->CallBooleanMethod(env, h->cb, mid, arr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return 1; - } - if (arr) { - (*env)->DeleteLocalRef(env, arr); - } - (*env)->DeleteLocalRef(env, cls); - return rc != JNI_FALSE; - } - } - return 0; -} - -static void -doclose(JNIEnv *env, jobject obj, int final) -{ - handle *h = gethandle(env, obj); - - if (h) { - hfunc *f; -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - hbl *bl; -#endif -#if HAVE_SQLITE_COMPILE - hvm *v; - - while ((v = h->vms)) { - h->vms = v->next; - v->next = 0; - v->h = 0; - if (v->vm) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_finalize((sqlite3_stmt *) v->vm); - } else { - sqlite_finalize((sqlite_vm *) v->vm, 0); - } -#else -#if HAVE_SQLITE2 - sqlite_finalize((sqlite_vm *) v->vm, 0); -#endif -#if HAVE_SQLITE3 - sqlite3_finalize((sqlite3_stmt *) v->vm); -#endif -#endif - v->vm = 0; - } - } -#endif - if (h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_close((sqlite3 *) h->sqlite); - } else { - sqlite_close((sqlite *) h->sqlite); - } -#else -#if HAVE_SQLITE2 - sqlite_close((sqlite *) h->sqlite); -#endif -#if HAVE_SQLITE3 - sqlite3_close((sqlite3 *) h->sqlite); -#endif -#endif - h->sqlite = 0; - } - while ((f = h->funcs)) { - h->funcs = f->next; - f->h = 0; - f->sf = 0; - f->env = 0; - if (f->fc) { - (*env)->SetLongField(env, f->fc, - F_SQLite_FunctionContext_handle, 0); - } - delglobrefp(env, &f->db); - delglobrefp(env, &f->fi); - delglobrefp(env, &f->fc); - free(f); - } -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - while ((bl = h->blobs)) { - h->blobs = bl->next; - bl->next = 0; - bl->h = 0; - if (bl->blob) { - sqlite3_blob_close(bl->blob); - } - bl->blob = 0; - } -#endif - delglobrefp(env, &h->bh); - delglobrefp(env, &h->cb); - delglobrefp(env, &h->ai); - delglobrefp(env, &h->tr); - delglobrefp(env, &h->ph); - delglobrefp(env, &h->enc); - free(h); - (*env)->SetLongField(env, obj, F_SQLite_Database_handle, 0); - return; - } - if (!final) { - throwclosed(env); - } -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1close(JNIEnv *env, jobject obj) -{ - doclose(env, obj, 0); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1finalize(JNIEnv *env, jobject obj) -{ - doclose(env, obj, 1); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1busy_1timeout(JNIEnv *env, jobject obj, jint ms) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_busy_timeout((sqlite3 * ) h->sqlite, ms); - } else { - sqlite_busy_timeout((sqlite *) h->sqlite, ms); - } -#else -#if HAVE_SQLITE2 - sqlite_busy_timeout((sqlite *) h->sqlite, ms); -#endif -#if HAVE_SQLITE3 - sqlite3_busy_timeout((sqlite3 * ) h->sqlite, ms); -#endif -#endif - return; - } - throwclosed(env); -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Database_version(JNIEnv *env, jclass cls) -{ - /* CHECK THIS */ -#if HAVE_BOTH_SQLITE - return (*env)->NewStringUTF(env, sqlite_libversion()); -#else -#if HAVE_SQLITE2 - return (*env)->NewStringUTF(env, sqlite_libversion()); -#else - return (*env)->NewStringUTF(env, sqlite3_libversion()); -#endif -#endif -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Database_dbversion(JNIEnv *env, jobject obj) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - return (*env)->NewStringUTF(env, sqlite3_libversion()); - } else { - return (*env)->NewStringUTF(env, sqlite_libversion()); - } -#else -#if HAVE_SQLITE2 - return (*env)->NewStringUTF(env, sqlite_libversion()); -#else - return (*env)->NewStringUTF(env, sqlite3_libversion()); -#endif -#endif - } - return (*env)->NewStringUTF(env, "unknown"); -} - -JNIEXPORT jlong JNICALL -Java_SQLite_Database__1last_1insert_1rowid(JNIEnv *env, jobject obj) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - return (jlong) sqlite3_last_insert_rowid((sqlite3 *) h->sqlite); - } else { - return (jlong) sqlite_last_insert_rowid((sqlite *) h->sqlite); - } -#else -#if HAVE_SQLITE2 - return (jlong) sqlite_last_insert_rowid((sqlite *) h->sqlite); -#endif -#if HAVE_SQLITE3 - return (jlong) sqlite3_last_insert_rowid((sqlite3 *) h->sqlite); -#endif -#endif - } - throwclosed(env); - return (jlong) 0; -} - -JNIEXPORT jlong JNICALL -Java_SQLite_Database__1changes(JNIEnv *env, jobject obj) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - return (jlong) sqlite3_changes((sqlite3 *) h->sqlite); - } else { - return (jlong) sqlite_changes((sqlite *) h->sqlite); - } -#else -#if HAVE_SQLITE2 - return (jlong) sqlite_changes((sqlite *) h->sqlite); -#endif -#if HAVE_SQLITE3 - return (jlong) sqlite3_changes((sqlite3 *) h->sqlite); -#endif -#endif - } - throwclosed(env); - return (jlong) 0; -} - -JNIEXPORT jboolean JNICALL -Java_SQLite_Database__1complete(JNIEnv *env, jclass cls, jstring sql) -{ - transstr sqlstr; - jboolean result; - - if (!sql) { - return JNI_FALSE; - } -#if HAVE_BOTH_SQLITE || HAVE_SQLITE3 - /* CHECK THIS */ - trans2iso(env, 1, 0, sql, &sqlstr); - result = sqlite3_complete(sqlstr.result) ? JNI_TRUE : JNI_FALSE; -#else - trans2iso(env, strcmp(sqlite_libencoding(), "UTF-8") == 0, 0, - sql, &sqlstr); - result = sqlite_complete(sqlstr.result) ? JNI_TRUE : JNI_FALSE; -#endif - transfree(&sqlstr); - return result; -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1interrupt(JNIEnv *env, jobject obj) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_interrupt((sqlite3 *) h->sqlite); - } else { - sqlite_interrupt((sqlite *) h->sqlite); - } -#else -#if HAVE_SQLITE2 - sqlite_interrupt((sqlite *) h->sqlite); -#endif -#if HAVE_SQLITE3 - sqlite3_interrupt((sqlite3 *) h->sqlite); -#endif -#endif - return; - } - throwclosed(env); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1open(JNIEnv *env, jobject obj, jstring file, jint mode) -{ - handle *h = gethandle(env, obj); - jthrowable exc; - char *err = 0; - transstr filename; - int maj, min, lev; - - if (h) { - if (h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_close((sqlite3 *) h->sqlite); - } else { - sqlite_close((sqlite *) h->sqlite); - } - h->is3 = 0; -#else -#if HAVE_SQLITE2 - sqlite_close((sqlite *) h->sqlite); -#endif -#if HAVE_SQLITE3 - sqlite3_close((sqlite3 *) h->sqlite); -#endif -#endif - h->sqlite = 0; - } - } else { - h = malloc(sizeof (handle)); - if (!h) { - throwoom(env, "unable to get SQLite handle"); - return; - } - h->sqlite = 0; - h->bh = h->cb = h->ai = h->tr = h->ph = 0; - /* CHECK THIS */ -#if HAVE_BOTH_SQLITE - h->is3 = 0; - h->stmt = 0; - h->haveutf = 1; -#else -#if HAVE_SQLITE2 - h->haveutf = strcmp(sqlite_libencoding(), "UTF-8") == 0; -#endif -#if HAVE_SQLITE3 - h->stmt = 0; - h->haveutf = 1; -#endif -#endif - h->enc = 0; - h->funcs = 0; - h->ver = 0; -#if HAVE_SQLITE_COMPILE - h->vms = 0; -#endif -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - h->blobs = 0; -#endif - } - h->env = 0; - if (!file) { - throwex(env, err ? err : "invalid file name"); - return; - } - trans2iso(env, h->haveutf, h->enc, file, &filename); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } -#if HAVE_BOTH_SQLITE - { - FILE *f = fopen(filename.result, "rb"); - int c_0 = EOF; - - if (f) { - c_0 = fgetc(f); - fclose(f); - } - if (c_0 != '*') { - int rc = sqlite3_open(filename.result, (sqlite3 **) &h->sqlite); - - if (rc == SQLITE_OK) { - h->is3 = 1; - } else if (h->sqlite) { - sqlite3_close((sqlite3 *) h->sqlite); - h->sqlite = 0; - } - } else { - h->sqlite = (void *) sqlite_open(filename.result, - (int) mode, &err); - } - } -#else -#if HAVE_SQLITE2 - h->sqlite = (void *) sqlite_open(filename.result, (int) mode, &err); -#endif -#if HAVE_SQLITE3 - if (sqlite3_open(filename.result, (sqlite3 **) &h->sqlite) != SQLITE_OK) { - if (h->sqlite) { - sqlite3_close((sqlite3 *) h->sqlite); - h->sqlite = 0; - } - } -#endif -#endif - transfree(&filename); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); -#if HAVE_SQLITE2 - if (err) { - sqlite_freemem(err); - } -#endif - if (h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_close((sqlite3 *) h->sqlite); - h->is3 = 0; - } else { - sqlite_close((sqlite *) h->sqlite); - } -#else -#if HAVE_SQLITE2 - sqlite_close((sqlite *) h->sqlite); -#endif -#if HAVE_SQLITE3 - sqlite3_close((sqlite3 *) h->sqlite); -#endif -#endif - } - h->sqlite = 0; - return; - } - if (h->sqlite) { - jvalue v; - - v.j = 0; - v.l = (jobject) h; - (*env)->SetLongField(env, obj, F_SQLite_Database_handle, v.j); -#if HAVE_SQLITE2 - if (err) { - sqlite_freemem(err); - } -#endif -#if HAVE_BOTH_SQLITE - if (h->is3) { - sscanf(sqlite3_libversion(), "%d.%d.%d", &maj, &min, &lev); - } else { - sscanf(sqlite_libversion(), "%d.%d.%d", &maj, &min, &lev); - } -#else -#if HAVE_SQLITE2 - sscanf(sqlite_libversion(), "%d.%d.%d", &maj, &min, &lev); -#endif -#if HAVE_SQLITE3 - sscanf(sqlite3_libversion(), "%d.%d.%d", &maj, &min, &lev); -#endif -#endif - h->ver = ((maj & 0xFF) << 16) | ((min & 0xFF) << 8) | (lev & 0xFF); - return; - } - throwex(env, err ? err : "unknown error in open"); -#if HAVE_SQLITE2 - if (err) { - sqlite_freemem(err); - } -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1open_1aux_1file(JNIEnv *env, jobject obj, jstring file) -{ - handle *h = gethandle(env, obj); -#if HAVE_SQLITE_OPEN_AUX_FILE - jboolean b; - jthrowable exc; - char *err = 0; - transstr filename; - int ret; -#endif - - if (h && h->sqlite) { -#if HAVE_SQLITE_OPEN_AUX_FILE -#if HAVE_BOTH_SQLITE - if (h->is3) { - throwex(env, "unsupported"); - } -#endif - trans2iso(env, h->haveutf, h->enc, file, &filename); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - ret = sqlite_open_aux_file((sqlite *) h->sqlite, - filename.result, &err); - transfree(&filename); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - if (err) { - sqlite_freemem(err); - } - return; - } - if (ret != SQLITE_OK) { - throwex(env, err ? err : sqlite_error_string(ret)); - } - if (err) { - sqlite_freemem(err); - } -#else - throwex(env, "unsupported"); -#endif - return; - } - throwclosed(env); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1busy_1handler(JNIEnv *env, jobject obj, jobject bh) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { - delglobrefp(env, &h->bh); - globrefset(env, bh, &h->bh); -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_busy_handler((sqlite3 *) h->sqlite, busyhandler3, h); - } else { - sqlite_busy_handler((sqlite *) h->sqlite, busyhandler, h); - } -#else -#if HAVE_SQLITE2 - sqlite_busy_handler((sqlite *) h->sqlite, busyhandler, h); -#endif -#if HAVE_SQLITE3 - sqlite3_busy_handler((sqlite3 *) h->sqlite, busyhandler3, h); -#endif -#endif - return; - } - throwclosed(env); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1exec__Ljava_lang_String_2LSQLite_Callback_2 - (JNIEnv *env, jobject obj, jstring sql, jobject cb) -{ - handle *h = gethandle(env, obj); - freemem *freeproc; - - if (!sql) { - throwex(env, "invalid SQL statement"); - return; - } - if (h) { - if (h->sqlite) { - jthrowable exc; - int rc; - char *err = 0; - transstr sqlstr; - jobject oldcb = globrefpop(env, &h->cb); - - globrefset(env, cb, &h->cb); - h->env = env; - h->row1 = 1; - trans2iso(env, h->haveutf, h->enc, sql, &sqlstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } -#if HAVE_BOTH_SQLITE - if (h->is3) { - rc = sqlite3_exec((sqlite3 *) h->sqlite, sqlstr.result, - callback, h, &err); - freeproc = (freemem *) sqlite3_free; - } else { - rc = sqlite_exec((sqlite *) h->sqlite, sqlstr.result, - callback, h, &err); - freeproc = (freemem *) sqlite_freemem; - } -#else -#if HAVE_SQLITE2 - rc = sqlite_exec((sqlite *) h->sqlite, sqlstr.result, - callback, h, &err); - freeproc = (freemem *) sqlite_freemem; -#endif -#if HAVE_SQLITE3 - rc = sqlite3_exec((sqlite3 *) h->sqlite, sqlstr.result, - callback, h, &err); - freeproc = (freemem *) sqlite3_free; -#endif -#endif - transfree(&sqlstr); - exc = (*env)->ExceptionOccurred(env); - delglobrefp(env, &h->cb); - h->cb = oldcb; - if (exc) { - (*env)->DeleteLocalRef(env, exc); - if (err) { - freeproc(err); - } - return; - } - if (rc != SQLITE_OK) { - char msg[128]; - - seterr(env, obj, rc); - if (!err) { - sprintf(msg, "error %d in sqlite*_exec", rc); - } - throwex(env, err ? err : msg); - } - if (err) { - freeproc(err); - } - return; - } - } - throwclosed(env); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1exec__Ljava_lang_String_2LSQLite_Callback_2_3Ljava_lang_String_2 - (JNIEnv *env, jobject obj, jstring sql, jobject cb, jobjectArray args) -{ - handle *h = gethandle(env, obj); - freemem *freeproc = 0; - - if (!sql) { - throwex(env, "invalid SQL statement"); - return; - } - if (h) { - if (h->sqlite) { - jboolean b; - jthrowable exc; - int rc = SQLITE_ERROR, nargs, i; - char *err = 0, *p; - const char *str = (*env)->GetStringUTFChars(env, sql, &b); - transstr sqlstr; - struct args { - char *arg; - jobject obj; - transstr trans; - } *argv = 0; - char **cargv = 0; - jobject oldcb = globrefpop(env, &h->cb); - - globrefset(env, cb, &h->cb); - p = (char *) str; - nargs = 0; - while (*p) { - if (*p == '%') { - ++p; - if (*p == 'q' || *p == 's') { - nargs++; - if (nargs > MAX_PARAMS) { - (*env)->ReleaseStringUTFChars(env, sql, str); - delglobrefp(env, &h->cb); - h->cb = oldcb; - throwex(env, "too much SQL parameters"); - return; - } - } else if (h->ver >= 0x020500 && *p == 'Q') { - nargs++; - if (nargs > MAX_PARAMS) { - (*env)->ReleaseStringUTFChars(env, sql, str); - delglobrefp(env, &h->cb); - h->cb = oldcb; - throwex(env, "too much SQL parameters"); - return; - } - } else if (*p != '%') { - (*env)->ReleaseStringUTFChars(env, sql, str); - delglobrefp(env, &h->cb); - h->cb = oldcb; - throwex(env, "bad % specification in query"); - return; - } - } - ++p; - } - cargv = malloc((sizeof (*argv) + sizeof (char *)) - * MAX_PARAMS); - if (!cargv) { - (*env)->ReleaseStringUTFChars(env, sql, str); - delglobrefp(env, &h->cb); - h->cb = oldcb; - throwoom(env, "unable to allocate arg vector"); - return; - } - argv = (struct args *) (cargv + MAX_PARAMS); - for (i = 0; i < MAX_PARAMS; i++) { - cargv[i] = 0; - argv[i].arg = 0; - argv[i].obj = 0; - argv[i].trans.result = argv[i].trans.tofree = 0; - } - exc = 0; - for (i = 0; i < nargs; i++) { - jobject so = (*env)->GetObjectArrayElement(env, args, i); - - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - break; - } - if (so) { - argv[i].obj = so; - argv[i].arg = cargv[i] = - trans2iso(env, h->haveutf, h->enc, argv[i].obj, - &argv[i].trans); - } - } - if (exc) { - for (i = 0; i < nargs; i++) { - if (argv[i].obj) { - transfree(&argv[i].trans); - } - } - freep((char **) &cargv); - (*env)->ReleaseStringUTFChars(env, sql, str); - delglobrefp(env, &h->cb); - h->cb = oldcb; - return; - } - h->env = env; - h->row1 = 1; - trans2iso(env, h->haveutf, h->enc, sql, &sqlstr); - exc = (*env)->ExceptionOccurred(env); - if (!exc) { -#if HAVE_BOTH_SQLITE - if (h->is3) { -#if defined(_WIN32) || !defined(CANT_PASS_VALIST_AS_CHARPTR) - char *s = sqlite3_vmprintf(sqlstr.result, (char *) cargv); -#else - char *s = sqlite3_mprintf(sqlstr.result, - cargv[0], cargv[1], - cargv[2], cargv[3], - cargv[4], cargv[5], - cargv[6], cargv[7], - cargv[8], cargv[9], - cargv[10], cargv[11], - cargv[12], cargv[13], - cargv[14], cargv[15], - cargv[16], cargv[17], - cargv[18], cargv[19], - cargv[20], cargv[21], - cargv[22], cargv[23], - cargv[24], cargv[25], - cargv[26], cargv[27], - cargv[28], cargv[29], - cargv[30], cargv[31]); -#endif - - if (s) { - rc = sqlite3_exec((sqlite3 *) h->sqlite, s, callback, - h, &err); - sqlite3_free(s); - } else { - rc = SQLITE_NOMEM; - } - freeproc = (freemem *) sqlite3_free; - } else { -#if defined(_WIN32) || !defined(CANT_PASS_VALIST_AS_CHARPTR) - rc = sqlite_exec_vprintf((sqlite *) h->sqlite, - sqlstr.result, callback, h, &err, - (char *) cargv); -#else - rc = sqlite_exec_printf((sqlite *) h->sqlite, - sqlstr.result, callback, - h, &err, - cargv[0], cargv[1], - cargv[2], cargv[3], - cargv[4], cargv[5], - cargv[6], cargv[7], - cargv[8], cargv[9], - cargv[10], cargv[11], - cargv[12], cargv[13], - cargv[14], cargv[15], - cargv[16], cargv[17], - cargv[18], cargv[19], - cargv[20], cargv[21], - cargv[22], cargv[23], - cargv[24], cargv[25], - cargv[26], cargv[27], - cargv[28], cargv[29], - cargv[30], cargv[31]); -#endif - freeproc = (freemem *) sqlite_freemem; - } -#else -#if HAVE_SQLITE2 -#if defined(_WIN32) || !defined(CANT_PASS_VALIST_AS_CHARPTR) - rc = sqlite_exec_vprintf((sqlite *) h->sqlite, sqlstr.result, - callback, h, &err, (char *) cargv); -#else - rc = sqlite_exec_printf((sqlite *) h->sqlite, sqlstr.result, - callback, h, &err, - cargv[0], cargv[1], - cargv[2], cargv[3], - cargv[4], cargv[5], - cargv[6], cargv[7], - cargv[8], cargv[9], - cargv[10], cargv[11], - cargv[12], cargv[13], - cargv[14], cargv[15], - cargv[16], cargv[17], - cargv[18], cargv[19], - cargv[20], cargv[21], - cargv[22], cargv[23], - cargv[24], cargv[25], - cargv[26], cargv[27], - cargv[28], cargv[29], - cargv[30], cargv[31]); -#endif - freeproc = (freemem *) sqlite_freemem; -#endif -#if HAVE_SQLITE3 -#if defined(_WIN32) || !defined(CANT_PASS_VALIST_AS_CHARPTR) - char *s = sqlite3_vmprintf(sqlstr.result, (char *) cargv); -#else - char *s = sqlite3_mprintf(sqlstr.result, - cargv[0], cargv[1], - cargv[2], cargv[3], - cargv[4], cargv[5], - cargv[6], cargv[7], - cargv[8], cargv[9], - cargv[10], cargv[11], - cargv[12], cargv[13], - cargv[14], cargv[15], - cargv[16], cargv[17], - cargv[18], cargv[19], - cargv[20], cargv[21], - cargv[22], cargv[23], - cargv[24], cargv[25], - cargv[26], cargv[27], - cargv[28], cargv[29], - cargv[30], cargv[31]); -#endif - - if (s) { - rc = sqlite3_exec((sqlite3 *) h->sqlite, s, callback, - h, &err); - sqlite3_free(s); - } else { - rc = SQLITE_NOMEM; - } - freeproc = (freemem *) sqlite3_free; -#endif -#endif - exc = (*env)->ExceptionOccurred(env); - } - for (i = 0; i < nargs; i++) { - if (argv[i].obj) { - transfree(&argv[i].trans); - } - } - transfree(&sqlstr); - (*env)->ReleaseStringUTFChars(env, sql, str); - freep((char **) &cargv); - delglobrefp(env, &h->cb); - h->cb = oldcb; - if (exc) { - (*env)->DeleteLocalRef(env, exc); - if (err && freeproc) { - freeproc(err); - } - return; - } - if (rc != SQLITE_OK) { - char msg[128]; - - seterr(env, obj, rc); - if (!err) { - sprintf(msg, "error %d in sqlite*_exec", rc); - } - throwex(env, err ? err : msg); - } - if (err && freeproc) { - freeproc(err); - } - return; - } - } - throwclosed(env); -} - -static hfunc * -getfunc(JNIEnv *env, jobject obj) -{ - jvalue v; - - v.j = (*env)->GetLongField(env, obj, F_SQLite_FunctionContext_handle); - return (hfunc *) v.l; -} - -#if HAVE_SQLITE2 -static void -call_common(sqlite_func *sf, int isstep, int nargs, const char **args) -{ - hfunc *f = (hfunc *) sqlite_user_data(sf); - - if (f && f->env && f->fi) { - JNIEnv *env = f->env; - jclass cls = (*env)->GetObjectClass(env, f->fi); - jmethodID mid = - (*env)->GetMethodID(env, cls, - isstep ? "step" : "function", - "(LSQLite/FunctionContext;[Ljava/lang/String;)V"); - jobjectArray arr; - int i; - - if (mid == 0) { - return; - } - arr = (*env)->NewObjectArray(env, nargs, C_java_lang_String, 0); - for (i = 0; i < nargs; i++) { - if (args[i]) { - transstr arg; - jthrowable exc; - - trans2utf(env, f->h->haveutf, f->h->enc, args[i], &arg); - (*env)->SetObjectArrayElement(env, arr, i, arg.jstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - (*env)->DeleteLocalRef(env, arg.jstr); - } - } - f->sf = sf; - (*env)->CallVoidMethod(env, f->fi, mid, f->fc, arr); - (*env)->DeleteLocalRef(env, arr); - (*env)->DeleteLocalRef(env, cls); - } -} - -static void -call_func(sqlite_func *sf, int nargs, const char **args) -{ - call_common(sf, 0, nargs, args); -} - -static void -call_step(sqlite_func *sf, int nargs, const char **args) -{ - call_common(sf, 1, nargs, args); -} - -static void -call_final(sqlite_func *sf) -{ - hfunc *f = (hfunc *) sqlite_user_data(sf); - - if (f && f->env && f->fi) { - JNIEnv *env = f->env; - jclass cls = (*env)->GetObjectClass(env, f->fi); - jmethodID mid = (*env)->GetMethodID(env, cls, "last_step", - "(LSQLite/FunctionContext;)V"); - if (mid == 0) { - return; - } - f->sf = sf; - (*env)->CallVoidMethod(env, f->fi, mid, f->fc); - (*env)->DeleteLocalRef(env, cls); - } -} -#endif - -#if HAVE_SQLITE3 -static void -call3_common(sqlite3_context *sf, int isstep, int nargs, sqlite3_value **args) -{ - hfunc *f = (hfunc *) sqlite3_user_data(sf); - - if (f && f->env && f->fi) { - JNIEnv *env = f->env; - jclass cls = (*env)->GetObjectClass(env, f->fi); - jmethodID mid = - (*env)->GetMethodID(env, cls, - isstep ? "step" : "function", - "(LSQLite/FunctionContext;[Ljava/lang/String;)V"); - jobjectArray arr; - int i; - - if (mid == 0) { - return; - } - arr = (*env)->NewObjectArray(env, nargs, C_java_lang_String, 0); - for (i = 0; i < nargs; i++) { - if (args[i]) { - transstr arg; - jthrowable exc; - - trans2utf(env, 1, 0, (char *) sqlite3_value_text(args[i]), - &arg); - (*env)->SetObjectArrayElement(env, arr, i, arg.jstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - (*env)->DeleteLocalRef(env, arg.jstr); - } - } - f->sf = sf; - (*env)->CallVoidMethod(env, f->fi, mid, f->fc, arr); - (*env)->DeleteLocalRef(env, arr); - (*env)->DeleteLocalRef(env, cls); - } -} - -static void -call3_func(sqlite3_context *sf, int nargs, sqlite3_value **args) -{ - call3_common(sf, 0, nargs, args); -} - -static void -call3_step(sqlite3_context *sf, int nargs, sqlite3_value **args) -{ - call3_common(sf, 1, nargs, args); -} - -static void -call3_final(sqlite3_context *sf) -{ - hfunc *f = (hfunc *) sqlite3_user_data(sf); - - if (f && f->env && f->fi) { - JNIEnv *env = f->env; - jclass cls = (*env)->GetObjectClass(env, f->fi); - jmethodID mid = (*env)->GetMethodID(env, cls, "last_step", - "(LSQLite/FunctionContext;)V"); - if (mid == 0) { - return; - } - f->sf = sf; - (*env)->CallVoidMethod(env, f->fi, mid, f->fc); - (*env)->DeleteLocalRef(env, cls); - } -} -#endif - -static void -mkfunc_common(JNIEnv *env, int isagg, jobject obj, jstring name, - jint nargs, jobject fi) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { - jclass cls = (*env)->FindClass(env, "SQLite/FunctionContext"); - jobject fc; - hfunc *f; - int ret; - transstr namestr; - jvalue v; - jthrowable exc; - - fc = (*env)->AllocObject(env, cls); - if (!fi) { - throwex(env, "null SQLite.Function not allowed"); - return; - } - f = malloc(sizeof (hfunc)); - if (!f) { - throwoom(env, "unable to get SQLite.FunctionContext handle"); - return; - } - globrefset(env, fc, &f->fc); - globrefset(env, fi, &f->fi); - globrefset(env, obj, &f->db); - f->h = h; - f->next = h->funcs; - h->funcs = f; - f->sf = 0; - f->env = env; - v.j = 0; - v.l = (jobject) f; - (*env)->SetLongField(env, f->fc, F_SQLite_FunctionContext_handle, v.j); - trans2iso(env, h->haveutf, h->enc, name, &namestr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } -#if HAVE_BOTH_SQLITE - f->is3 = h->is3; - if (h->is3) { - ret = sqlite3_create_function((sqlite3 *) h->sqlite, - namestr.result, - (int) nargs, - SQLITE_UTF8, f, - isagg ? NULL : call3_func, - isagg ? call3_step : NULL, - isagg ? call3_final : NULL); - - } else { - if (isagg) { - ret = sqlite_create_aggregate((sqlite *) h->sqlite, - namestr.result, - (int) nargs, - call_step, call_final, f); - } else { - ret = sqlite_create_function((sqlite *) h->sqlite, - namestr.result, - (int) nargs, - call_func, f); - } - } -#else -#if HAVE_SQLITE2 - if (isagg) { - ret = sqlite_create_aggregate((sqlite *) h->sqlite, namestr.result, - (int) nargs, - call_step, call_final, f); - } else { - ret = sqlite_create_function((sqlite *) h->sqlite, namestr.result, - (int) nargs, - call_func, f); - } -#endif -#if HAVE_SQLITE3 - ret = sqlite3_create_function((sqlite3 *) h->sqlite, - namestr.result, - (int) nargs, - SQLITE_UTF8, f, - isagg ? NULL : call3_func, - isagg ? call3_step : NULL, - isagg ? call3_final : NULL); -#endif -#endif - transfree(&namestr); - if (ret != SQLITE_OK) { - throwex(env, "error creating function/aggregate"); - } - return; - } - throwclosed(env); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1create_1aggregate(JNIEnv *env, jobject obj, - jstring name, jint nargs, jobject fi) -{ - mkfunc_common(env, 1, obj, name, nargs, fi); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1create_1function(JNIEnv *env, jobject obj, - jstring name, jint nargs, jobject fi) -{ - mkfunc_common(env, 0, obj, name, nargs, fi); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1function_1type(JNIEnv *env, jobject obj, - jstring name, jint type) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { -#if HAVE_BOTH_SQLITE - if (h->is3) { - return; - } -#endif -#if HAVE_SQLITE2 -#if HAVE_SQLITE_FUNCTION_TYPE - { - int ret; - transstr namestr; - jthrowable exc; - - trans2iso(env, h->haveutf, h->enc, name, &namestr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - ret = sqlite_function_type(h->sqlite, namestr.result, (int) type); - transfree(&namestr); - if (ret != SQLITE_OK) { - throwex(env, sqlite_error_string(ret)); - } - } -#endif -#endif - return; - } - throwclosed(env); -} - -JNIEXPORT jint JNICALL -Java_SQLite_FunctionContext_count(JNIEnv *env, jobject obj) -{ - hfunc *f = getfunc(env, obj); - jint r = 0; - - if (f && f->sf) { -#if HAVE_SQLITE_BOTH - if (f->is3) { - r = (jint) sqlite3_aggregate_count((sqlite3_context *) f->sf); - } else { - r = (jint) sqlite_aggregate_count((sqlite_func *) f->sf); - } -#else -#if HAVE_SQLITE2 - r = (jint) sqlite_aggregate_count((sqlite_func *) f->sf); -#endif -#if HAVE_SQLITE3 - r = (jint) sqlite3_aggregate_count((sqlite3_context *) f->sf); -#endif -#endif - } - return r; -} - -JNIEXPORT void JNICALL -Java_SQLite_FunctionContext_set_1error(JNIEnv *env, jobject obj, jstring err) -{ - hfunc *f = getfunc(env, obj); - - if (f && f->sf) { -#if HAVE_BOTH_SQLITE - if (!f->is3) { - transstr errstr; - jthrowable exc; - - trans2iso(env, f->h->haveutf, f->h->enc, err, &errstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - sqlite_set_result_error((sqlite_func *) f->sf, - errstr.result, -1); - transfree(&errstr); - } else if (err) { - jsize len = (*env)->GetStringLength(env, err) * sizeof (jchar); - const jchar *str = (*env)->GetStringChars(env, err, 0); - - sqlite3_result_error16((sqlite3_context *) f->sf, str, len); - (*env)->ReleaseStringChars(env, err, str); - } else { - sqlite3_result_error((sqlite3_context *) f->sf, - "null error text", -1); - } -#else -#if HAVE_SQLITE2 - transstr errstr; - jthrowable exc; - - trans2iso(env, f->h->haveutf, f->h->enc, err, &errstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - sqlite_set_result_error((sqlite_func *) f->sf, errstr.result, -1); - transfree(&errstr); -#endif -#if HAVE_SQLITE3 - if (err) { - jsize len = (*env)->GetStringLength(env, err) * sizeof (jchar); - const jchar *str = (*env)->GetStringChars(env, err, 0); - - sqlite3_result_error16((sqlite3_context *) f->sf, str, len); - (*env)->ReleaseStringChars(env, err, str); - } else { - sqlite3_result_error((sqlite3_context *) f->sf, - "null error text", -1); - } -#endif -#endif - } -} - -JNIEXPORT void JNICALL -Java_SQLite_FunctionContext_set_1result__D(JNIEnv *env, jobject obj, jdouble d) -{ - hfunc *f = getfunc(env, obj); - - if (f && f->sf) { -#if HAVE_BOTH_SQLITE - if (f->is3) { - sqlite3_result_double((sqlite3_context *) f->sf, (double) d); - } else { - sqlite_set_result_double((sqlite_func *) f->sf, (double) d); - } -#else -#if HAVE_SQLITE2 - sqlite_set_result_double((sqlite_func *) f->sf, (double) d); -#endif -#if HAVE_SQLITE3 - sqlite3_result_double((sqlite3_context *) f->sf, (double) d); -#endif -#endif - } -} - -JNIEXPORT void JNICALL -Java_SQLite_FunctionContext_set_1result__I(JNIEnv *env, jobject obj, jint i) -{ - hfunc *f = getfunc(env, obj); - - if (f && f->sf) { -#if HAVE_BOTH_SQLITE - if (f->is3) { - sqlite3_result_int((sqlite3_context *) f->sf, (int) i); - } else { - sqlite_set_result_int((sqlite_func *) f->sf, (int) i); - } -#else -#if HAVE_SQLITE2 - sqlite_set_result_int((sqlite_func *) f->sf, (int) i); -#endif -#if HAVE_SQLITE3 - sqlite3_result_int((sqlite3_context *) f->sf, (int) i); -#endif -#endif - } -} - -JNIEXPORT void JNICALL -Java_SQLite_FunctionContext_set_1result__Ljava_lang_String_2(JNIEnv *env, - jobject obj, - jstring ret) -{ - hfunc *f = getfunc(env, obj); - - if (f && f->sf) { -#if HAVE_BOTH_SQLITE - if (!f->is3) { - transstr retstr; - jthrowable exc; - - trans2iso(env, f->h->haveutf, f->h->enc, ret, &retstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - sqlite_set_result_string((sqlite_func *) f->sf, - retstr.result, -1); - transfree(&retstr); - } else if (ret) { - jsize len = (*env)->GetStringLength(env, ret) * sizeof (jchar); - const jchar *str = (*env)->GetStringChars(env, ret, 0); - - sqlite3_result_text16((sqlite3_context *) f->sf, str, len, - SQLITE_TRANSIENT); - (*env)->ReleaseStringChars(env, ret, str); - } else { - sqlite3_result_null((sqlite3_context *) f->sf); - } -#else -#if HAVE_SQLITE2 - transstr retstr; - jthrowable exc; - - trans2iso(env, f->h->haveutf, f->h->enc, ret, &retstr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - sqlite_set_result_string((sqlite_func *) f->sf, retstr.result, -1); - transfree(&retstr); -#endif -#if HAVE_SQLITE3 - if (ret) { - jsize len = (*env)->GetStringLength(env, ret) * sizeof (jchar); - const jchar *str = (*env)->GetStringChars(env, ret, 0); - - sqlite3_result_text16((sqlite3_context *) f->sf, str, len, - SQLITE_TRANSIENT); - (*env)->ReleaseStringChars(env, ret, str); - } else { - sqlite3_result_null((sqlite3_context *) f->sf); - } -#endif -#endif - } -} - -JNIEXPORT void JNICALL -Java_SQLite_FunctionContext_set_1result___3B(JNIEnv *env, jobject obj, - jbyteArray b) -{ -#if HAVE_SQLITE3 - hfunc *f = getfunc(env, obj); - - if (f && f->sf) { -#if HAVE_BOTH_SQLITE - if (!f->is3) { - /* silently ignored */ - return; - } -#endif - if (b) { - jsize len; - jbyte *data; - - len = (*env)->GetArrayLength(env, b); - data = (*env)->GetByteArrayElements(env, b, 0); - sqlite3_result_blob((sqlite3_context *) f->sf, - data, len, SQLITE_TRANSIENT); - (*env)->ReleaseByteArrayElements(env, b, data, 0); - } else { - sqlite3_result_null((sqlite3_context *) f->sf); - } - } -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_FunctionContext_set_1result_1zeroblob(JNIEnv *env, jobject obj, - jint n) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_RESULT_ZEROBLOB - hfunc *f = getfunc(env, obj); - - if (f && f->sf) { -#if HAVE_BOTH_SQLITE - if (!f->is3) { - /* silently ignored */ - return; - } -#endif - sqlite3_result_zeroblob((sqlite3_context *) f->sf, n); - } -#endif -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Database_error_1string(JNIEnv *env, jclass c, jint err) -{ -#if HAVE_SQLITE2 - return (*env)->NewStringUTF(env, sqlite_error_string((int) err)); -#else - return (*env)->NewStringUTF(env, "unkown error"); -#endif -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Database__1errmsg(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { -#if HAVE_BOTH_SQLITE - if (!h->is3) { - return 0; - } -#endif - return (*env)->NewStringUTF(env, - sqlite3_errmsg((sqlite3 *) h->sqlite)); - } -#endif - return 0; -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1set_1encoding(JNIEnv *env, jobject obj, jstring enc) -{ - handle *h = gethandle(env, obj); - - if (h && !h->haveutf) { -#if HAVE_BOTH_SQLITE - if (!h->is3) { - delglobrefp(env, &h->enc); - h->enc = enc; - globrefset(env, enc, &h->enc); - } -#else -#if HAVE_SQLITE2 - delglobrefp(env, &h->enc); - h->enc = enc; - globrefset(env, enc, &h->enc); -#endif -#endif - } -} - -#if HAVE_SQLITE_SET_AUTHORIZER -static int -doauth(void *arg, int what, const char *arg1, const char *arg2, - const char *arg3, const char *arg4) -{ - handle *h = (handle *) arg; - JNIEnv *env = h->env; - - if (env && h->ai) { - jthrowable exc; - jclass cls = (*env)->GetObjectClass(env, h->ai); - jmethodID mid; - jint i = what; - - mid = (*env)->GetMethodID(env, cls, "authorize", - "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"); - if (mid) { - jstring s1 = 0, s2 = 0, s3 = 0, s4 = 0; - transstr tr; - - if (arg1) { - trans2utf(env, h->haveutf, h->enc, arg1, &tr); - s1 = tr.jstr; - } - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return SQLITE_DENY; - } - if (arg2) { - trans2utf(env, h->haveutf, h->enc, arg2, &tr); - s2 = tr.jstr; - } - if (arg3) { - trans2utf(env, h->haveutf, h->enc, arg3, &tr); - s3 = tr.jstr; - } - if (arg4) { - trans2utf(env, h->haveutf, h->enc, arg4, &tr); - s4 = tr.jstr; - } - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return SQLITE_DENY; - } - i = (*env)->CallIntMethod(env, h->ai, mid, i, s1, s2, s3, s4); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return SQLITE_DENY; - } - (*env)->DeleteLocalRef(env, s4); - (*env)->DeleteLocalRef(env, s3); - (*env)->DeleteLocalRef(env, s2); - (*env)->DeleteLocalRef(env, s1); - if (i != SQLITE_OK && i != SQLITE_IGNORE) { - i = SQLITE_DENY; - } - return (int) i; - } - } - return SQLITE_DENY; -} -#endif - -JNIEXPORT void JNICALL -Java_SQLite_Database__1set_1authorizer(JNIEnv *env, jobject obj, jobject auth) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { - delglobrefp(env, &h->ai); - globrefset(env, auth, &h->ai); -#if HAVE_SQLITE_SET_AUTHORIZER - h->env = env; -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_set_authorizer((sqlite3 *) h->sqlite, - h->ai ? doauth : 0, h); - } else { - sqlite_set_authorizer((sqlite *) h->sqlite, - h->ai ? doauth : 0, h); - } -#else -#if HAVE_SQLITE2 - sqlite_set_authorizer((sqlite *) h->sqlite, h->ai ? doauth : 0, h); -#endif -#if HAVE_SQLITE3 - sqlite3_set_authorizer((sqlite3 *) h->sqlite, h->ai ? doauth : 0, h); -#endif -#endif -#endif - return; - } - throwclosed(env); -} - -#if HAVE_SQLITE_TRACE -static void -dotrace(void *arg, const char *msg) -{ - handle *h = (handle *) arg; - JNIEnv *env = h->env; - - if (env && h->tr && msg) { - jthrowable exc; - jclass cls = (*env)->GetObjectClass(env, h->tr); - jmethodID mid; - - mid = (*env)->GetMethodID(env, cls, "trace", "(Ljava/lang/String;)V"); - if (mid) { - transstr tr; - - trans2utf(env, h->haveutf, h->enc, msg, &tr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - (*env)->ExceptionClear(env); - return; - } - (*env)->CallVoidMethod(env, h->tr, mid, tr.jstr); - (*env)->ExceptionClear(env); - (*env)->DeleteLocalRef(env, tr.jstr); - return; - } - } - return; -} -#endif - -JNIEXPORT void JNICALL -Java_SQLite_Database__1trace(JNIEnv *env, jobject obj, jobject tr) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { - delglobrefp(env, &h->tr); - globrefset(env, tr, &h->tr); -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_trace((sqlite3 *) h->sqlite, h->tr ? dotrace : 0, h); - } else { -#if HAVE_SQLITE_TRACE - sqlite_trace((sqlite *) h->sqlite, h->tr ? dotrace : 0, h); -#endif - } -#else -#if HAVE_SQLITE2 -#if HAVE_SQLITE_TRACE - sqlite_trace((sqlite *) h->sqlite, h->tr ? dotrace : 0, h); -#endif -#endif -#if HAVE_SQLITE3 - sqlite3_trace((sqlite3 *) h->sqlite, h->tr ? dotrace : 0, h); -#endif -#endif - return; - } - throwclosed(env); -} - -#if HAVE_SQLITE_COMPILE -static void -dovmfinal(JNIEnv *env, jobject obj, int final) -{ - hvm *v = gethvm(env, obj); - - if (v) { - if (v->h) { - handle *h = v->h; - hvm *vv, **vvp; - - vvp = &h->vms; - vv = *vvp; - while (vv) { - if (vv == v) { - *vvp = vv->next; - break; - } - vvp = &vv->next; - vv = *vvp; - } - } - if (v->vm) { -#if HAVE_BOTH_SQLITE - if (v->is3) { - sqlite3_finalize((sqlite3_stmt *) v->vm); - } else { - sqlite_finalize((sqlite_vm *) v->vm, 0); - } -#else -#if HAVE_SQLITE2 - sqlite_finalize((sqlite_vm *) v->vm, 0); -#endif -#if HAVE_SQLITE3 - sqlite3_finalize((sqlite3_stmt *) v->vm); -#endif -#endif - v->vm = 0; - } - free(v); - (*env)->SetLongField(env, obj, F_SQLite_Vm_handle, 0); - return; - } - if (!final) { - throwex(env, "vm already closed"); - } -} -#endif - -#if HAVE_SQLITE3 -static void -dostmtfinal(JNIEnv *env, jobject obj) -{ - hvm *v = gethstmt(env, obj); - - if (v) { - if (v->h) { - handle *h = v->h; - hvm *vv, **vvp; - - vvp = &h->vms; - vv = *vvp; - while (vv) { - if (vv == v) { - *vvp = vv->next; - break; - } - vvp = &vv->next; - vv = *vvp; - } - } - if (v->vm) { - sqlite3_finalize((sqlite3_stmt *) v->vm); - } - v->vm = 0; - free(v); - (*env)->SetLongField(env, obj, F_SQLite_Stmt_handle, 0); - } -} -#endif - -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO -static void -doblobfinal(JNIEnv *env, jobject obj) -{ - hbl *bl = gethbl(env, obj); - - if (bl) { - if (bl->h) { - handle *h = bl->h; - hbl *blc, **blp; - - blp = &h->blobs; - blc = *blp; - while (blc) { - if (blc == bl) { - *blp = blc->next; - break; - } - blp = &blc->next; - blc = *blp; - } - } - if (bl->blob) { - sqlite3_blob_close(bl->blob); - } - bl->blob = 0; - free(bl); - (*env)->SetLongField(env, obj, F_SQLite_Blob_handle, 0); - (*env)->SetIntField(env, obj, F_SQLite_Blob_size, 0); - } -} -#endif - -JNIEXPORT void JNICALL -Java_SQLite_Vm_stop(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE_COMPILE - dovmfinal(env, obj, 0); -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Vm_finalize(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE_COMPILE - dovmfinal(env, obj, 1); -#endif -} - -#if HAVE_SQLITE_COMPILE -#if HAVE_SQLITE3 -static void -free_tab(void *mem) -{ - char **p = (char **) mem; - int i, n; - - if (!p) { - return; - } - p -= 1; - mem = (void *) p; - n = ((int *) p)[0]; - p += n * 2 + 2 + 1; - for (i = 0; i < n; i++) { - if (p[i]) { - free(p[i]); - } - } - free(mem); -} -#endif -#endif - -JNIEXPORT jboolean JNICALL -Java_SQLite_Vm_step(JNIEnv *env, jobject obj, jobject cb) -{ -#if HAVE_SQLITE_COMPILE - hvm *v = gethvm(env, obj); - - if (v && v->vm && v->h) { - jthrowable exc; - int ret, ncol = 0; -#if HAVE_SQLITE3 - freemem *freeproc = 0; - const char **blob = 0; -#endif - const char **data = 0, **cols = 0; - - v->h->env = env; -#if HAVE_BOTH_SQLITE - if (v->is3) { - ret = sqlite3_step((sqlite3_stmt *) v->vm); - if (ret == SQLITE_ROW) { - ncol = sqlite3_data_count((sqlite3_stmt *) v->vm); - if (ncol > 0) { - data = calloc(ncol * 3 + 3 + 1, sizeof (char *)); - if (data) { - data[0] = (const char *) ncol; - ++data; - cols = data + ncol + 1; - blob = cols + ncol + 1; - freeproc = free_tab; - } else { - ret = SQLITE_NOMEM; - } - } - if (ret != SQLITE_NOMEM) { - int i; - - for (i = 0; i < ncol; i++) { - cols[i] = - sqlite3_column_name((sqlite3_stmt *) v->vm, i); - if (sqlite3_column_type((sqlite3_stmt *) v->vm, i) - == SQLITE_BLOB) { - unsigned char *src = (unsigned char *) - sqlite3_column_blob((sqlite3_stmt *) v->vm, i); - int n = - sqlite3_column_bytes((sqlite3_stmt *) v->vm, - i); - - if (src) { - data[i] = malloc(n * 2 + 4); - if (data[i]) { - int k; - char *p = (char *) data[i]; - - blob[i] = data[i]; - *p++ = 'X'; - *p++ = '\''; - for (k = 0; k < n; k++) { - *p++ = xdigits[src[k] >> 4]; - *p++ = xdigits[src[k] & 0x0F]; - } - *p++ = '\''; - *p++ = '\0'; - } - } - } else { - data[i] = (const char *) - sqlite3_column_text((sqlite3_stmt *) v->vm, i); - } - } - } - } - } else { - ret = sqlite_step((sqlite_vm *) v->vm, &ncol, &data, &cols); - } -#else -#if HAVE_SQLITE2 - ret = sqlite_step((sqlite_vm *) v->vm, &ncol, &data, &cols); -#endif -#if HAVE_SQLITE3 - ret = sqlite3_step((sqlite3_stmt *) v->vm); - if (ret == SQLITE_ROW) { - ncol = sqlite3_data_count((sqlite3_stmt *) v->vm); - if (ncol > 0) { - data = calloc(ncol * 3 + 3 + 1, sizeof (char *)); - if (data) { - data[0] = (const char *) ncol; - ++data; - cols = data + ncol + 1; - blob = cols + ncol + 1; - freeproc = free_tab; - } else { - ret = SQLITE_NOMEM; - } - } - if (ret != SQLITE_NOMEM) { - int i; - - for (i = 0; i < ncol; i++) { - cols[i] = sqlite3_column_name((sqlite3_stmt *) v->vm, i); - if (sqlite3_column_type((sqlite3_stmt *) v->vm, i) - == SQLITE_BLOB) { - unsigned char *src = (unsigned char *) - sqlite3_column_blob((sqlite3_stmt *) v->vm, i); - int n = - sqlite3_column_bytes((sqlite3_stmt *) v->vm, i); - - if (src) { - data[i] = malloc(n * 2 + 4); - if (data[i]) { - int k; - char *p = (char *) data[i]; - - blob[i] = data[i]; - *p++ = 'X'; - *p++ = '\''; - for (k = 0; k < n; k++) { - *p++ = xdigits[src[k] >> 4]; - *p++ = xdigits[src[k] & 0x0F]; - } - *p++ = '\''; - *p++ = '\0'; - } - } - } else { - data[i] = (char *) - sqlite3_column_text((sqlite3_stmt *) v->vm, i); - } - } - } - } -#endif -#endif - if (ret == SQLITE_ROW) { - v->hh.cb = cb; - v->hh.env = env; -#if HAVE_BOTH_SQLITE - if (v->is3) { - v->hh.stmt = (sqlite3_stmt *) v->vm; - } -#else -#if HAVE_SQLITE3 - v->hh.stmt = (sqlite3_stmt *) v->vm; -#endif -#endif - callback((void *) &v->hh, ncol, (char **) data, (char **) cols); -#if HAVE_SQLITE3 - if (data && freeproc) { - freeproc((void *) data); - } -#endif - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - goto dofin; - } - return JNI_TRUE; - } else if (ret == SQLITE_DONE) { -dofin: -#if HAVE_BOTH_SQLITE - if (v->is3) { - sqlite3_finalize((sqlite3_stmt *) v->vm); - } else { - sqlite_finalize((sqlite_vm *) v->vm, 0); - } -#else -#if HAVE_SQLITE2 - sqlite_finalize((sqlite_vm *) v->vm, 0); -#endif -#if HAVE_SQLITE3 - sqlite3_finalize((sqlite3_stmt *) v->vm); -#endif -#endif - v->vm = 0; - return JNI_FALSE; - } -#if HAVE_BOTH_SQLITE - if (v->is3) { - sqlite3_finalize((sqlite3_stmt *) v->vm); - } else { - sqlite_finalize((sqlite_vm *) v->vm, 0); - } -#else -#if HAVE_SQLITE2 - sqlite_finalize((sqlite_vm *) v->vm, 0); -#endif -#if HAVE_SQLITE3 - sqlite3_finalize((sqlite3_stmt *) v->vm); -#endif -#endif - setvmerr(env, obj, ret); - v->vm = 0; - throwex(env, "error in step"); - return JNI_FALSE; - } - throwex(env, "vm already closed"); -#else - throwex(env, "unsupported"); -#endif - return JNI_FALSE; -} - -JNIEXPORT jboolean JNICALL -Java_SQLite_Vm_compile(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE_COMPILE - hvm *v = gethvm(env, obj); - void *svm = 0; - char *err = 0; - const char *tail; - int ret; - - if (v && v->vm) { -#if HAVE_BOTH_SQLITE - if (v->is3) { - sqlite3_finalize((sqlite3_stmt *) v->vm); - } else { - sqlite_finalize((sqlite_vm *) v->vm, 0); - } -#else -#if HAVE_SQLITE2 - sqlite_finalize((sqlite_vm *) v->vm, 0); -#endif -#if HAVE_SQLITE3 - sqlite3_finalize((sqlite3_stmt *) v->vm); -#endif -#endif - v->vm = 0; - } - if (v && v->h && v->h->sqlite) { - if (!v->tail) { - return JNI_FALSE; - } - v->h->env = env; -#if HAVE_BOTH_SQLITE - if (v->is3) { -#if HAVE_SQLITE3_PREPARE_V2 - ret = sqlite3_prepare_v2((sqlite3 *) v->h->sqlite, v->tail, -1, - (sqlite3_stmt **) &svm, &tail); -#else - ret = sqlite3_prepare((sqlite3 *) v->h->sqlite, v->tail, -1, - (sqlite3_stmt **) &svm, &tail); -#endif - if (ret != SQLITE_OK) { - if (svm) { - sqlite3_finalize((sqlite3_stmt *) svm); - svm = 0; - } - } - } else { - ret = sqlite_compile((sqlite *) v->h->sqlite, v->tail, - &tail, (sqlite_vm **) &svm, &err); - if (ret != SQLITE_OK) { - if (svm) { - sqlite_finalize((sqlite_vm *) svm, 0); - svm = 0; - } - } - } -#else -#if HAVE_SQLITE2 - ret = sqlite_compile((sqlite *) v->h->sqlite, v->tail, - &tail, (sqlite_vm **) &svm, &err); - if (ret != SQLITE_OK) { - if (svm) { - sqlite_finalize((sqlite_vm *) svm, 0); - svm = 0; - } - } -#endif -#if HAVE_SQLITE3 -#if HAVE_SQLITE3_PREPARE_V2 - ret = sqlite3_prepare_v2((sqlite3 *) v->h->sqlite, - v->tail, -1, (sqlite3_stmt **) &svm, &tail); -#else - ret = sqlite3_prepare((sqlite3 *) v->h->sqlite, - v->tail, -1, (sqlite3_stmt **) &svm, &tail); -#endif - if (ret != SQLITE_OK) { - if (svm) { - sqlite3_finalize((sqlite3_stmt *) svm); - svm = 0; - } - } -#endif -#endif - if (ret != SQLITE_OK) { - setvmerr(env, obj, ret); - v->tail = 0; - throwex(env, err ? err : "error in compile/prepare"); -#if HAVE_SQLITE2 - if (err) { - sqlite_freemem(err); - } -#endif - return JNI_FALSE; - } -#if HAVE_SQLITE2 - if (err) { - sqlite_freemem(err); - } -#endif - if (!svm) { - v->tail = 0; - return JNI_FALSE; - } - v->vm = svm; - v->tail = (char *) tail; - v->hh.row1 = 1; - return JNI_TRUE; - } - throwex(env, "vm already closed"); -#else - throwex(env, "unsupported"); -#endif - return JNI_FALSE; -} - -JNIEXPORT void JNICALL -Java_SQLite_Database_vm_1compile(JNIEnv *env, jobject obj, jstring sql, - jobject vm) -{ -#if HAVE_SQLITE_COMPILE - handle *h = gethandle(env, obj); - void *svm = 0; - hvm *v; - char *err = 0; - const char *tail; - transstr tr; - jvalue vv; - int ret; - jthrowable exc; - - if (!h) { - throwclosed(env); - return; - } - if (!vm) { - throwex(env, "null vm"); - return; - } - if (!sql) { - throwex(env, "null sql"); - return; - } - trans2iso(env, h->haveutf, h->enc, sql, &tr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - h->env = env; -#if HAVE_BOTH_SQLITE - if (h->is3) { -#if HAVE_SQLITE3_PREPARE_V2 - ret = sqlite3_prepare_v2((sqlite3 *) h->sqlite, tr.result, -1, - (sqlite3_stmt **) &svm, &tail); -#else - ret = sqlite3_prepare((sqlite3 *) h->sqlite, tr.result, -1, - (sqlite3_stmt **) &svm, &tail); -#endif - if (ret != SQLITE_OK) { - if (svm) { - sqlite3_finalize((sqlite3_stmt *) svm); - svm = 0; - } - } - } else { - ret = sqlite_compile((sqlite *) h->sqlite, tr.result, &tail, - (sqlite_vm **) &svm, &err); - if (ret != SQLITE_OK) { - if (svm) { - sqlite_finalize((sqlite_vm *) svm, 0); - } - } - } -#else -#if HAVE_SQLITE2 - ret = sqlite_compile((sqlite *) h->sqlite, tr.result, &tail, - (sqlite_vm **) &svm, &err); - if (ret != SQLITE_OK) { - if (svm) { - sqlite_finalize((sqlite_vm *) svm, 0); - svm = 0; - } - } -#endif -#if HAVE_SQLITE3 -#if HAVE_SQLITE3_PREPARE_V2 - ret = sqlite3_prepare_v2((sqlite3 *) h->sqlite, tr.result, -1, - (sqlite3_stmt **) &svm, &tail); -#else - ret = sqlite3_prepare((sqlite3 *) h->sqlite, tr.result, -1, - (sqlite3_stmt **) &svm, &tail); -#endif - if (ret != SQLITE_OK) { - if (svm) { - sqlite3_finalize((sqlite3_stmt *) svm); - svm = 0; - } - } -#endif -#endif - if (ret != SQLITE_OK) { - transfree(&tr); - setvmerr(env, vm, ret); - throwex(env, err ? err : "error in prepare/compile"); -#if HAVE_SQLITE2 - if (err) { - sqlite_freemem(err); - } -#endif - return; - } -#if HAVE_SQLITE2 - if (err) { - sqlite_freemem(err); - } -#endif - if (!svm) { - transfree(&tr); - return; - } - v = malloc(sizeof (hvm) + strlen(tail) + 1); - if (!v) { - transfree(&tr); -#if HAVE_BOTH_SQLITE - if (h->is3) { - sqlite3_finalize((sqlite3_stmt *) svm); - } else { - sqlite_finalize((sqlite_vm *) svm, 0); - } -#else -#if HAVE_SQLITE2 - sqlite_finalize((sqlite_vm *) svm, 0); -#endif -#if HAVE_SQLITE3 - sqlite3_finalize((sqlite3_stmt *) svm); -#endif -#endif - throwoom(env, "unable to get SQLite handle"); - return; - } - v->next = h->vms; - h->vms = v; - v->vm = svm; - v->h = h; - v->tail = (char *) (v + 1); -#if HAVE_BOTH_SQLITE - v->is3 = v->hh.is3 = h->is3; -#endif - strcpy(v->tail, tail); - v->hh.sqlite = 0; - v->hh.haveutf = h->haveutf; - v->hh.ver = h->ver; - v->hh.bh = v->hh.cb = v->hh.ai = v->hh.tr = v->hh.ph = 0; - v->hh.row1 = 1; - v->hh.enc = h->enc; - v->hh.funcs = 0; - v->hh.vms = 0; - v->hh.env = 0; - vv.j = 0; - vv.l = (jobject) v; - (*env)->SetLongField(env, vm, F_SQLite_Vm_handle, vv.j); -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Database_vm_1compile_1args(JNIEnv *env, - jobject obj, jstring sql, - jobject vm, jobjectArray args) -{ -#if HAVE_SQLITE_COMPILE -#if HAVE_SQLITE3 - handle *h = gethandle(env, obj); -#endif - -#if HAVE_BOTH_SQLITE - if (h && !h->is3) { - throwex(env, "unsupported"); - return; - } -#else -#if HAVE_SQLITE2 - throwex(env, "unsupported"); -#endif -#endif -#if HAVE_SQLITE3 - if (!h || !h->sqlite) { - throwclosed(env); - return; - } - if (!vm) { - throwex(env, "null vm"); - return; - } - if (!sql) { - throwex(env, "null sql"); - return; - } else { - void *svm = 0; - hvm *v; - jvalue vv; - jthrowable exc; - jboolean b; - int rc = SQLITE_ERROR, nargs, i; - char *p; - const char *str = (*env)->GetStringUTFChars(env, sql, &b); - const char *tail; - transstr sqlstr; - struct args { - char *arg; - jobject obj; - transstr trans; - } *argv = 0; - char **cargv = 0; - - p = (char *) str; - nargs = 0; - while (*p) { - if (*p == '%') { - ++p; - if (*p == 'q' || *p == 'Q' || *p == 's') { - nargs++; - if (nargs > MAX_PARAMS) { - (*env)->ReleaseStringUTFChars(env, sql, str); - throwex(env, "too much SQL parameters"); - return; - } - } else if (*p != '%') { - (*env)->ReleaseStringUTFChars(env, sql, str); - throwex(env, "bad % specification in query"); - return; - } - } - ++p; - } - cargv = malloc((sizeof (*argv) + sizeof (char *)) * MAX_PARAMS); - if (!cargv) { - (*env)->ReleaseStringUTFChars(env, sql, str); - throwoom(env, "unable to allocate arg vector"); - return; - } - argv = (struct args *) (cargv + MAX_PARAMS); - for (i = 0; i < MAX_PARAMS; i++) { - cargv[i] = 0; - argv[i].arg = 0; - argv[i].obj = 0; - argv[i].trans.result = argv[i].trans.tofree = 0; - } - exc = 0; - for (i = 0; i < nargs; i++) { - jobject so = (*env)->GetObjectArrayElement(env, args, i); - - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - break; - } - if (so) { - argv[i].obj = so; - argv[i].arg = cargv[i] = - trans2iso(env, 1, 0, argv[i].obj, &argv[i].trans); - } - } - if (exc) { - for (i = 0; i < nargs; i++) { - if (argv[i].obj) { - transfree(&argv[i].trans); - } - } - freep((char **) &cargv); - (*env)->ReleaseStringUTFChars(env, sql, str); - return; - } - h->row1 = 1; - trans2iso(env, 1, 0, sql, &sqlstr); - exc = (*env)->ExceptionOccurred(env); - if (!exc) { -#if defined(_WIN32) || !defined(CANT_PASS_VALIST_AS_CHARPTR) - char *s = sqlite3_vmprintf(sqlstr.result, (char *) cargv); -#else - char *s = sqlite3_mprintf(sqlstr.result, - cargv[0], cargv[1], - cargv[2], cargv[3], - cargv[4], cargv[5], - cargv[6], cargv[7], - cargv[8], cargv[9], - cargv[10], cargv[11], - cargv[12], cargv[13], - cargv[14], cargv[15], - cargv[16], cargv[17], - cargv[18], cargv[19], - cargv[20], cargv[21], - cargv[22], cargv[23], - cargv[24], cargv[25], - cargv[26], cargv[27], - cargv[28], cargv[29], - cargv[30], cargv[31]); -#endif - if (!s) { - rc = SQLITE_NOMEM; - } else { -#if HAVE_SQLITE3_PREPARE_V2 - rc = sqlite3_prepare_v2((sqlite3 *) h->sqlite, s, -1, - (sqlite3_stmt **) &svm, &tail); -#else - rc = sqlite3_prepare((sqlite3 *) h->sqlite, s, -1, - (sqlite3_stmt **) &svm, &tail); -#endif - if (rc != SQLITE_OK) { - if (svm) { - sqlite3_finalize((sqlite3_stmt *) svm); - svm = 0; - } - } - } - if (rc != SQLITE_OK) { - sqlite3_free(s); - for (i = 0; i < nargs; i++) { - if (argv[i].obj) { - transfree(&argv[i].trans); - } - } - freep((char **) &cargv); - transfree(&sqlstr); - (*env)->ReleaseStringUTFChars(env, sql, str); - setvmerr(env, vm, rc); - throwex(env, "error in prepare"); - return; - } - v = malloc(sizeof (hvm) + strlen(tail) + 1); - if (!v) { - sqlite3_free(s); - for (i = 0; i < nargs; i++) { - if (argv[i].obj) { - transfree(&argv[i].trans); - } - } - freep((char **) &cargv); - transfree(&sqlstr); - (*env)->ReleaseStringUTFChars(env, sql, str); - sqlite3_finalize((sqlite3_stmt *) svm); - setvmerr(env, vm, SQLITE_NOMEM); - throwoom(env, "unable to get SQLite handle"); - return; - } - v->next = h->vms; - h->vms = v; - v->vm = svm; - v->h = h; - v->tail = (char *) (v + 1); -#if HAVE_BOTH_SQLITE - v->is3 = v->hh.is3 = h->is3; -#endif - strcpy(v->tail, tail); - sqlite3_free(s); - v->hh.sqlite = 0; - v->hh.haveutf = h->haveutf; - v->hh.ver = h->ver; - v->hh.bh = v->hh.cb = v->hh.ai = v->hh.tr = v->hh.ph = 0; - v->hh.row1 = 1; - v->hh.enc = h->enc; - v->hh.funcs = 0; - v->hh.vms = 0; - v->hh.env = 0; - vv.j = 0; - vv.l = (jobject) v; - (*env)->SetLongField(env, vm, F_SQLite_Vm_handle, vv.j); - } - for (i = 0; i < nargs; i++) { - if (argv[i].obj) { - transfree(&argv[i].trans); - } - } - freep((char **) &cargv); - transfree(&sqlstr); - (*env)->ReleaseStringUTFChars(env, sql, str); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - } - } -#endif -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_FunctionContext_internal_1init(JNIEnv *env, jclass cls) -{ - F_SQLite_FunctionContext_handle = - (*env)->GetFieldID(env, cls, "handle", "J"); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1progress_1handler(JNIEnv *env, jobject obj, jint n, - jobject ph) -{ - handle *h = gethandle(env, obj); - - if (h && h->sqlite) { - /* CHECK THIS */ -#if HAVE_SQLITE_PROGRESS_HANDLER - delglobrefp(env, &h->ph); -#if HAVE_BOTH_SQLITE - if (h->is3) { - if (ph) { - globrefset(env, ph, &h->ph); - sqlite3_progress_handler((sqlite3 *) h->sqlite, - n, progresshandler, h); - } else { - sqlite3_progress_handler((sqlite3 *) h->sqlite, - 0, 0, 0); - } - } else { - if (ph) { - globrefset(env, ph, &h->ph); - sqlite_progress_handler((sqlite *) h->sqlite, - n, progresshandler, h); - } else { - sqlite_progress_handler((sqlite *) h->sqlite, - 0, 0, 0); - } - } -#else -#if HAVE_SQLITE2 - if (ph) { - globrefset(env, ph, &h->ph); - sqlite_progress_handler((sqlite *) h->sqlite, - n, progresshandler, h); - } else { - sqlite_progress_handler((sqlite *) h->sqlite, - 0, 0, 0); - } -#endif -#if HAVE_SQLITE3 - if (ph) { - globrefset(env, ph, &h->ph); - sqlite3_progress_handler((sqlite3 *) h->sqlite, - n, progresshandler, h); - } else { - sqlite3_progress_handler((sqlite3 *) h->sqlite, - 0, 0, 0); - } -#endif -#endif - return; -#else - throwex(env, "unsupported"); - return; -#endif - } - throwclosed(env); -} - -JNIEXPORT jboolean JNICALL -Java_SQLite_Database_is3(JNIEnv *env, jobject obj) -{ -#if HAVE_BOTH_SQLITE - handle *h = gethandle(env, obj); - - if (h) { - return h->is3 ? JNI_TRUE : JNI_FALSE; - } - return JNI_FALSE; -#else -#if HAVE_SQLITE2 - return JNI_FALSE; -#endif -#if HAVE_SQLITE3 - return JNI_TRUE; -#endif -#endif -} - -JNIEXPORT jboolean JNICALL -Java_SQLite_Stmt_prepare(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 - hvm *v = gethstmt(env, obj); - void *svm = 0; - char *tail; - int ret; - - if (v && v->vm) { - sqlite3_finalize((sqlite3_stmt *) v->vm); - v->vm = 0; - } - if (v && v->h && v->h->sqlite) { - if (!v->tail) { - return JNI_FALSE; - } - v->h->env = env; -#if HAVE_SQLITE3_PREPARE16_V2 - ret = sqlite3_prepare16_v2((sqlite3 *) v->h->sqlite, - v->tail, -1, (sqlite3_stmt **) &svm, - (const void **) &tail); -#else - ret = sqlite3_prepare16((sqlite3 *) v->h->sqlite, - v->tail, -1, (sqlite3_stmt **) &svm, - (const void **) &tail); -#endif - if (ret != SQLITE_OK) { - if (svm) { - sqlite3_finalize((sqlite3_stmt *) svm); - svm = 0; - } - } - if (ret != SQLITE_OK) { - const char *err = sqlite3_errmsg(v->h->sqlite); - - setstmterr(env, obj, ret); - v->tail = 0; - throwex(env, err ? err : "error in compile/prepare"); - return JNI_FALSE; - } - if (!svm) { - v->tail = 0; - return JNI_FALSE; - } - v->vm = svm; - v->tail = (char *) tail; - v->hh.row1 = 1; - return JNI_TRUE; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return JNI_FALSE; -} - -JNIEXPORT void JNICALL -Java_SQLite_Database_stmt_1prepare(JNIEnv *env, jobject obj, jstring sql, - jobject stmt) -{ -#if HAVE_SQLITE3 - handle *h = gethandle(env, obj); - void *svm = 0; - hvm *v; - jvalue vv; - jsize len16; - const jchar *sql16, *tail = 0; - int ret; - - if (!h) { - throwclosed(env); - return; - } - if (!stmt) { - throwex(env, "null stmt"); - return; - } - if (!sql) { - throwex(env, "null sql"); - return; - } -#ifdef HAVE_BOTH_SQLITE - if (!h->is3) { - throwex(env, "only on SQLite3 database"); - return; - } -#endif - len16 = (*env)->GetStringLength(env, sql) * sizeof (jchar); - if (len16 < 1) { - return; - } - h->env = env; - sql16 = (*env)->GetStringChars(env, sql, 0); -#if HAVE_SQLITE3_PREPARE16_V2 - ret = sqlite3_prepare16_v2((sqlite3 *) h->sqlite, sql16, len16, - (sqlite3_stmt **) &svm, (const void **) &tail); -#else - ret = sqlite3_prepare16((sqlite3 *) h->sqlite, sql16, len16, - (sqlite3_stmt **) &svm, (const void **) &tail); -#endif - if (ret != SQLITE_OK) { - if (svm) { - sqlite3_finalize((sqlite3_stmt *) svm); - svm = 0; - } - } - if (ret != SQLITE_OK) { - const char *err = sqlite3_errmsg(h->sqlite); - - (*env)->ReleaseStringChars(env, sql, sql16); - setstmterr(env, stmt, ret); - throwex(env, err ? err : "error in prepare"); - return; - } - if (!svm) { - (*env)->ReleaseStringChars(env, sql, sql16); - return; - } - len16 = len16 + sizeof (jchar) - ((char *) tail - (char *) sql16); - if (len16 < sizeof (jchar)) { - len16 = sizeof (jchar); - } - v = malloc(sizeof (hvm) + len16); - if (!v) { - (*env)->ReleaseStringChars(env, sql, sql16); - sqlite3_finalize((sqlite3_stmt *) svm); - throwoom(env, "unable to get SQLite handle"); - return; - } - v->next = h->vms; - h->vms = v; - v->vm = svm; - v->h = h; - v->tail = (char *) (v + 1); -#if HAVE_BOTH_SQLITE - v->is3 = v->hh.is3 = 1; -#endif - memcpy(v->tail, tail, len16); - len16 /= sizeof (jchar); - ((jchar *) v->tail)[len16 - 1] = 0; - (*env)->ReleaseStringChars(env, sql, sql16); - v->hh.sqlite = 0; - v->hh.haveutf = h->haveutf; - v->hh.ver = h->ver; - v->hh.bh = v->hh.cb = v->hh.ai = v->hh.tr = v->hh.ph = 0; - v->hh.row1 = 1; - v->hh.enc = h->enc; - v->hh.funcs = 0; - v->hh.vms = 0; - v->hh.env = 0; - vv.j = 0; - vv.l = (jobject) v; - (*env)->SetLongField(env, stmt, F_SQLite_Stmt_handle, vv.j); -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT jboolean JNICALL -Java_SQLite_Stmt_step(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ret; - - ret = sqlite3_step((sqlite3_stmt *) v->vm); - if (ret == SQLITE_ROW) { - return JNI_TRUE; - } - if (ret != SQLITE_DONE) { - const char *err = sqlite3_errmsg(v->h->sqlite); - - setstmterr(env, obj, ret); - throwex(env, err ? err : "error in step"); - } - return JNI_FALSE; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return JNI_FALSE; -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_close(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ret; - - ret = sqlite3_finalize((sqlite3_stmt *) v->vm); - v->vm = 0; - if (ret != SQLITE_OK) { - const char *err = sqlite3_errmsg(v->h->sqlite); - - setstmterr(env, obj, ret); - throwex(env, err ? err : "error in close"); - } - return; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return; -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_reset(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - sqlite3_reset((sqlite3_stmt *) v->vm); - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_clear_1bindings(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_CLEAR_BINDINGS - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - sqlite3_clear_bindings((sqlite3_stmt *) v->vm); - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_bind__II(JNIEnv *env, jobject obj, jint pos, jint val) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int npar = sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - int ret; - - if (pos < 1 || pos > npar) { - throwex(env, "parameter position out of bounds"); - return; - } - ret = sqlite3_bind_int((sqlite3_stmt *) v->vm, pos, val); - if (ret != SQLITE_OK) { - setstmterr(env, obj, ret); - throwex(env, "bind failed"); - } - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_bind__IJ(JNIEnv *env, jobject obj, jint pos, jlong val) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int npar = sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - int ret; - - if (pos < 1 || pos > npar) { - throwex(env, "parameter position out of bounds"); - return; - } - ret = sqlite3_bind_int64((sqlite3_stmt *) v->vm, pos, val); - if (ret != SQLITE_OK) { - setstmterr(env, obj, ret); - throwex(env, "bind failed"); - } - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_bind__ID(JNIEnv *env, jobject obj, jint pos, jdouble val) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int npar = sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - int ret; - - if (pos < 1 || pos > npar) { - throwex(env, "parameter position out of bounds"); - return; - } - ret = sqlite3_bind_double((sqlite3_stmt *) v->vm, pos, val); - if (ret != SQLITE_OK) { - setstmterr(env, obj, ret); - throwex(env, "bind failed"); - } - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_bind__I_3B(JNIEnv *env, jobject obj, jint pos, jbyteArray val) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int npar = sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - int ret; - jint len; - char *data = 0; - - if (pos < 1 || pos > npar) { - throwex(env, "parameter position out of bounds"); - return; - } - if (val) { - len = (*env)->GetArrayLength(env, val); - if (len > 0) { - data = sqlite3_malloc(len); - if (!data) { - throwoom(env, "unable to get blob parameter"); - return; - } - (*env)->GetByteArrayRegion(env, val, 0, len, (jbyte *) data); - ret = sqlite3_bind_blob((sqlite3_stmt *) v->vm, - pos, data, len, sqlite3_free); - } else { - ret = sqlite3_bind_blob((sqlite3_stmt *) v->vm, - pos, "", 0, SQLITE_STATIC); - } - } else { - ret = sqlite3_bind_null((sqlite3_stmt *) v->vm, pos); - } - if (ret != SQLITE_OK) { - if (data) { - sqlite3_free(data); - } - setstmterr(env, obj, ret); - throwex(env, "bind failed"); - } - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_bind__ILjava_lang_String_2(JNIEnv *env, jobject obj, - jint pos, jstring val) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int npar = sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - int ret; - jsize len; - char *data = 0; - - if (pos < 1 || pos > npar) { - throwex(env, "parameter position out of bounds"); - return; - } - if (val) { - len = (*env)->GetStringLength(env, val); - if (len > 0) { - const jchar *ch; - - len *= sizeof (jchar); - data = sqlite3_malloc(len); - if (!data) { - throwoom(env, "unable to get blob parameter"); - return; - } - ch = (*env)->GetStringChars(env, val, 0); - memcpy(data, ch, len); - (*env)->ReleaseStringChars(env, val, ch); - ret = sqlite3_bind_text16((sqlite3_stmt *) v->vm, - pos, data, len, sqlite3_free); - } else { - ret = sqlite3_bind_text16((sqlite3_stmt *) v->vm, pos, "", 0, - SQLITE_STATIC); - } - } else { - ret = sqlite3_bind_null((sqlite3_stmt *) v->vm, pos); - } - if (ret != SQLITE_OK) { - if (data) { - sqlite3_free(data); - } - setstmterr(env, obj, ret); - throwex(env, "bind failed"); - } - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_bind__I(JNIEnv *env, jobject obj, jint pos) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int npar = sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - int ret; - - if (pos < 1 || pos > npar) { - throwex(env, "parameter position out of bounds"); - return; - } - ret = sqlite3_bind_null((sqlite3_stmt *) v->vm, pos); - if (ret != SQLITE_OK) { - setstmterr(env, obj, ret); - throwex(env, "bind failed"); - } - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_bind_1zeroblob(JNIEnv *env, jobject obj, jint pos, jint len) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_BIND_ZEROBLOB - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int npar = sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - int ret; - - if (pos < 1 || pos > npar) { - throwex(env, "parameter position out of bounds"); - return; - } - ret = sqlite3_bind_zeroblob((sqlite3_stmt *) v->vm, pos, len); - if (ret != SQLITE_OK) { - setstmterr(env, obj, ret); - throwex(env, "bind failed"); - } - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT jint JNICALL -Java_SQLite_Stmt_bind_1parameter_1count(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - return sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Stmt_bind_1parameter_1name(JNIEnv *env, jobject obj, jint pos) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_BIND_PARAMETER_NAME - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int npar = sqlite3_bind_parameter_count((sqlite3_stmt *) v->vm); - const char *name; - - if (pos < 1 || pos > npar) { - throwex(env, "parameter position out of bounds"); - return 0; - } - name = sqlite3_bind_parameter_name((sqlite3_stmt *) v->vm, pos); - if (name) { - return (*env)->NewStringUTF(env, name); - } - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jint JNICALL -Java_SQLite_Stmt_bind_1parameter_1index(JNIEnv *env, jobject obj, - jstring name) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_BIND_PARAMETER_INDEX - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int pos; - const char *n; - transstr namestr; - jthrowable exc; - - n = trans2iso(env, 1, 0, name, &namestr); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return -1; - } - pos = sqlite3_bind_parameter_index((sqlite3_stmt *) v->vm, n); - transfree(&namestr); - return pos; - } else { - throwex(env, "stmt already closed"); - } -#else - throwex(env, "unsupported"); -#endif - return -1; -} - -JNIEXPORT jint JNICALL -Java_SQLite_Stmt_column_1int(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_data_count((sqlite3_stmt *) v->vm); - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - return sqlite3_column_int((sqlite3_stmt *) v->vm, col); - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jlong JNICALL -Java_SQLite_Stmt_column_1long(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_data_count((sqlite3_stmt *) v->vm); - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - return sqlite3_column_int64((sqlite3_stmt *) v->vm, col); - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jdouble JNICALL -Java_SQLite_Stmt_column_1double(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_data_count((sqlite3_stmt *) v->vm); - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - return sqlite3_column_double((sqlite3_stmt *) v->vm, col); - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jbyteArray JNICALL -Java_SQLite_Stmt_column_1bytes(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_data_count((sqlite3_stmt *) v->vm); - int nbytes; - const jbyte *data; - jbyteArray b = 0; - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - data = sqlite3_column_blob((sqlite3_stmt *) v->vm, col); - if (data) { - nbytes = sqlite3_column_bytes((sqlite3_stmt *) v->vm, col); - } else { - return 0; - } - b = (*env)->NewByteArray(env, nbytes); - if (!b) { - throwoom(env, "unable to get blob column data"); - return 0; - } - (*env)->SetByteArrayRegion(env, b, 0, nbytes, data); - return b; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Stmt_column_1string(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_data_count((sqlite3_stmt *) v->vm); - int nbytes; - const jchar *data; - jstring b = 0; - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - data = sqlite3_column_text16((sqlite3_stmt *) v->vm, col); - if (data) { - nbytes = sqlite3_column_bytes16((sqlite3_stmt *) v->vm, col); - } else { - return 0; - } - nbytes /= sizeof (jchar); - b = (*env)->NewString(env, data, nbytes); - if (!b) { - throwoom(env, "unable to get string column data"); - return 0; - } - return b; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jint JNICALL -Java_SQLite_Stmt_column_1type(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_data_count((sqlite3_stmt *) v->vm); - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - return sqlite3_column_type((sqlite3_stmt *) v->vm, col); - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jint JNICALL -Java_SQLite_Stmt_column_1count(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - return sqlite3_column_count((sqlite3_stmt *) v->vm); - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Stmt_column_1table_1name(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_COLUMN_TABLE_NAME16 - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_column_count((sqlite3_stmt *) v->vm); - const jchar *str; - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - str = sqlite3_column_table_name16((sqlite3_stmt *) v->vm, col); - if (str) { - return (*env)->NewString(env, str, jstrlen(str)); - } - return 0; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Stmt_column_1database_1name(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_COLUMN_DATABASE_NAME16 - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_column_count((sqlite3_stmt *) v->vm); - const jchar *str; - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - str = sqlite3_column_database_name16((sqlite3_stmt *) v->vm, col); - if (str) { - return (*env)->NewString(env, str, jstrlen(str)); - } - return 0; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Stmt_column_1decltype(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_column_count((sqlite3_stmt *) v->vm); - const jchar *str; - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - str = sqlite3_column_decltype16((sqlite3_stmt *) v->vm, col); - if (str) { - return (*env)->NewString(env, str, jstrlen(str)); - } - return 0; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jstring JNICALL -Java_SQLite_Stmt_column_1origin_1name(JNIEnv *env, jobject obj, jint col) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_COLUMN_ORIGIN_NAME16 - hvm *v = gethstmt(env, obj); - - if (v && v->vm && v->h) { - int ncol = sqlite3_column_count((sqlite3_stmt *) v->vm); - const jchar *str; - - if (col < 0 || col >= ncol) { - throwex(env, "column out of bounds"); - return 0; - } - str = sqlite3_column_origin_name16((sqlite3_stmt *) v->vm, col); - if (str) { - return (*env)->NewString(env, str, jstrlen(str)); - } - return 0; - } - throwex(env, "stmt already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_finalize(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE_COMPILE - dostmtfinal(env, obj); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Database__1open_1blob(JNIEnv *env, jobject obj, - jstring dbname, jstring table, - jstring column, jlong row, - jboolean rw, jobject blobj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - handle *h = gethandle(env, obj); - hbl *bl; - jthrowable exc; - transstr dbn, tbl, col; - sqlite3_blob *blob; - jvalue vv; - int ret; - - if (!blobj) { - throwex(env, "null blob"); - return; - } - if (h && h->sqlite) { - trans2iso(env, h->haveutf, h->enc, dbname, &dbn); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - (*env)->DeleteLocalRef(env, exc); - return; - } - trans2iso(env, h->haveutf, h->enc, table, &tbl); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - transfree(&dbn); - (*env)->DeleteLocalRef(env, exc); - return; - } - trans2iso(env, h->haveutf, h->enc, column, &col); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - transfree(&tbl); - transfree(&dbn); - (*env)->DeleteLocalRef(env, exc); - return; - } - ret = sqlite3_blob_open(h->sqlite, - dbn.result, tbl.result, col.result, - row, rw, &blob); - transfree(&col); - transfree(&tbl); - transfree(&dbn); - if (ret != SQLITE_OK) { - const char *err = sqlite3_errmsg(h->sqlite); - - seterr(env, obj, ret); - throwex(env, err ? err : "error in blob open"); - return; - } - bl = malloc(sizeof (hbl)); - if (!bl) { - sqlite3_blob_close(blob); - throwoom(env, "unable to get SQLite blob handle"); - return; - } - bl->next = h->blobs; - h->blobs = bl; - bl->blob = blob; - bl->h = h; - vv.j = 0; - vv.l = (jobject) bl; - (*env)->SetLongField(env, blobj, F_SQLite_Blob_handle, vv.j); - (*env)->SetIntField(env, blobj, F_SQLite_Blob_size, - sqlite3_blob_bytes(blob)); - return; - } - throwex(env, "not an open database"); -#else - throwex(env, "unsupported"); -#endif -} - -JNIEXPORT jint JNICALL -Java_SQLite_Blob_write(JNIEnv *env , jobject obj, jbyteArray b, jint off, - jint pos, jint len) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - hbl *bl = gethbl(env, obj); - - if (bl && bl->h && bl->blob) { - jbyte *buf; - jthrowable exc; - int ret; - - if (len <= 0) { - return 0; - } - buf = malloc(len); - if (!buf) { - throwoom(env, "out of buffer space for blob"); - return 0; - } - (*env)->GetByteArrayRegion(env, b, off, len, buf); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - free(buf); - return 0; - } - ret = sqlite3_blob_write(bl->blob, buf, len, pos); - free(buf); - if (ret != SQLITE_OK) { - throwioex(env, "blob write error"); - return 0; - } - return len; - } - throwex(env, "blob already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT jint JNICALL -Java_SQLite_Blob_read(JNIEnv *env , jobject obj, jbyteArray b, jint off, - jint pos, jint len) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - hbl *bl = gethbl(env, obj); - - if (bl && bl->h && bl->blob) { - jbyte *buf; - jthrowable exc; - int ret; - - if (len <= 0) { - return 0; - } - buf = malloc(len); - if (!buf) { - throwoom(env, "out of buffer space for blob"); - return 0; - } - ret = sqlite3_blob_read(bl->blob, buf, len, pos); - if (ret != SQLITE_OK) { - free(buf); - throwioex(env, "blob read error"); - return 0; - } - (*env)->SetByteArrayRegion(env, b, off, len, buf); - free(buf); - exc = (*env)->ExceptionOccurred(env); - if (exc) { - return 0; - } - return len; - } - throwex(env, "blob already closed"); -#else - throwex(env, "unsupported"); -#endif - return 0; -} - -JNIEXPORT void JNICALL -Java_SQLite_Blob_close(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - doblobfinal(env, obj); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Blob_finalize(JNIEnv *env, jobject obj) -{ -#if HAVE_SQLITE3 && HAVE_SQLITE3_INCRBLOBIO - doblobfinal(env, obj); -#endif -} - -JNIEXPORT void JNICALL -Java_SQLite_Stmt_internal_1init(JNIEnv *env, jclass cls) -{ - F_SQLite_Stmt_handle = - (*env)->GetFieldID(env, cls, "handle", "J"); - F_SQLite_Stmt_error_code = - (*env)->GetFieldID(env, cls, "error_code", "I"); -} - -JNIEXPORT void JNICALL -Java_SQLite_Vm_internal_1init(JNIEnv *env, jclass cls) -{ - F_SQLite_Vm_handle = - (*env)->GetFieldID(env, cls, "handle", "J"); - F_SQLite_Vm_error_code = - (*env)->GetFieldID(env, cls, "error_code", "I"); -} - -JNIEXPORT void JNICALL -Java_SQLite_Blob_internal_1init(JNIEnv *env, jclass cls) -{ - F_SQLite_Blob_handle = - (*env)->GetFieldID(env, cls, "handle", "J"); - F_SQLite_Blob_size = - (*env)->GetFieldID(env, cls, "size", "I"); -} - -JNIEXPORT void JNICALL -Java_SQLite_Database_internal_1init(JNIEnv *env, jclass cls) -{ -//#ifndef JNI_VERSION_1_2 - jclass jls = (*env)->FindClass(env, "java/lang/String"); - - C_java_lang_String = (*env)->NewGlobalRef(env, jls); -//#endif - F_SQLite_Database_handle = - (*env)->GetFieldID(env, cls, "handle", "J"); - F_SQLite_Database_error_code = - (*env)->GetFieldID(env, cls, "error_code", "I"); - M_java_lang_String_getBytes = - (*env)->GetMethodID(env, C_java_lang_String, "getBytes", "()[B"); - M_java_lang_String_getBytes2 = - (*env)->GetMethodID(env, C_java_lang_String, "getBytes", - "(Ljava/lang/String;)[B"); - M_java_lang_String_initBytes = - (*env)->GetMethodID(env, C_java_lang_String, "<init>", "([B)V"); - M_java_lang_String_initBytes2 = - (*env)->GetMethodID(env, C_java_lang_String, "<init>", - "([BLjava/lang/String;)V"); -} - -#ifdef JNI_VERSION_1_2 -JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) -{ - JNIEnv *env; - jclass cls; - -#ifndef _WIN32 -#if HAVE_SQLITE2 - if (strcmp(sqlite_libencoding(), "UTF-8") != 0) { - fprintf(stderr, "WARNING: using non-UTF SQLite2 engine\n"); - } -#endif -#endif - if ((*vm)->GetEnv(vm, (void **) &env, JNI_VERSION_1_2)) { - return JNI_ERR; - } - cls = (*env)->FindClass(env, "java/lang/String"); - if (!cls) { - return JNI_ERR; - } - C_java_lang_String = (*env)->NewWeakGlobalRef(env, cls); - return JNI_VERSION_1_2; -} - -JNIEXPORT void JNICALL -JNI_OnUnload(JavaVM *vm, void *reserved) -{ - JNIEnv *env; - - if ((*vm)->GetEnv(vm, (void **) &env, JNI_VERSION_1_2)) { - return; - } - if (C_java_lang_String) { - (*env)->DeleteWeakGlobalRef(env, C_java_lang_String); - C_java_lang_String = 0; - } -} -#endif diff --git a/sql/src/main/native/sqlite_jni.h b/sql/src/main/native/sqlite_jni.h deleted file mode 100644 index cdb7692..0000000 --- a/sql/src/main/native/sqlite_jni.h +++ /dev/null @@ -1,657 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include <jni.h> -/* Header for class SQLite_Database */ - -#ifndef _Included_SQLite_Database -#define _Included_SQLite_Database -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: SQLite_Database - * Method: _open - * Signature: (Ljava/lang/String;I)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1open - (JNIEnv *, jobject, jstring, jint); - -/* - * Class: SQLite_Database - * Method: _open_aux_file - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1open_1aux_1file - (JNIEnv *, jobject, jstring); - -/* - * Class: SQLite_Database - * Method: _finalize - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1finalize - (JNIEnv *, jobject); - -/* - * Class: SQLite_Database - * Method: _close - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1close - (JNIEnv *, jobject); - -/* - * Class: SQLite_Database - * Method: _exec - * Signature: (Ljava/lang/String;LSQLite/Callback;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1exec__Ljava_lang_String_2LSQLite_Callback_2 - (JNIEnv *, jobject, jstring, jobject); - -/* - * Class: SQLite_Database - * Method: _exec - * Signature: (Ljava/lang/String;LSQLite/Callback;[Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1exec__Ljava_lang_String_2LSQLite_Callback_2_3Ljava_lang_String_2 - (JNIEnv *, jobject, jstring, jobject, jobjectArray); - -/* - * Class: SQLite_Database - * Method: _last_insert_rowid - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_SQLite_Database__1last_1insert_1rowid - (JNIEnv *, jobject); - -/* - * Class: SQLite_Database - * Method: _interrupt - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1interrupt - (JNIEnv *, jobject); - -/* - * Class: SQLite_Database - * Method: _changes - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_SQLite_Database__1changes - (JNIEnv *, jobject); - -/* - * Class: SQLite_Database - * Method: _busy_handler - * Signature: (LSQLite/BusyHandler;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1busy_1handler - (JNIEnv *, jobject, jobject); - -/* - * Class: SQLite_Database - * Method: _busy_timeout - * Signature: (I)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1busy_1timeout - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Database - * Method: _complete - * Signature: (Ljava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_SQLite_Database__1complete - (JNIEnv *, jclass, jstring); - -/* - * Class: SQLite_Database - * Method: version - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Database_version - (JNIEnv *, jclass); - -/* - * Class: SQLite_Database - * Method: dbversion - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Database_dbversion - (JNIEnv *, jobject); - -/* - * Class: SQLite_Database - * Method: _create_function - * Signature: (Ljava/lang/String;ILSQLite/Function;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1create_1function - (JNIEnv *, jobject, jstring, jint, jobject); - -/* - * Class: SQLite_Database - * Method: _create_aggregate - * Signature: (Ljava/lang/String;ILSQLite/Function;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1create_1aggregate - (JNIEnv *, jobject, jstring, jint, jobject); - -/* - * Class: SQLite_Database - * Method: _function_type - * Signature: (Ljava/lang/String;I)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1function_1type - (JNIEnv *, jobject, jstring, jint); - -/* - * Class: SQLite_Database - * Method: _errmsg - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Database__1errmsg - (JNIEnv *, jobject); - -/* - * Class: SQLite_Database - * Method: error_string - * Signature: (I)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Database_error_1string - (JNIEnv *, jclass, jint); - -/* - * Class: SQLite_Database - * Method: _set_encoding - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1set_1encoding - (JNIEnv *, jobject, jstring); - -/* - * Class: SQLite_Database - * Method: _set_authorizer - * Signature: (LSQLite/Authorizer;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1set_1authorizer - (JNIEnv *, jobject, jobject); - -/* - * Class: SQLite_Database - * Method: _trace - * Signature: (LSQLite/Trace;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1trace - (JNIEnv *, jobject, jobject); - -/* - * Class: SQLite_Database - * Method: is3 - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_SQLite_Database_is3 - (JNIEnv *, jobject); - -/* - * Class: SQLite_Database - * Method: vm_compile - * Signature: (Ljava/lang/String;LSQLite/Vm;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database_vm_1compile - (JNIEnv *, jobject, jstring, jobject); - -/* - * Class: SQLite_Database - * Method: vm_compile_args - * Signature: (Ljava/lang/String;LSQLite/Vm;[Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database_vm_1compile_1args - (JNIEnv *, jobject, jstring, jobject, jobjectArray); - -/* - * Class: SQLite_Database - * Method: stmt_prepare - * Signature: (Ljava/lang/String;LSQLite/Stmt;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database_stmt_1prepare - (JNIEnv *, jobject, jstring, jobject); - -/* - * Class: SQLite_Database - * Method: _open_blob - * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZLSQLite/Blob;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1open_1blob - (JNIEnv *, jobject, jstring, jstring, jstring, jlong, jboolean, jobject); - -/* - * Class: SQLite_Database - * Method: _progress_handler - * Signature: (ILSQLite/ProgressHandler;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Database__1progress_1handler - (JNIEnv *, jobject, jint, jobject); - -/* - * Class: SQLite_Database - * Method: internal_init - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Database_internal_1init - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif -/* Header for class SQLite_Vm */ - -#ifndef _Included_SQLite_Vm -#define _Included_SQLite_Vm -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: SQLite_Vm - * Method: step - * Signature: (LSQLite/Callback;)Z - */ -JNIEXPORT jboolean JNICALL Java_SQLite_Vm_step - (JNIEnv *, jobject, jobject); - -/* - * Class: SQLite_Vm - * Method: compile - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_SQLite_Vm_compile - (JNIEnv *, jobject); - -/* - * Class: SQLite_Vm - * Method: stop - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Vm_stop - (JNIEnv *, jobject); - -/* - * Class: SQLite_Vm - * Method: finalize - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Vm_finalize - (JNIEnv *, jobject); - -/* - * Class: SQLite_Vm - * Method: internal_init - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Vm_internal_1init - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif -/* Header for class SQLite_FunctionContext */ - -#ifndef _Included_SQLite_FunctionContext -#define _Included_SQLite_FunctionContext -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: SQLite_FunctionContext - * Method: set_result - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result__Ljava_lang_String_2 - (JNIEnv *, jobject, jstring); - -/* - * Class: SQLite_FunctionContext - * Method: set_result - * Signature: (I)V - */ -JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result__I - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_FunctionContext - * Method: set_result - * Signature: (D)V - */ -JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result__D - (JNIEnv *, jobject, jdouble); - -/* - * Class: SQLite_FunctionContext - * Method: set_error - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1error - (JNIEnv *, jobject, jstring); - -/* - * Class: SQLite_FunctionContext - * Method: set_result - * Signature: ([B)V - */ -JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result___3B - (JNIEnv *, jobject, jbyteArray); - -/* - * Class: SQLite_FunctionContext - * Method: set_result_zeroblob - * Signature: (I)V - */ -JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result_1zeroblob - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_FunctionContext - * Method: count - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_SQLite_FunctionContext_count - (JNIEnv *, jobject); - -/* - * Class: SQLite_FunctionContext - * Method: internal_init - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_FunctionContext_internal_1init - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif -/* Header for class SQLite_Stmt */ - -#ifndef _Included_SQLite_Stmt -#define _Included_SQLite_Stmt -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: SQLite_Stmt - * Method: prepare - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_SQLite_Stmt_prepare - (JNIEnv *, jobject); - -/* - * Class: SQLite_Stmt - * Method: step - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_SQLite_Stmt_step - (JNIEnv *, jobject); - -/* - * Class: SQLite_Stmt - * Method: close - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_close - (JNIEnv *, jobject); - -/* - * Class: SQLite_Stmt - * Method: reset - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_reset - (JNIEnv *, jobject); - -/* - * Class: SQLite_Stmt - * Method: clear_bindings - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_clear_1bindings - (JNIEnv *, jobject); - -/* - * Class: SQLite_Stmt - * Method: bind - * Signature: (II)V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__II - (JNIEnv *, jobject, jint, jint); - -/* - * Class: SQLite_Stmt - * Method: bind - * Signature: (IJ)V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__IJ - (JNIEnv *, jobject, jint, jlong); - -/* - * Class: SQLite_Stmt - * Method: bind - * Signature: (ID)V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__ID - (JNIEnv *, jobject, jint, jdouble); - -/* - * Class: SQLite_Stmt - * Method: bind - * Signature: (I[B)V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__I_3B - (JNIEnv *, jobject, jint, jbyteArray); - -/* - * Class: SQLite_Stmt - * Method: bind - * Signature: (ILjava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__ILjava_lang_String_2 - (JNIEnv *, jobject, jint, jstring); - -/* - * Class: SQLite_Stmt - * Method: bind - * Signature: (I)V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__I - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: bind_zeroblob - * Signature: (II)V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_bind_1zeroblob - (JNIEnv *, jobject, jint, jint); - -/* - * Class: SQLite_Stmt - * Method: bind_parameter_count - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_SQLite_Stmt_bind_1parameter_1count - (JNIEnv *, jobject); - -/* - * Class: SQLite_Stmt - * Method: bind_parameter_name - * Signature: (I)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Stmt_bind_1parameter_1name - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: bind_parameter_index - * Signature: (Ljava/lang/String;)I - */ -JNIEXPORT jint JNICALL Java_SQLite_Stmt_bind_1parameter_1index - (JNIEnv *, jobject, jstring); - -/* - * Class: SQLite_Stmt - * Method: column_int - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_SQLite_Stmt_column_1int - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_long - * Signature: (I)J - */ -JNIEXPORT jlong JNICALL Java_SQLite_Stmt_column_1long - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_double - * Signature: (I)D - */ -JNIEXPORT jdouble JNICALL Java_SQLite_Stmt_column_1double - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_bytes - * Signature: (I)[B - */ -JNIEXPORT jbyteArray JNICALL Java_SQLite_Stmt_column_1bytes - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_string - * Signature: (I)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1string - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_type - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_SQLite_Stmt_column_1type - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_count - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_SQLite_Stmt_column_1count - (JNIEnv *, jobject); - -/* - * Class: SQLite_Stmt - * Method: column_table_name - * Signature: (I)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1table_1name - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_database_name - * Signature: (I)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1database_1name - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_decltype - * Signature: (I)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1decltype - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: column_origin_name - * Signature: (I)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1origin_1name - (JNIEnv *, jobject, jint); - -/* - * Class: SQLite_Stmt - * Method: finalize - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_finalize - (JNIEnv *, jobject); - -/* - * Class: SQLite_Stmt - * Method: internal_init - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Stmt_internal_1init - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif -/* Header for class SQLite_Blob */ - -#ifndef _Included_SQLite_Blob -#define _Included_SQLite_Blob -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: SQLite_Blob - * Method: close - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Blob_close - (JNIEnv *, jobject); - -/* - * Class: SQLite_Blob - * Method: write - * Signature: ([BIII)I - */ -JNIEXPORT jint JNICALL Java_SQLite_Blob_write - (JNIEnv *, jobject, jbyteArray, jint, jint, jint); - -/* - * Class: SQLite_Blob - * Method: read - * Signature: ([BIII)I - */ -JNIEXPORT jint JNICALL Java_SQLite_Blob_read - (JNIEnv *, jobject, jbyteArray, jint, jint, jint); - -/* - * Class: SQLite_Blob - * Method: finalize - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Blob_finalize - (JNIEnv *, jobject); - -/* - * Class: SQLite_Blob - * Method: internal_init - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_SQLite_Blob_internal_1init - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/sql/src/main/native/sqlite_jni_defs.h b/sql/src/main/native/sqlite_jni_defs.h deleted file mode 100644 index 91b2378..0000000 --- a/sql/src/main/native/sqlite_jni_defs.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2007, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define HAVE_SQLITE2 0 -#define HAVE_SQLITE3 1 -#define HAVE_SQLITE_FUNCTION_TYPE 0 -#define HAVE_SQLITE_OPEN_AUX_FILE 0 -#define HAVE_SQLITE_SET_AUTHORIZER 0 -#define HAVE_SQLITE_TRACE 0 -#define HAVE_SQLITE_COMPILE 0 -#define HAVE_SQLITE_PROGRESS_HANDLER 0 -#define HAVE_SQLITE3_MALLOC 1 -#define HAVE_SQLITE3_PREPARE_V2 0 -#define HAVE_SQLITE3_PREPARE16_V2 0 -#define HAVE_SQLITE3_BIND_ZEROBLOB 0 -#define HAVE_SQLITE3_CLEAR_BINDINGS 0 -#define HAVE_SQLITE3_COLUMN_TABLE_NAME16 0 -#define HAVE_SQLITE3_COLUMN_DATABASE_NAME16 0 -#define HAVE_SQLITE3_COLUMN_ORIGIN_NAME16 0 -#define HAVE_SQLITE3_BIND_PARAMETER_COUNT 1 -#define HAVE_SQLITE3_BIND_PARAMETER_NAME 1 -#define HAVE_SQLITE3_BIND_PARAMETER_INDEX 1 -#define HAVE_SQLITE3_RESULT_ZEROBLOB 0 -#define HAVE_SQLITE3_INCRBLOBIO 0 - - diff --git a/sql/src/main/native/sqlite_jni_registration.c b/sql/src/main/native/sqlite_jni_registration.c deleted file mode 100644 index 1ef5192..0000000 --- a/sql/src/main/native/sqlite_jni_registration.c +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright 2007, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "JNIHelp.h" -#include "sqlite_jni.h" - -/* Methods for class SQLite_Database */ -extern JNIEXPORT void JNICALL Java_SQLite_Database__1open - (JNIEnv *, jobject, jstring, jint); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1open_1aux_1file - (JNIEnv *, jobject, jstring); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1finalize - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1close - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1exec__Ljava_lang_String_2LSQLite_Callback_2 - (JNIEnv *, jobject, jstring, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1exec__Ljava_lang_String_2LSQLite_Callback_2_3Ljava_lang_String_2 - (JNIEnv *, jobject, jstring, jobject, jobjectArray); -extern JNIEXPORT jlong JNICALL Java_SQLite_Database__1last_1insert_1rowid - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1interrupt - (JNIEnv *, jobject); -extern JNIEXPORT jlong JNICALL Java_SQLite_Database__1changes - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1busy_1handler - (JNIEnv *, jobject, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1busy_1timeout - (JNIEnv *, jobject, jint); -extern JNIEXPORT jboolean JNICALL Java_SQLite_Database__1complete - (JNIEnv *, jclass, jstring); -extern JNIEXPORT jstring JNICALL Java_SQLite_Database_version - (JNIEnv *, jclass); -extern JNIEXPORT jstring JNICALL Java_SQLite_Database_dbversion - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1create_1function - (JNIEnv *, jobject, jstring, jint, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1create_1aggregate - (JNIEnv *, jobject, jstring, jint, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1function_1type - (JNIEnv *, jobject, jstring, jint); -extern JNIEXPORT jstring JNICALL Java_SQLite_Database__1errmsg - (JNIEnv *, jobject); -extern JNIEXPORT jstring JNICALL Java_SQLite_Database_error_1string - (JNIEnv *, jclass, jint); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1set_1encoding - (JNIEnv *, jobject, jstring); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1set_1authorizer - (JNIEnv *, jobject, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1trace - (JNIEnv *, jobject, jobject); -extern JNIEXPORT jboolean JNICALL Java_SQLite_Database_is3 - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database_vm_1compile - (JNIEnv *, jobject, jstring, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database_vm_1compile_1args - (JNIEnv *, jobject, jstring, jobject, jobjectArray); -extern JNIEXPORT void JNICALL Java_SQLite_Database_stmt_1prepare - (JNIEnv *, jobject, jstring, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1open_1blob - (JNIEnv *, jobject, jstring, jstring, jstring, jlong, jboolean, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database__1progress_1handler - (JNIEnv *, jobject, jint, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Database_internal_1init - (JNIEnv *, jclass); - - -/* Methods for class SQLite_Vm */ - -extern JNIEXPORT jboolean JNICALL Java_SQLite_Vm_step - (JNIEnv *, jobject, jobject); -extern JNIEXPORT jboolean JNICALL Java_SQLite_Vm_compile - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Vm_stop - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Vm_finalize - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Vm_internal_1init - (JNIEnv *, jclass); - -/* Methods for class SQLite_FunctionContext */ - -extern JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result__Ljava_lang_String_2 - (JNIEnv *, jobject, jstring); -extern JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result__I - (JNIEnv *, jobject, jint); -extern JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result__D - (JNIEnv *, jobject, jdouble); -extern JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1error - (JNIEnv *, jobject, jstring); -extern JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result___3B - (JNIEnv *, jobject, jbyteArray); -extern JNIEXPORT void JNICALL Java_SQLite_FunctionContext_set_1result_1zeroblob - (JNIEnv *, jobject, jint); -extern JNIEXPORT jint JNICALL Java_SQLite_FunctionContext_count - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_FunctionContext_internal_1init - (JNIEnv *, jclass); - -/* Methods for class SQLite_Stmt */ - -extern JNIEXPORT jboolean JNICALL Java_SQLite_Stmt_prepare - (JNIEnv *, jobject); -extern JNIEXPORT jboolean JNICALL Java_SQLite_Stmt_step - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_close - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_reset - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_clear_1bindings - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__II - (JNIEnv *, jobject, jint, jint); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__IJ - (JNIEnv *, jobject, jint, jlong); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__ID - (JNIEnv *, jobject, jint, jdouble); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__I_3B - (JNIEnv *, jobject, jint, jbyteArray); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__ILjava_lang_String_2 - (JNIEnv *, jobject, jint, jstring); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_bind__I - (JNIEnv *, jobject, jint); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_bind_1zeroblob - (JNIEnv *, jobject, jint, jint); -extern JNIEXPORT jint JNICALL Java_SQLite_Stmt_bind_1parameter_1count - (JNIEnv *, jobject); -extern JNIEXPORT jstring JNICALL Java_SQLite_Stmt_bind_1parameter_1name - (JNIEnv *, jobject, jint); -extern JNIEXPORT jint JNICALL Java_SQLite_Stmt_bind_1parameter_1index - (JNIEnv *, jobject, jstring); -extern JNIEXPORT jint JNICALL Java_SQLite_Stmt_column_1int - (JNIEnv *, jobject, jint); -extern JNIEXPORT jlong JNICALL Java_SQLite_Stmt_column_1long - (JNIEnv *, jobject, jint); -extern JNIEXPORT jdouble JNICALL Java_SQLite_Stmt_column_1double - (JNIEnv *, jobject, jint); -extern JNIEXPORT jbyteArray JNICALL Java_SQLite_Stmt_column_1bytes - (JNIEnv *, jobject, jint); -extern JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1string - (JNIEnv *, jobject, jint); -extern JNIEXPORT jint JNICALL Java_SQLite_Stmt_column_1type - (JNIEnv *, jobject, jint); -extern JNIEXPORT jint JNICALL Java_SQLite_Stmt_column_1count - (JNIEnv *, jobject); -extern JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1table_1name - (JNIEnv *, jobject, jint); -extern JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1database_1name - (JNIEnv *, jobject, jint); -extern JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1decltype - (JNIEnv *, jobject, jint); -extern JNIEXPORT jstring JNICALL Java_SQLite_Stmt_column_1origin_1name - (JNIEnv *, jobject, jint); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_finalize - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Stmt_internal_1init - (JNIEnv *, jclass); - -/* Methods for class SQLite_Blob */ - -extern JNIEXPORT void JNICALL Java_SQLite_Blob_close - (JNIEnv *, jobject); -extern JNIEXPORT jint JNICALL Java_SQLite_Blob_write - (JNIEnv *, jobject, jbyteArray, jint, jint, jint); -extern JNIEXPORT jint JNICALL Java_SQLite_Blob_read - (JNIEnv *, jobject, jbyteArray, jint, jint, jint); -extern JNIEXPORT void JNICALL Java_SQLite_Blob_finalize - (JNIEnv *, jobject); -extern JNIEXPORT void JNICALL Java_SQLite_Blob_internal_1init - (JNIEnv *, jclass); - -/* - * JNI registration - */ -static JNINativeMethod sqliteDatabaseMethods[] = { - /* name, signature, funcPtr */ -/* Header for class SQLite_Database */ -{ "_open", "(Ljava/lang/String;I)V", Java_SQLite_Database__1open}, -{ "_open_aux_file", "(Ljava/lang/String;)V", Java_SQLite_Database__1open_1aux_1file}, -{ "_finalize", "()V", Java_SQLite_Database__1finalize}, -{ "_close", "()V", Java_SQLite_Database__1close}, -{ "_exec", "(Ljava/lang/String;LSQLite/Callback;)V", Java_SQLite_Database__1exec__Ljava_lang_String_2LSQLite_Callback_2}, -{ "_exec", "(Ljava/lang/String;LSQLite/Callback;[Ljava/lang/String;)V", Java_SQLite_Database__1exec__Ljava_lang_String_2LSQLite_Callback_2_3Ljava_lang_String_2}, -{ "_last_insert_rowid", "()J", Java_SQLite_Database__1last_1insert_1rowid}, -{ "_interrupt", "()V", Java_SQLite_Database__1interrupt}, -{ "_changes", "()J", Java_SQLite_Database__1changes}, -{ "_busy_handler", "(LSQLite/BusyHandler;)V", Java_SQLite_Database__1busy_1handler}, -{ "_busy_timeout", "(I)V", Java_SQLite_Database__1busy_1timeout}, -{ "_complete", "(Ljava/lang/String;)Z", Java_SQLite_Database__1complete}, -{ "version", "()Ljava/lang/String;", Java_SQLite_Database_version}, -{ "dbversion", "()Ljava/lang/String;", Java_SQLite_Database_dbversion}, -{ "_create_function", "(Ljava/lang/String;ILSQLite/Function;)V", Java_SQLite_Database__1create_1function}, -{ "_create_aggregate", "(Ljava/lang/String;ILSQLite/Function;)V", Java_SQLite_Database__1create_1aggregate}, -{ "_function_type", "(Ljava/lang/String;I)V", Java_SQLite_Database__1function_1type}, -{ "_errmsg", "()Ljava/lang/String;", Java_SQLite_Database__1errmsg}, -{ "error_string", "(I)Ljava/lang/String;", Java_SQLite_Database_error_1string}, -{ "_set_encoding", "(Ljava/lang/String;)V", Java_SQLite_Database__1set_1encoding}, -{ "_set_authorizer", "(LSQLite/Authorizer;)V", Java_SQLite_Database__1set_1authorizer}, -{ "_trace", "(LSQLite/Trace;)V", Java_SQLite_Database__1trace}, -{ "is3", "()Z", Java_SQLite_Database_is3}, -{ "vm_compile", "(Ljava/lang/String;LSQLite/Vm;)V", Java_SQLite_Database_vm_1compile}, -{ "vm_compile_args", "(Ljava/lang/String;LSQLite/Vm;[Ljava/lang/String;)V", Java_SQLite_Database_vm_1compile_1args}, -{ "stmt_prepare", "(Ljava/lang/String;LSQLite/Stmt;)V", Java_SQLite_Database_stmt_1prepare}, -{ "_open_blob", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZLSQLite/Blob;)V", Java_SQLite_Database__1open_1blob}, -{ "_progress_handler", "(ILSQLite/ProgressHandler;)V", Java_SQLite_Database__1progress_1handler}, -{ "internal_init", "()V", Java_SQLite_Database_internal_1init} -}; - -static JNINativeMethod sqliteVmMethods[] = { -/* Header for class SQLite_Vm */ -{ "step", "(LSQLite/Callback;)Z", Java_SQLite_Vm_step}, -{ "compile", "()Z", Java_SQLite_Vm_compile}, -{ "stop", "()V", Java_SQLite_Vm_stop}, -{ "finalize", "()V", Java_SQLite_Vm_finalize}, -{ "internal_init", "()V", Java_SQLite_Vm_internal_1init} -}; - -static JNINativeMethod sqliteFunctionContextMethods[] = { -/* Header for class SQLite_FunctionContext */ -{ "set_result", "(Ljava/lang/String;)V", Java_SQLite_FunctionContext_set_1result__Ljava_lang_String_2}, -{ "set_result", "(I)V", Java_SQLite_FunctionContext_set_1result__I}, -{ "set_result", "(D)V", Java_SQLite_FunctionContext_set_1result__D}, -{ "set_error", "(Ljava/lang/String;)V", Java_SQLite_FunctionContext_set_1error}, -{ "set_result", "([B)V", Java_SQLite_FunctionContext_set_1result___3B}, -{ "set_result_zeroblob", "(I)V", Java_SQLite_FunctionContext_set_1result_1zeroblob}, -{ "count", "()I", Java_SQLite_FunctionContext_count}, -{ "internal_init", "()V", Java_SQLite_FunctionContext_internal_1init} -}; - -static JNINativeMethod sqliteStmtMethods[] = { -/* Header for class SQLite_Stmt */ -{ "prepare", "()Z", Java_SQLite_Stmt_prepare}, -{ "step", "()Z", JNICALL Java_SQLite_Stmt_step}, -{ "close", "()V", Java_SQLite_Stmt_close}, -{ "reset", "()V", Java_SQLite_Stmt_reset}, -{ "clear_bindings", "()V", Java_SQLite_Stmt_clear_1bindings}, -{ "bind", "(II)V", Java_SQLite_Stmt_bind__II}, -{ "bind", "(IJ)V", Java_SQLite_Stmt_bind__IJ}, -{ "bind", "(ID)V", Java_SQLite_Stmt_bind__ID}, -{ "bind", "(I[B)V", Java_SQLite_Stmt_bind__I_3B}, -{ "bind", "(ILjava/lang/String;)V", Java_SQLite_Stmt_bind__ILjava_lang_String_2}, -{ "bind", "(I)V", Java_SQLite_Stmt_bind__I}, -{ "bind_zeroblob", "(II)V", Java_SQLite_Stmt_bind_1zeroblob}, -{ "bind_parameter_count", "()I", Java_SQLite_Stmt_bind_1parameter_1count}, -{ "bind_parameter_name", "(I)Ljava/lang/String;", Java_SQLite_Stmt_bind_1parameter_1name}, -{ "bind_parameter_index", "(Ljava/lang/String;)I", Java_SQLite_Stmt_bind_1parameter_1index}, -{ "column_int", "(I)I", Java_SQLite_Stmt_column_1int}, -{ "column_long", "(I)J", Java_SQLite_Stmt_column_1long}, -{ "column_double", "(I)D", Java_SQLite_Stmt_column_1double}, -{ "column_bytes", "(I)[B", Java_SQLite_Stmt_column_1bytes}, -{ "column_string", "(I)Ljava/lang/String;", Java_SQLite_Stmt_column_1string}, -{ "column_type", "(I)I", Java_SQLite_Stmt_column_1type}, -{ "column_count", "()I", Java_SQLite_Stmt_column_1count}, -{ "column_table_name", "(I)Ljava/lang/String;", Java_SQLite_Stmt_column_1table_1name}, -{ "column_database_name", "(I)Ljava/lang/String;", Java_SQLite_Stmt_column_1database_1name}, -{ "column_decltype", "(I)Ljava/lang/String;", Java_SQLite_Stmt_column_1decltype}, -{ "column_origin_name", "(I)Ljava/lang/String;", Java_SQLite_Stmt_column_1origin_1name}, -{ "finalize", "()V", Java_SQLite_Stmt_finalize}, -{ "internal_init", "()V", Java_SQLite_Stmt_internal_1init} -}; - -static JNINativeMethod sqliteBlobMethods[] = { -/* Header for class SQLite_Blob */ - -{ "close", "()V", Java_SQLite_Blob_close}, -{ "write", "([BIII)I", Java_SQLite_Blob_write}, -{ "read", "([BIII)I", Java_SQLite_Blob_read}, -{ "finalize", "()V", Java_SQLite_Blob_finalize}, -{ "internal_init", "()V", Java_SQLite_Blob_internal_1init} -}; - -int register_SQLite_Database(JNIEnv* env) { - return jniRegisterNativeMethods(env, "SQLite/Database", - sqliteDatabaseMethods, NELEM(sqliteDatabaseMethods)); -} - -int register_SQLite_Vm(JNIEnv* env) { - return jniRegisterNativeMethods(env, "SQLite/Vm", - sqliteVmMethods, NELEM(sqliteVmMethods)); -} - -int register_SQLite_FunctionContext(JNIEnv* env) { - return jniRegisterNativeMethods(env, "SQLite/FunctionContext", - sqliteFunctionContextMethods, NELEM(sqliteFunctionContextMethods)); -} - -int register_SQLite_Stmt(JNIEnv* env) { - return jniRegisterNativeMethods(env, "SQLite/Stmt", - sqliteStmtMethods, NELEM(sqliteStmtMethods)); -} - -int register_SQLite_Blob(JNIEnv* env) { - return jniRegisterNativeMethods(env, "SQLite/Blob", - sqliteBlobMethods, NELEM(sqliteBlobMethods)); -} diff --git a/sql/src/main/native/sub.mk b/sql/src/main/native/sub.mk deleted file mode 100644 index d84e0b6..0000000 --- a/sql/src/main/native/sub.mk +++ /dev/null @@ -1,19 +0,0 @@ -# This file is included by the top-level libcore Android.mk. -# It's not a normal makefile, so we don't include CLEAR_VARS -# or BUILD_*_LIBRARY. - -LOCAL_SRC_FILES := \ - sqlite_jni.c \ - sqlite_jni_registration.c - -LOCAL_C_INCLUDES += \ - external/sqlite/dist - -# Any shared/static libs that are listed here must also -# be listed in libs/nativehelper/Android.mk. -# TODO: fix this requirement - -LOCAL_SHARED_LIBRARIES += \ - libsqlite - -LOCAL_STATIC_LIBRARIES += |