标签: android-sqlite

Android在Play商店推送更新

我有一个依赖于SQLite的应用程序,数据由资源文件夹中的应用程序随附的xmls填充.

  1. 第一次设置共享首选项config_run = false时运行应用程序.
  2. 然后我检查是否config_run = false然后解析xml并将数据转储到db
  3. 设置config_run = true

现在我意识到,当我必须在Google Play上推送更新并在XML中添加更多内容时.即使我将数据库版本从1更改为2.导入脚本也不会运行,因为共享首选项config_run值将设置为true.

有关如何处理这种情况的任何指示?

方案

  1. 第一次安装 - Ver = 1,DB V = 1(数据被解析并转储到数据库中)
  2. 错误修复,推送和更新但没有数据发生变化 - ver = 1.1,DB V = 1(它应该只替换代码而不是升级或重新创建数据库)
  3. 升级了DATA并推送了一个新的更新 - 版本1.2,DB = 2(没有新代码,但必须重新创建数据)

我的应用流程

  1. 该应用程序启动启动活动.如果Shared Pref - config_run等于false,则它会启动Progress Dialog并将数据解析并转储到数据库中.
  2. 在解析和创建数据库并转储数据后,它将转到MainActivity.

第二个案例

  1. SplashActivity运行和config_run = true因此直接转到MAin活动.

正如以下几个人所建议的那样,如果我尝试在SQLiteHelper的onUpgrade中将数据变为数据库,那么它将仅在MAinActivity中发生,因为我在SplashActivity中不打开Db连接并且也不会显示Dialog Progress.

android sharedpreferences sqliteopenhelper android-sqlite

10
推荐指数
3
解决办法
709
查看次数

在SQLite数据库android中插入

我是Android上的新手.我在数据库中的insert语句有些问题,当我运行应用程序时,尚未插入值.请有人帮忙..

