标签: android-sqlite

Android在手机上浏览SQLite数据库

如何在Android myTouch手机上浏览我在应用程序中创建的SQLite数据库?

当我通过adb shell登录时,sqlite3给了我一个拒绝的权限.是否有另一种方法来检查我的数据库和表是否实际被创建,以及是否正在插入行?

我无法使用模拟器,因为它不能很好地播放视频等,这是我的应用程序的主要功能,所以我只能在手机上测试.

database sqlite android android-sqlite

6
推荐指数
1
解决办法
7363
查看次数

"SQLiteDiskIOException:错误代码10:磁盘I/O错误"在DROP TABLE上的ICS和Samsung Nexus上重新调整

我收到以下错误:

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卡.有关如何解决这个问题的任何建议?

android android-sqlite

6
推荐指数
1
解决办法
3658
查看次数

如何用android中的新数据库文件替换现有的sqlite数据库文件

我在做一个使用sqlite数据库的应用程序我的应用程序中有一个功能,它有一个"更新数据库"按钮.

当用户单击"更新数据库"按钮时,我需要使用URL中的新db文件升级旧的db文件.

这该怎么做.研究告诉我,我们无法更改数据库,因为它在.apk文件中.对此有什么解决方案吗?请帮帮我.谢谢.

sqlite android android-sqlite

6
推荐指数
2
解决办法
1万
查看次数

SQL:按优先级排序,但最后输入0

我有一个名为"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组成了一个很好的默认值,我会尽量保留.

sql sqlite sql-order-by android-sqlite

6
推荐指数
2
解决办法
5973
查看次数

SQLiteQueryBuilder中的selectionArgs不适用于列中的整数值

我正在尝试从数据库中选择一些数据,我有两片代码来做:

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 …

sql sqlite android android-sqlite

6
推荐指数
2
解决办法
5503
查看次数

SQL中是否需要分号?

如果我忘了它,它有时会起作用;.但有时却没有.

在JDBC和Android SQLite中,似乎我根本不需要;.我很迷惑.

我什么时候应该使用分号?

sql jdbc android-sqlite

6
推荐指数
1
解决办法
7323
查看次数

在SQLite UPDATE中模拟ORDER BY以处理唯一性约束

我在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)

sql sqlite android-sqlite

6
推荐指数
1
解决办法
1246
查看次数

检查SQLite是否正在使用journal_mode = WAL或journal_mode = DELETE的函数

我正在寻找可以帮助我查看启用哪种日志记录模式的函数。.我也在这里查找 了函数列表有用于检查数据库状态sqlite3_db_status(....)的函数,但status参数没有用于检查日志记录的选项模式 有没有功能或任何方法可以找到sqlite db是使用WAL模式还是普通日志模式.. !!


sqlite journaling android-sqlite

6
推荐指数
1
解决办法
3586
查看次数

chmod失败:android中的EPERM(不允许操作)?

我想在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 android-sqlite

6
推荐指数
1
解决办法
2万
查看次数

无法将db'/data/data/com.scoreup/databases/scoreUp'的语言环境更改为'en_GB'

我最近更新了我的一个应用程序,在极少数情况下我得到了上述错误.仅当用户尝试通过现有应用程序更新应用程序时,才会出现此错误.这不会发生在每次和每台设备上.我在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 android-sqlite android-database

6
推荐指数
0
解决办法
704
查看次数