猿问

是否有任何方法可以帮助解决常见的SQLite问题?

是否有任何方法可以帮助解决常见的SQLite问题?

通常,相对简单的错误会导致一些问题,而这些问题往往由于对SQLite的误解而更加复杂。

例如:-

  • 表和列未找到,因为通常假定

    onCreate

    a的方法

    DBHelper

    的子类

    SQLiteOpenHelper

    类)每次创建DBHelper实例或每次运行应用程序时运行。

    (注意!onCreate只有在第一次创建数据库时才自动调用,然后才在尝试使用SQLiteDatabase getReadableDatabasegetWriteableDatabse方法,如果更改数据库结构/模式,则有三种简单的强制方法onCreate若要运行,a)清除应用程序的数据,b)卸载App或b),如果onUpgrade方法调用onCreate方法(在删除表后),然后增加数据库版本号。

  • 插入/更新不工作但没有失败。

对于SQLite的新手来说,它也可能令人恼火/令人望而生畏,因为它无法很容易地看到数据库包含的内容。

那么,是否有任何通用的实用程序可以提供帮助呢?

注意!这是一个关于分享知识问答风格.


慕妹3146593
浏览 508回答 3
3回答

呼唤远方

以下是新手可能会发现有用的一些通用实用程序,它们被设计为非特定的,并且可以在任何数据库/表上工作。目前有下列可能有用的方法:getAllRowsFromTable若要使用所有行撤回游标,请执行以下操作。logCursorColumns若要将光标中的列写入日志,请执行以下操作。logCursorData若要将光标数据和列写入日志,请执行以下操作。注意!关于增加/修正的请求/建议肯定会得到考虑。此外,还使用了上述方法或用于测试/创建上述内容的方法:getEmptyColumnLessCursor&nbsp;(使用这种方法的100分&nbsp;:)&nbsp;).getBytedata返回给定字节数组的十六进制字符串(用于BLOB处理)。convertBytesToHex将字节数组转换为十六进制字符串(用于BLOB处理)。getAllRowsFromTable预期的用途是创建一个游标,随后由logCursorColumns和logCursorData方法。这不应该在生产应用程序中使用(而不是不能使用)。这个签名是:-public&nbsp;static&nbsp;Cursor&nbsp;getAllRowsFromTable( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQLiteDatabase&nbsp;db, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tablename, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;use_error_checking, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;forceRowidAs)地点:-第一个参数是SQLite数据库(由于一般性质而需要)。第二个参数是获取数据的表名。如果表不在数据库中,则在创建写入日志的游标之前,第三个参数(如果为true)将检查表是否存在。第四个参数(如果不为NULL或长度>0的字符串)将创建一个附加列,该列将根据带有ROWID内容的参数命名(用于在未提供ROWID别名而因此不包括ROWID时提供帮助)。什么是ROWID?示例用法:-&nbsp;&nbsp;&nbsp;&nbsp;mEventsDBHelper&nbsp;=&nbsp;new&nbsp;EventsDBHelper(this); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Get&nbsp;all&nbsp;rows&nbsp;from&nbsp;table&nbsp;(this&nbsp;exist&nbsp;or&nbsp;should&nbsp;do) &nbsp;&nbsp;&nbsp;&nbsp;Cursor&nbsp;events&nbsp;=&nbsp;CommonSQLiteUtilities.getAllRowsFromTable( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mEventsDBHelper.getEventsDB(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EventsDBHelper.TBNAME, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommonSQLiteUtilities.ERROR_CHECKING_ON, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;null &nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Deisgned&nbsp;to&nbsp;be&nbsp;problematic&nbsp;i.e.&nbsp;no&nbsp;such&nbsp;table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Cursor&nbsp;ooops&nbsp;=&nbsp;CommonSQLiteUtilities.getAllRowsFromTable( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mEventsDBHelper.getEventsDB(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"NOTATABLE", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommonSQLiteUtilities.ERROR_CHECKING_ON, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"rumplestiltskin" &nbsp;&nbsp;&nbsp;&nbsp;);第二次调用导致日志中的以下行:D/SQLITE_CSU:&nbsp;Table&nbsp;NOTATABLE&nbsp;was&nbsp;not&nbsp;located&nbsp;in&nbsp;the&nbsp;SQLite&nbsp;Database&nbsp;Master&nbsp;Table.将始终返回游标,尽管该游标可能没有行,也没有列(例如,在表不在数据库的情况下)。当查询数据库表时(如果是的话),将捕获和报告异常。例如指定是作为第四个参数(有效地尝试使用ROWID AS IS,而SQLIte不喜欢,则会产生类似于以下内容的结果:-10-09&nbsp;18:57:52.591&nbsp;3835-3835/?&nbsp;E/SQLiteLog:&nbsp;(1)&nbsp;near&nbsp;"IS":&nbsp;syntax&nbsp;error 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Exception&nbsp;encountered&nbsp;but&nbsp;trapped&nbsp;when&nbsp;querying&nbsp;table&nbsp;events&nbsp;Message&nbsp;was:&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;near&nbsp;"IS":&nbsp;syntax&nbsp;error&nbsp;(code&nbsp;1):&nbsp;,&nbsp;while&nbsp;compiling:&nbsp;SELECT&nbsp;rowid&nbsp;AS&nbsp;&nbsp;IS&nbsp;,&nbsp;*&nbsp;FROM&nbsp;events 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Stacktrace&nbsp;was: 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;android.database.sqlite.SQLiteException:&nbsp;near&nbsp;"IS":&nbsp;syntax&nbsp;error&nbsp;(code&nbsp;1):&nbsp;, &nbsp;while&nbsp;compiling:&nbsp;SELECT&nbsp;rowid&nbsp;AS&nbsp;&nbsp;IS&nbsp;,&nbsp;*&nbsp;FROM&nbsp;events 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native&nbsp;Method) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1202) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at&nbsp;mjt.sqlitedbexamples.CommonSQLiteUtilities.getAllRowsFromTable(CommonSQLiteUtilities.java:97) 10-09&nbsp;18:57:52.592&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;mjt.sqlitedbexamples.MainActivity.onCreate(MainActivity.java:61) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.app.Activity.performCreate(Activity.java:5990) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.app.ActivityThread.access$800(ActivityThread.java:151) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.os.Handler.dispatchMessage(Handler.java:102) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.os.Looper.loop(Looper.java:135) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;android.app.ActivityThread.main(ActivityThread.java:5254) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Native&nbsp;Method) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Method.java:372) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;W/System.err:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)返回的游标将为空,没有行或列。logCursorColumns用于编写有关游标的列信息(这些信息通常反映数据库,特别是如果使用getAllRowsFromTable).这个签名是:-&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;logCursorColumns(Cursor&nbsp;csr)地点:-第一个参数是游标(任意游标)。示例用法:-注意!继续前面的示例。&nbsp;&nbsp;&nbsp;&nbsp;CommonSQLiteUtilities.logCursorColumns(events); &nbsp;&nbsp;&nbsp;&nbsp;CommonSQLiteUtilities.logCursorColumns(ooops);这将产生以下方面的产出:-10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;logCursorColumns&nbsp;invoked.&nbsp;Cursor&nbsp;has&nbsp;the&nbsp;following&nbsp;8&nbsp;columns. 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Column&nbsp;Name&nbsp;1&nbsp;is&nbsp;_id 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Column&nbsp;Name&nbsp;2&nbsp;is&nbsp;starts 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Column&nbsp;Name&nbsp;3&nbsp;is&nbsp;starts_timestamp 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Column&nbsp;Name&nbsp;4&nbsp;is&nbsp;ends 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Column&nbsp;Name&nbsp;5&nbsp;is&nbsp;ends_timestamp 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Column&nbsp;Name&nbsp;6&nbsp;is&nbsp;description 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Column&nbsp;Name&nbsp;7&nbsp;is&nbsp;counter 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;Column&nbsp;Name&nbsp;8&nbsp;is&nbsp;bytedata 10-09&nbsp;18:57:52.593&nbsp;3835-3835/?&nbsp;D/SQLITE_CSU:&nbsp;logCursorColumns&nbsp;invoked.&nbsp;Cursor&nbsp;has&nbsp;the&nbsp;following&nbsp;0&nbsp;columns.logCursorData这非常类似于logCursorColumns除此之外,它还提供了更广泛的信息重新分级列,并且还提供了重新分级存储在数据库中的实际数据的信息。这个签名是:-&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;logCursorData(Cursor&nbsp;csr)地点:-第一个参数是游标(任意游标)。示例用法:-注意!继续前面的示例。&nbsp;&nbsp;&nbsp;&nbsp;CommonSQLiteUtilities.logCursorData(events); &nbsp;&nbsp;&nbsp;&nbsp;CommonSQLiteUtilities.logCursorData(ooops);这将产生以下方面的产出:-10-09 19:30:31.801 1455-1455/? D/SQLITE_CSU: logCursorData Cursor has 6 rows with 8 columns.10-09 19:30:31.801 1455-1455/? D/SQLITE_CSU: Information for row 1 offset=0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column _id Type is INTEGER value as String is 1 value as long is 1 value as double is 1.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts Type is INTEGER value as String is 1507537831 value as long is 1507537831 value as double is 1.507537831E9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts_timestamp Type is INTEGER value as String is 1507537831783 value as long is 1507537831783 value as double is 1.507537831783E12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends_timestamp Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column description Type is STRING value as String is TESTEVENT 001 just description value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column counter Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column bytedata Type is BLOB value as String is unobtainable! value as long is unobtainable! value as double is unobtainable! value as blob is 0000000010-09 19:30:31.802 1455-1455/? D/SQLITE_CSU: Information for row 2 offset=1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column _id Type is INTEGER value as String is 2 value as long is 2 value as double is 2.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts Type is INTEGER value as String is 1507537831 value as long is 1507537831 value as double is 1.507537831E9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts_timestamp Type is INTEGER value as String is 1507537831785 value as long is 1507537831785 value as double is 1.507537831785E12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends_timestamp Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column description Type is STRING value as String is TESTEVENT 002 description and bytearray value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column counter Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column bytedata Type is BLOB value as String is unobtainable! value as long is unobtainable! value as double is unobtainable! value as blob is 000102030405060708090010-09 19:30:31.802 1455-1455/? D/SQLITE_CSU: Information for row 3 offset=2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column _id Type is INTEGER value as String is 3 value as long is 3 value as double is 3.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts Type is INTEGER value as String is 1507537831 value as long is 1507537831 value as double is 1.507537831E9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts_timestamp Type is INTEGER value as String is 1507537831789 value as long is 1507537831789 value as double is 1.507537831789E12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends Type is INTEGER value as String is 15254678 value as long is 15254678 value as double is 1.5254678E7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends_timestamp Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column description Type is STRING value as String is TESTEVENT 003 desc, bytes and endint value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column counter Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column bytedata Type is BLOB value as String is unobtainable! value as long is unobtainable! value as double is unobtainable! value as blob is 7F7E7D7C10-09 19:30:31.802 1455-1455/? D/SQLITE_CSU: Information for row 4 offset=3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column _id Type is INTEGER value as String is 4 value as long is 4 value as double is 4.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts Type is INTEGER value as String is 1507537831 value as long is 1507537831 value as double is 1.507537831E9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts_timestamp Type is INTEGER value as String is 1507537831792 value as long is 1507537831792 value as double is 1.507537831792E12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends_timestamp Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column description Type is STRING value as String is TESTEVENT 004 desc, bytes and endlong value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column counter Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column bytedata Type is BLOB value as String is unobtainable! value as long is unobtainable! value as double is unobtainable! value as blob is 38424C56606A747E10-09 19:30:31.803 1455-1455/? D/SQLITE_CSU: Information for row 5 offset=4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column _id Type is INTEGER value as String is 5 value as long is 5 value as double is 5.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts Type is INTEGER value as String is 1507537831 value as long is 1507537831 value as double is 1.507537831E9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts_timestamp Type is INTEGER value as String is 1507537831794 value as long is 1507537831794 value as double is 1.507537831794E12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends Type is INTEGER value as String is 1699999999 value as long is 1699999999 value as double is 1.699999999E9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends_timestamp Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column description Type is STRING value as String is TESTEVENT 005 desc, endint value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column counter Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column bytedata Type is BLOB value as String is unobtainable! value as long is unobtainable! value as double is unobtainable! value as blob is 0000000010-09 19:30:31.803 1455-1455/? D/SQLITE_CSU: Information for row 6 offset=5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column _id Type is INTEGER value as String is 6 value as long is 6 value as double is 6.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts Type is INTEGER value as String is 1507537831 value as long is 1507537831 value as double is 1.507537831E9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column starts_timestamp Type is INTEGER value as String is 1507537831796 value as long is 1507537831796 value as double is 1.507537831796E12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column ends_timestamp Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column description Type is STRING value as String is TESTEVENT 006 desc, endlong value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column counter Type is INTEGER value as String is 0 value as long is 0 value as double is 0.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For Column bytedata Type is BLOB value as String is unobtainable! value as long is unobtainable! value as double is unobtainable! value as blob is 00000000对于空游标(OOOPS):-10-09&nbsp;19:30:31.804&nbsp;1455-1455/?&nbsp;D/SQLITE_CSU:&nbsp;logCursorData&nbsp;Cursor&nbsp;has&nbsp;0&nbsp;rows&nbsp;with&nbsp;0&nbsp;columns.代码CommonSQLiteUutities.java:-public&nbsp;class&nbsp;CommonSQLiteUtilities&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;boolean&nbsp;ERROR_CHECKING_ON&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;boolean&nbsp;ERROR_CHECKING_OFF&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;SQLite&nbsp;MASTER&nbsp;TABLE&nbsp;definitions &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;SQLITE_MASTER&nbsp;=&nbsp;"sqlite_master"; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;SM_TABLE_TYPE_COLUMN&nbsp;=&nbsp;"type"; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;SM_NAME_COLUMN&nbsp;=&nbsp;"name"; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;SM_TABLENAME_COLUMN&nbsp;=&nbsp;"tbl_name"; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;SM_ROOTPAGE_COLUMN&nbsp;=&nbsp;"rootpage"; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;SM_SQL_COLUMN&nbsp;=&nbsp;"sql"; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;SM_TYPE_TABLE&nbsp;=&nbsp;"table"; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;SM_TYPE_INDEX&nbsp;=&nbsp;"index"; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;CSU_TAG&nbsp;=&nbsp;"SQLITE_CSU"; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;CommonSQLiteUtilities()&nbsp;{} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Generic&nbsp;get&nbsp;all&nbsp;rows&nbsp;from&nbsp;an&nbsp;SQlite&nbsp;table, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;allowing&nbsp;the&nbsp;existence&nbsp;of&nbsp;the&nbsp;table&nbsp;to&nbsp;be&nbsp;checked&nbsp;and&nbsp;also &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;allowing&nbsp;the&nbsp;ROWID&nbsp;to&nbsp;be&nbsp;added&nbsp;AS&nbsp;a&nbsp;supplied&nbsp;string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;db&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;SQLiteDatabase &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;tablename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;name&nbsp;of&nbsp;the&nbsp;table&nbsp;from&nbsp;which&nbsp;the &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returned&nbsp;cursor&nbsp;will&nbsp;be&nbsp;created&nbsp;from; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Note! &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;use_error_checking&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;ot&nbsp;not&nbsp;to&nbsp;try&nbsp;to&nbsp;detect&nbsp;errors &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currently&nbsp;just&nbsp;table&nbsp;doesn't&nbsp;exist, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true&nbsp;to&nbsp;turn&nbsp;on,&nbsp;false&nbsp;to&nbsp;turn&nbsp;off &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR_CHECKING_ON&nbsp;=&nbsp;true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR_CHECKING_OFF&nbsp;=&nbsp;false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;forceRowidAs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;length&nbsp;of&nbsp;string&nbsp;passed&nbsp;is&nbsp;1&nbsp;or&nbsp;greater &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;a&nbsp;column,&nbsp;as&nbsp;an&nbsp;alias&nbsp;of&nbsp;ROWID,&nbsp;will&nbsp;be &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;added&nbsp;to&nbsp;the&nbsp;cursor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;extracted&nbsp;cursor,&nbsp;or&nbsp;in&nbsp;the&nbsp;case&nbsp;of&nbsp;the &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;underlying&nbsp;table&nbsp;not&nbsp;existing&nbsp;an&nbsp;empty&nbsp;cursor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;no&nbsp;columns &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Cursor&nbsp;getAllRowsFromTable(SQLiteDatabase&nbsp;db, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tablename, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;use_error_checking, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;forceRowidAs)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;columns&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Tablename&nbsp;must&nbsp;be&nbsp;at&nbsp;least&nbsp;1&nbsp;character&nbsp;in&nbsp;length &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tablename.length()&nbsp;<&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(CSU_TAG,new&nbsp;Object(){}.getClass().getEnclosingMethod().getName()&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;is&nbsp;finishing&nbsp;as&nbsp;the&nbsp;provided&nbsp;tablename&nbsp;is&nbsp;less&nbsp;than&nbsp;1&nbsp;character&nbsp;in&nbsp;length" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;MatrixCursor(new&nbsp;String[]{}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;use_error_checking&nbsp;is&nbsp;true&nbsp;then&nbsp;check&nbsp;that&nbsp;the&nbsp;table&nbsp;exists &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;in&nbsp;the&nbsp;sqlite_master&nbsp;table &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(use_error_checking)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cursor&nbsp;chkcsr&nbsp;=&nbsp;db.query(SQLITE_MASTER,null, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SM_TABLE_TYPE_COLUMN&nbsp;+&nbsp;"=?&nbsp;AND&nbsp;" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;SM_TABLENAME_COLUMN&nbsp;+&nbsp;"=?", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;String[]{SM_TYPE_TABLE,tablename}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;null,null,null &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Ooops&nbsp;table&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;Database&nbsp;so&nbsp;return&nbsp;an&nbsp;empty &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;column-less&nbsp;cursor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(chkcsr.getCount()&nbsp;<&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(CSU_TAG,"Table&nbsp;"&nbsp;+&nbsp;tablename&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;was&nbsp;not&nbsp;located&nbsp;in&nbsp;the&nbsp;SQLite&nbsp;Database&nbsp;Master&nbsp;Table." &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;return&nbsp;empty&nbsp;cursor&nbsp;with&nbsp;no&nbsp;columns &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;MatrixCursor(new&nbsp;String[]{}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chkcsr.close(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;forcing&nbsp;an&nbsp;alias&nbsp;of&nbsp;ROWID&nbsp;then&nbsp;user&nbsp;ROWID&nbsp;AS&nbsp;???,&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(forceRowidAs&nbsp;!=&nbsp;null&nbsp;&&&nbsp;forceRowidAs.length()&nbsp;>&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columns&nbsp;=&nbsp;new&nbsp;String[]{"rowid&nbsp;AS&nbsp;"&nbsp;+forceRowidAs,"*"}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Finally&nbsp;return&nbsp;the&nbsp;Cursor&nbsp;but&nbsp;trap&nbsp;any&nbsp;exceptions &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;db.query(tablename,&nbsp;columns,&nbsp;null,&nbsp;null,&nbsp;null,&nbsp;null,&nbsp;null); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(CSU_TAG,"Exception&nbsp;encountered&nbsp;but&nbsp;trapped&nbsp;when&nbsp;querying&nbsp;table&nbsp;"&nbsp;+&nbsp;tablename&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;Message&nbsp;was:&nbsp;\n"&nbsp;+&nbsp;e.getMessage()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(CSU_TAG,"Stacktrace&nbsp;was:"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;MatrixCursor(new&nbsp;String[]{}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Create&nbsp;and&nbsp;return&nbsp;a&nbsp;Cursor&nbsp;devoid&nbsp;of&nbsp;any&nbsp;rows&nbsp;and&nbsp;columns &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Not&nbsp;used,&nbsp;prehaps&nbsp;of&nbsp;very&nbsp;little&nbsp;use. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;db&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;Sqlite&nbsp;database&nbsp;in&nbsp;which&nbsp;the&nbsp;cursor&nbsp;is&nbsp;to&nbsp;be&nbsp;created &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;empty&nbsp;Cursor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Cursor&nbsp;getEmptyColumnLessCursor(SQLiteDatabase&nbsp;db)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;MatrixCursor(new&nbsp;String[]{}); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Write&nbsp;column&nbsp;names&nbsp;in&nbsp;the&nbsp;passed&nbsp;Cursor&nbsp;to&nbsp;the&nbsp;log &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;csr&nbsp;&nbsp;&nbsp;The&nbsp;Cursor&nbsp;to&nbsp;be&nbsp;inspected. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;logCursorColumns(Cursor&nbsp;csr)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(CSU_TAG, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Object(){}.getClass().getEnclosingMethod().getName()&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;invoked.&nbsp;Cursor&nbsp;has&nbsp;the&nbsp;following&nbsp;"&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer.toString(csr.getColumnCount())+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;columns."); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;position&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(String&nbsp;column:&nbsp;csr.getColumnNames())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(CSU_TAG,"Column&nbsp;Name&nbsp;"&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer.toString(position)&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;is&nbsp;" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;column &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Write&nbsp;the&nbsp;contents&nbsp;of&nbsp;the&nbsp;Cursor&nbsp;to&nbsp;the&nbsp;log &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;csr&nbsp;&nbsp;&nbsp;The&nbsp;Cursor&nbsp;that&nbsp;is&nbsp;to&nbsp;be&nbsp;displayed&nbsp;in&nbsp;the&nbsp;log &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;logCursorData(Cursor&nbsp;csr)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;columncount&nbsp;=&nbsp;csr.getColumnCount(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;rowcount&nbsp;=&nbsp;csr.getCount(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;csrpos&nbsp;=&nbsp;csr.getPosition();&nbsp;//<<<&nbsp;added&nbsp;20171016&nbsp;to &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(CSU_TAG, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Object(){}.getClass().getEnclosingMethod().getName()&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;Cursor&nbsp;has&nbsp;"&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer.toString(rowcount)&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;rows&nbsp;with&nbsp;"&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer.toString(columncount)&nbsp;+&nbsp;"&nbsp;columns." &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csr.moveToPosition(-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Ensure&nbsp;that&nbsp;all&nbsp;rows&nbsp;are&nbsp;retrieved&nbsp;<<<&nbsp;added&nbsp;20171016 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(csr.moveToNext())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;unobtainable&nbsp;=&nbsp;"unobtainable!"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;logstr&nbsp;=&nbsp;"Information&nbsp;for&nbsp;row&nbsp;"&nbsp;+&nbsp;Integer.toString(csr.getPosition()&nbsp;+&nbsp;1)&nbsp;+&nbsp;"&nbsp;offset="&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer.toString(csr.getPosition()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&nbsp;<&nbsp;columncount;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logstr&nbsp;=&nbsp;logstr&nbsp;+&nbsp;"\n\tFor&nbsp;Column&nbsp;"&nbsp;+&nbsp;csr.getColumnName(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(csr.getType(i))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Cursor.FIELD_TYPE_NULL: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logstr&nbsp;=&nbsp;logstr&nbsp;+&nbsp;"&nbsp;Type&nbsp;is&nbsp;NULL"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Cursor.FIELD_TYPE_FLOAT: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logstr&nbsp;=&nbsp;logstr&nbsp;+&nbsp;"Type&nbsp;is&nbsp;FLOAT"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Cursor.FIELD_TYPE_INTEGER: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logstr&nbsp;=&nbsp;logstr&nbsp;+&nbsp;"&nbsp;Type&nbsp;is&nbsp;INTEGER"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Cursor.FIELD_TYPE_STRING: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logstr&nbsp;=&nbsp;logstr&nbsp;+&nbsp;"&nbsp;Type&nbsp;is&nbsp;STRING"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Cursor.FIELD_TYPE_BLOB: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logstr&nbsp;=&nbsp;logstr&nbsp;+&nbsp;"&nbsp;Type&nbsp;is&nbsp;BLOB"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;strval_log&nbsp;=&nbsp;"&nbsp;value&nbsp;as&nbsp;String&nbsp;is&nbsp;"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;lngval_log&nbsp;=&nbsp;"&nbsp;value&nbsp;as&nbsp;long&nbsp;is&nbsp;"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;dblval_log&nbsp;=&nbsp;"&nbsp;value&nbsp;as&nbsp;double&nbsp;is&nbsp;"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;blbval_log&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strval_log&nbsp;=&nbsp;strval_log&nbsp;+&nbsp;csr.getString(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lngval_log&nbsp;=&nbsp;lngval_log&nbsp;+&nbsp;csr.getLong(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dblval_log&nbsp;=&nbsp;dblval_log&nbsp;+&nbsp;&nbsp;csr.getDouble(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strval_log&nbsp;=&nbsp;strval_log&nbsp;+&nbsp;unobtainable; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lngval_log&nbsp;=&nbsp;lngval_log&nbsp;+&nbsp;unobtainable; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dblval_log&nbsp;=&nbsp;dblval_log&nbsp;+&nbsp;unobtainable; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blbval_log&nbsp;=&nbsp;"&nbsp;value&nbsp;as&nbsp;blob&nbsp;is&nbsp;"&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getBytedata(csr.getBlob(i),24); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e2.printStackTrace(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logstr&nbsp;=&nbsp;logstr&nbsp;+&nbsp;strval_log&nbsp;+&nbsp;lngval_log&nbsp;+&nbsp;dblval_log&nbsp;+&nbsp;blbval_log; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(CSU_TAG,logstr); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csr.moveToPosition(csrpos);&nbsp;//&nbsp;restore&nbsp;cursor&nbsp;position&nbsp;<<<&nbsp;added&nbsp;20171016 &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Return&nbsp;a&nbsp;hex&nbsp;string&nbsp;of&nbsp;the&nbsp;given&nbsp;byte&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;byte&nbsp;array&nbsp;to&nbsp;be&nbsp;converted&nbsp;to&nbsp;a&nbsp;hexadecimal&nbsp;string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;limit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;maximum&nbsp;number&nbsp;of&nbsp;bytes; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;note&nbsp;returned&nbsp;string&nbsp;will&nbsp;be&nbsp;up&nbsp;to&nbsp;twice&nbsp;as&nbsp;long &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;byte&nbsp;array&nbsp;represented&nbsp;as&nbsp;a&nbsp;hexadecimal&nbsp;string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;String&nbsp;getBytedata(byte[]&nbsp;bytes,&nbsp;int&nbsp;limit)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bytes.length&nbsp;<&nbsp;limit)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;convertBytesToHex(bytes); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;subset&nbsp;=&nbsp;new&nbsp;byte[limit]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(bytes,0,subset,0,limit); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;convertBytesToHex(subset); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;HEX&nbsp;characters&nbsp;as&nbsp;a&nbsp;char&nbsp;array&nbsp;for&nbsp;use&nbsp;by&nbsp;convertBytesToHex &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;static&nbsp;char[]&nbsp;hexarray&nbsp;=&nbsp;"0123456789ABCDEF".toCharArray(); &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Return&nbsp;a&nbsp;hexadecimal&nbsp;string&nbsp;representation&nbsp;of&nbsp;the&nbsp;passed&nbsp;byte&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;byte&nbsp;array&nbsp;to&nbsp;be&nbsp;represented. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;string&nbsp;representing&nbsp;the&nbsp;byte&nbsp;array&nbsp;as&nbsp;hexadecimal &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;String&nbsp;convertBytesToHex(byte[]&nbsp;bytes)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;hexstr&nbsp;=&nbsp;new&nbsp;char[bytes.length&nbsp;*&nbsp;2]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&nbsp;<&nbsp;bytes.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;h&nbsp;=&nbsp;bytes[i]&nbsp;&&nbsp;0xFF; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hexstr[i&nbsp;*&nbsp;2]&nbsp;=&nbsp;hexarray[h&nbsp;>>>&nbsp;4]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hexstr[i&nbsp;*&nbsp;2&nbsp;+&nbsp;1]&nbsp;=&nbsp;hexarray[h&nbsp;&&nbsp;0xF]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;String(hexstr); &nbsp;&nbsp;&nbsp;&nbsp;} }要使用代码,只需创建CommonSQLite实用程序类并复制上面的代码。
随时随地看视频慕课网APP

相关分类

Android
我要回答