public class DatabaseAdapter extends SQLiteOpenHelper {
// Database attributes
public static final String DB_NAME = "MoneyManagerSystemTr";
public static final int DB_VERSION = 1;

// Table attributes

public static final String TABLE_ACCOUNT = "account_table";

//Account Table
public static final String KEY_BANKNAME ="bankname";
public static final String KEY_TYPE = "type";
public static final String KEY_ACCNUM = "accnum";
public static final String KEY_BALANCE = "balance";
public static final String KEY_EXPIRYDATE = "expirydate";

@Override
public void onCreate(SQLiteDatabase db) {


    String AccountTable = "create …
Run Code Online (Sandbox Code Playgroud)

android insert android-sqlite

9
推荐指数
3
解决办法
5万
查看次数

将数据保存在activity的onDestroy方法中

我正在编写一个任务列表并拥有Project对象,它包含所有任务(和元数据).我使用操作日志,因此当任务更改时我不会立即将其保存到数据库,只需将其保存在内存中以在活动结束时转储到数据库中.Activity的onDestroy方法是最好的地方:如果没有调用onRetainNonConfigurationInstance方法,我启动服务来保存项目(一个实例存储在Application中).节省成本:在DB项目中有修改,所以我保存新数据,更改当前版本并删除以前版本的数据.所以我不害怕突然申请停止.

但是,根据我必须的文件do not count on this method being called as a place for saving data.

有没有其他地方可以保存我的数据?

android android-service ondestroy android-sqlite

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

SQLiteException:表已经存在

我在我的数据库中添加了名为"MEDIA_TABLE"的表,我收到以下错误代码:

05-15 20:56:22.976: E/AndroidRuntime(5968): android.database.sqlite.SQLiteException: table personal_stats already exists (code 1): , while compiling: CREATE TABLE personal_stats (_id INTEGER PRIMARY KEY AUTOINCREMENT, pictures TEXT, videos TEXT);
Run Code Online (Sandbox Code Playgroud)

我的第二张桌很好用.

我试图卸载我的应用程序并安装它,它不会工作,也许在DB中有一个表的限制?

这是我的onCreate代码:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + " (" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_DATE + " TEXT, " +
            COLUMN_EXERCISE + " TEXT, " +
            COLUMN_WEIGHT + " TEXT, " +
            COLUMN_REPS + " TEXT, " +
            COLUMN_SET_TIME + " …
Run Code Online (Sandbox Code Playgroud)

java sqlite android android-sqlite

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

如何将来自两个单独表的数据合并为一个Cursor?

目前,我有一个帖子表和一个用户表.当然,每个用户可以与多个帖子相关联.post表中的每一行都存储创建帖子的用户的用户ID.以下是示例行:

发布行:post_id标题user_id

用户行:user_id user_name

我想通过将post表中的用户ID与user表中的用户ID匹配来返回包含post行及其相应用户行的Cursor.我将使用什么类型的查询来实现此目的?结果应该是:

合并行:post_id标题user_id user_name

更一般地说:如何将基于共享数据的两个独立表中的数据组合到一个Cursor中?

sqlite android android-sqlite

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

将Green DAO与内容提供商一起使用

我打算GreenDAO在我的项目中使用.我已经通过创建测试项目来测试它.但是,我有几个要求,我需要完成.

  1. 我的应用程序的数据库将被加密.为此,我们计划使用SQLCipher.我找到了这个链接.我正在研究它,但有兴趣知道原始的GreenDAO项目有什么可用.

  2. 由于我的应用程序将数据与服务器同步,我将使用SyncAdapter,因为我不想自己完成所有的重量级操作,这已经由Android框架完成.但它需要Content Provider合作.那么,我如何使用GreenDAO Content Provider.

更新2

我的项目有七个实体.我用过addContentProvider()实体.并生成七个不同的内容提供商.有没有办法在单个内容提供商中拥有所有sqlite表?

database orm android android-sqlite greendao

9
推荐指数
1
解决办法
4256
查看次数

SQLite数据到RecyclerView

该应用程序包含SQLite数据库中的数据.UI主要是RecyclerView.问题是如何最好地将数据从数据库传输到UI,同时避开主线程?

我原计划使用CursorLoader,ContentProvider和RecyclerView.但阅读它看起来像RecyclerView没有对Cursor提供的数据的开箱即用支持.荡.

那给我留下了一些其他选择......

  1. AsyncTask加载数据,将其放入模型对象,并传递到RecyclerView适配器.除了丑陋之外,它不是配置改变友好的.

  2. 一个自定义Loader,它从SQL加载数据并将其推送到模型对象中.

  3. 使用Cursor加载器,当它返回Cursor迭代它时将数据推送到模型对象.我怀疑这会发生在主线程上,可能会损害性能.

  4. 使用Otto发送请求数据的请求消息,然后通过返回消息返回模型对象集合.可能有大约500个物体,所以我想我可能宁愿滥用奥托这样做.

如果我使用的是模型对象的集合而不是Cursor我看到ContentProvider的好处较少,而且我也失去了UI在数据更改时自动刷新的能力(这可能很有用).

这些选项都没有吸引力,有没有更好的方法?该应用程序在时间压力下,所以无论它需要相当快速实施.不幸的是,UI需要水平滚动并且只针对Lollipop,所以RecyclerView似乎比ListView更好.

android android-contentprovider android-cursorloader android-sqlite android-recyclerview

9
推荐指数
1
解决办法
7669
查看次数

尝试查询列时删除了无效列

我试图在我的Android应用程序中执行以下查询:

private static final String[] PROJECTION =
            {
                    Data.CONTACT_ID, Data.MIMETYPE,
                    Data.DISPLAY_NAME, Phone.NUMBER,
                    Phone.TYPE, StructuredName.GIVEN_NAME,
                    StructuredName.MIDDLE_NAME,
                    StructuredName.FAMILY_NAME,
                    Data.DELETED
            };


private static final String SELECTION = "(" + Data.MIMETYPE + " = ? AND "
        + Phone.TYPE + " IN (?,?,?)) OR ("
        + Data.MIMETYPE + " IN (?))";


private static final String[] SELECTION_ARGS =
        {
                Phone.CONTENT_ITEM_TYPE,
                String.valueOf(Phone.TYPE_MOBILE),
                String.valueOf(Phone.TYPE_HOME),
                String.valueOf(Phone.TYPE_WORK),
                StructuredName.CONTENT_ITEM_TYPE
        };
final Cursor cursor = mContext.getContentResolver().query(
                Data.CONTENT_URI, PROJECTION, SELECTION, SELECTION_ARGS, Data.CONTACT_ID);
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

04-29 11:00:58.715  8588 15565 E DatabaseUtils: Writing exception to …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite

9
推荐指数
1
解决办法
333
查看次数

会议室数据库迁移失败:ALTER TABLE添加多个列

我通过提供从3到4的迁移将数据库从版本3升级到版本4。

这是我的迁移代码:

private static Migration MIGRATION_3_4 = new Migration(3, 4) {
    @Override
    public void migrate(@NonNull SupportSQLiteDatabase database) {
      database.execSQL("ALTER TABLE caption_table ADD COLUMN localVideoUrl TEXT;");
      database.execSQL("ALTER TABLE caption_table ADD COLUMN postType TEXT");
      database.execSQL("ALTER TABLE caption_table ADD COLUMN videoUrl TEXT");
    }
};
Run Code Online (Sandbox Code Playgroud)

这是创建会议室数据库的代码

this.mAppDataBase = Room.databaseBuilder(getApplicationContext(), AppDataBase.class, "my_db")
                        .addMigrations(MIGRATION_2_3, MIGRATION_3_4)
                        .build();
Run Code Online (Sandbox Code Playgroud)

这是我在PostModel上添加的代码

@Expose
private String postType;

@Expose
private String videoUrl;

@Expose
private String localVideoUrl;

public String getPostType() {
    return postType;
}

public void setPostType(String postType) {
    this.postType = postType;
}

public …
Run Code Online (Sandbox Code Playgroud)

sqlite android-sqlite android-room

9
推荐指数
1
解决办法
887
查看次数

测试 Room AutoMigrations 时,我应该向 runMigrationsAndValidate 传递什么?

使用Room AutoMigrations时,它Migration本身会自动生成。但为了对迁移进行单元测试,我必须将一个Migration对象传递给runMigrationsAndValidate. 我应该在这里传递什么?

@RunWith(AndroidJUnit4::class)
class MigrationTest {
    private val TEST_DB = "migration-test"

    @Rule
    val helper: MigrationTestHelper = MigrationTestHelper(
            InstrumentationRegistry.getInstrumentation(),
            MigrationDb::class.java.canonicalName,
            FrameworkSQLiteOpenHelperFactory()
    )

    @Test
    @Throws(IOException::class)
    fun migrate1To2() {
        var db = helper.createDatabase(TEST_DB, 1).apply {
            // db has schema version 1. insert some data using SQL queries.
            execSQL(...)

            // Prepare for the next version.
            close()
        }

        // Re-open the database with version 2 and provide
        // Migration as the migration process.
        db …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-sqlite android-room

9
推荐指数
1
解决办法
1401
查看次数