如何在Android myTouch手机上浏览我在应用程序中创建的SQLite数据库?
当我通过adb shell登录时,sqlite3给了我一个拒绝的权限.是否有另一种方法来检查我的数据库和表是否实际被创建,以及是否正在插入行?
我无法使用模拟器,因为它不能很好地播放视频等,这是我的应用程序的主要功能,所以我只能在手机上测试.
我收到以下错误:
android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error
at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:92)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1926)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1866)
Run Code Online (Sandbox Code Playgroud)
我只在Samsung Nexus手机上的ICS 4.0.1上出现此错误.在模拟器,Motorola Xoom 3.2和HTC Desire 2.3.3上,代码工作正常.我的代码针对SDK的版本8或2.2.x.的execSQL是如下执行的:
db.execSQL("DROP TABLE IF EXISTS " + table.getTableName());
Run Code Online (Sandbox Code Playgroud)
数据库存储在内部而不是SD卡.有关如何解决这个问题的任何建议?
我在做一个使用sqlite数据库的应用程序我的应用程序中有一个功能,它有一个"更新数据库"按钮.
当用户单击"更新数据库"按钮时,我需要使用URL中的新db文件升级旧的db文件.
这该怎么做.研究告诉我,我们无法更改数据库,因为它在.apk文件中.对此有什么解决方案吗?请帮帮我.谢谢.
我有一个名为"priority"的(int)列.当我选择我的项目时,我希望最高优先级(最低编号)是第一个,最低优先级(最高编号)是最后一个.
但是,没有优先级的项目(当前优先级为0)应该在具有优先级的列之后由其他列列出.
换一种说法.如果我有这些优先事项:
1 2 0 0 5 0 8 9
Run Code Online (Sandbox Code Playgroud)
我该如何对它们进行排序:
1 2 5 8 9 0 0 0
Run Code Online (Sandbox Code Playgroud)
我想我可以使用Int.max而不是0,但是0组成了一个很好的默认值,我会尽量保留.
我正在尝试从数据库中选择一些数据,我有两片代码来做:
cursor = builder.query(db,
new String[]{"col1", "col2", "col3"},
"id = ?", new String[]{getSID(db)}, null, null, null);
Run Code Online (Sandbox Code Playgroud)
和
cursor = builder.query(db,
new String[]{"col1", "col2", "col3"},
"id = " + getSID(db), null, null, null, null);
Run Code Online (Sandbox Code Playgroud)
它们之间的区别在于,根据文档,第一个似乎更正确,但它也不起作用 - 光标是空的.而不是第二个 - 我得到了我需要的所有数据.
所以我尝试在我的电脑上使用数据库副本执行不同的SQL查询,这就是我所拥有的:
SELECT col1, col2, col3 FROM SomeTables WHERE (id = '42')
Run Code Online (Sandbox Code Playgroud)
这个不起作用(这个查询显然等于查询,由第一个代码示例生成)
SELECT col1, col2, col3 FROM SomeTables WHERE (id = 42)
Run Code Online (Sandbox Code Playgroud)
这个工作正常(等于从第二个代码示例查询).
据我所知,SQLite应该自动执行类型转换,但出了点问题,我不知道为什么.您对如何修复第一个代码示例有什么想法吗?(或者,也许,数据库?)
如果重要的话,这里是CREATE带有id字段的表的简化脚本:
CREATE TABLE SomeTable ( ID PRIMARY KEY, col1, col2, [...] )
Run Code Online (Sandbox Code Playgroud)
UPD:顺便说一下,getSID(db)返回String …
如果我忘了它,它有时会起作用;.但有时却没有.
在JDBC和Android SQLite中,似乎我根本不需要;.我很迷惑.
我什么时候应该使用分号?
我在SQLite 3中有一个表:
sqlite> .schema
CREATE TABLE table1 (id INTEGER PRIMARY KEY NOT NULL,
title TEXT UNIQUE NOT NULL,
priority INTEGER UNIQUE NOT NULL);
Run Code Online (Sandbox Code Playgroud)
以下是一些示例数据,用于说明:
sqlite> SELECT * FROM table1;
id title priority
---------- ---------- ----------
1 a 1
2 b 2
3 c 3
4 d 4
Run Code Online (Sandbox Code Playgroud)
我希望在priority所有细胞中添加1 priority > 1.这是我的第一次尝试:
sqlite> UPDATE table1 SET priority = priority + 1 WHERE priority > 1;
Error: column priority is not unique
Run Code Online (Sandbox Code Playgroud)
这失败了,大概是因为更新没有排序,允许UPDATE尝试将priority列中的一个单元格设置为现有单元格的值.所以,这是我的第二次尝试:
sqlite> UPDATE table1 SET …Run Code Online (Sandbox Code Playgroud) 我正在寻找可以帮助我查看启用哪种日志记录模式的函数。.我也在这里查找 了函数列表有用于检查数据库状态sqlite3_db_status(....)的函数,但status参数没有用于检查日志记录的选项模式
有没有功能或任何方法可以找到sqlite db是使用WAL模式还是普通日志模式.. !!
我想在sdcard或外部SD卡中创建数据库为此我已经尝试了这个代码并使用这个我已经在SD卡中成功创建了数据库,但在logcat中它给了我如下警告
logcat的
07-18 14:18:22.140:W/FileUtils(8595):chmod失败(/ mnt/sdcard/peakmedia/DB_PMD):libcore.io.ErrnoException:chmod failed:EPERM(不允许操作)
DB_Helper.java
public class DB_Helper extends SQLiteOpenHelper
{
public DB_Helper(Context context)
{
super(context, Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + DB_Constant.DB.FILE_DIR
+ File.separator + DB_Constant.DB.DATABASENAME, null, DB_Constant.DB.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
String query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYFILES_TABLE);
db.execSQL(query);
query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYUSERS_TABLE);
db.execSQL(query);
query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYPLAYLIST_TABLE);
db.execSQL(query);
query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYDEVICE_TABLE);
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
if(newVersion > oldVersion)
{
db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYFILES);
onCreate(db);
db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYUSERS);
onCreate(db);
db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYPLAYLIST); …Run Code Online (Sandbox Code Playgroud) 我最近更新了我的一个应用程序,在极少数情况下我得到了上述错误.仅当用户尝试通过现有应用程序更新应用程序时,才会出现此错误.这不会发生在每次和每台设备上.我在Android SQLiteException上发现了类似的问题:无法将db的语言环境更改为'en_US'但是回复并没有解决我的问题.我一直试图通过一个小小的方式来解决这个问题而且我失败了.我使用过SQLiteDatabase,因此我没有给出任何数据库路径.崩溃报告如下
android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.scoreup/databases/scoreUp' to 'en_US'.
0
android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration
SQLiteConnection.java:393
1
android.database.sqlite.SQLiteConnection.open
SQLiteConnection.java:218
2
android.database.sqlite.SQLiteConnection.open
SQLiteConnection.java:193
3
android.database.sqlite.SQLiteConnectionPool.openConnectionLocked
SQLiteConnectionPool.java:463
4
android.database.sqlite.SQLiteConnectionPool.open
SQLiteConnectionPool.java:185
5
android.database.sqlite.SQLiteConnectionPool.open
SQLiteConnectionPool.java:177
6
android.database.sqlite.SQLiteDatabase.openInner
SQLiteDatabase.java:806
7
android.database.sqlite.SQLiteDatabase.open
SQLiteDatabase.java:791
8
android.database.sqlite.SQLiteDatabase.openDatabase
SQLiteDatabase.java:694
9
android.app.ContextImpl.openOrCreateDatabase
ContextImpl.java:1148
10
android.content.ContextWrapper.openOrCreateDatabase
ContextWrapper.java:268
11
android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked
SQLiteOpenHelper.java:223
12
android.database.sqlite.SQLiteOpenHelper.getWritableDatabase
SQLiteOpenHelper.java:163
13
com.scoreup.gson.DatabaseHandler.openDatabase
DatabaseHandler.java:35
14
com.scoreup.gson.DatabaseHandler.getQuizBots
DatabaseHandler.java:379
15
com.scoreup.activity.earn.fragments.EarnScreenBottomFragmentWinners.onCreateView
EarnScreenBottomFragmentWinners.java:66
16
android.app.Fragment.performCreateView
Fragment.java:2053
17
android.app.FragmentManagerImpl.moveToState
FragmentManager.java:894
18
android.app.FragmentManagerImpl.moveToState
FragmentManager.java:1067
19
android.app.BackStackRecord.run
BackStackRecord.java:834
20
android.app.FragmentManagerImpl.execPendingActions
FragmentManager.java:1452
21 …Run Code Online (Sandbox Code Playgroud) android-sqlite ×10
android ×6
sqlite ×6
sql ×4
database ×1
jdbc ×1
journaling ×1
sql-order-by ×1