标签: android-sqlite

在 Android Q 中替换 ContentResolver 查询中的“GROUP BY”(Android 10、API 29 更改)

我正在升级一些旧版本以针对 Android Q,当然此代码停止工作:

       String[] PROJECTION_BUCKET = {MediaStore.Images.ImageColumns.BUCKET_ID,
            MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
            MediaStore.Images.ImageColumns.DATE_TAKEN,
            MediaStore.Images.ImageColumns.DATA,
            "COUNT(" + MediaStore.Images.ImageColumns._ID + ") AS COUNT",
            MediaStore.Files.FileColumns.MEDIA_TYPE,
            MediaStore.MediaColumns._ID};

        String BUCKET_GROUP_BY = " 1) and " + BUCKET_WHERE.toString() + " GROUP BY 1,(2";

        cur = context.getContentResolver().query(images, PROJECTION_BUCKET,
            BUCKET_GROUP_BY, null, BUCKET_ORDER_BY);
Run Code Online (Sandbox Code Playgroud)

android.database.sqlite.SQLiteException:“GROUP”附近:语法错误(代码 1 SQLITE_ERROR[1])

这里它应该获取包含相册名称、日期、图片数量的图像列表 - 每个相册一张图像,因此我们可以创建相册选择器屏幕,而无需查询所有图片并循环遍历它以创建相册。

由于 SQL 查询停止工作,是否可以使用 contentResolver 对查询结果进行分组?

(我知道 ImageColumns.DATA 和“COUNT() AS COUNT”也被弃用,但这是一个关于 GROUP BY 的问题)

(有一种方法可以查询相册并单独查询照片,以获得相册封面的照片uri,但我想避免开销)

mediastore android-contentresolver android-sqlite android-10.0

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

如何在sqlite中添加特定数量的空行?

我有一个SQLite文件,我想添加2550 empty (NULL)行。

我可以使用此代码添加一个空行

INSERT INTO my_table DEFAULT VALUES
Run Code Online (Sandbox Code Playgroud)

但我需要 2550 行。有什么捷径吗?我不想执行相同的代码 2550 次。

sql sqlite sql-insert android-sqlite

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

为什么 Room 不从资产填充数据库?

我正在尝试assets使用 Room 的createFromAssets方法从文件夹中复制预填充的 SQLite 数据库。该数据库规模很大(一张表有约 370k 条目;总大小约为 18mb)。数据库被创建在databases,并且包含适用的表,但没有数据传输到表中。

我已经审查了以下问题,但尚未找到解决方案:

  1. 如何从资产预填充房间数据库?
  2. 房间:数据库未创建
  3. 如何从资产重新创建房间数据库?
  4. Android Room 库无法从资产复制数据库
  5. 房间:数据库未创建

我还查看了以下信息页面:

  1. 预填充您的 Room 数据库
  2. RoomDatabase.Builder
  3. 收拾房间:用这一种方法预先填充您的数据库
  4. Android 景观房间 - Java - Codelab

我尝试等待几分钟,看看数据库填充是否需要时间,但没有出现任何数据。我一直在使用 AS 的设备文件资源管理器从虚拟设备下载数据库,并在 SQLite 的 DB 浏览器中打开它,以及使用 AS 的数据库检查器。

此外,LogCat 始终显示以下内容(每次登录 MainActivity):

D/MainActivity:onCreate 第 1 个 10 个好词未找到

GoodWordsAndFrequency.db 结构:
表 1 -“bad_words”
第 1 列 -“word”,TEXT
表 2 -“english_words”
第 1 列 -“id”,INTEGER
第 2 列 -“word”,TEXT
第 3 列 -“频率”,INTEGER

应用程序 build.gradle 依赖项:

dependencies …
Run Code Online (Sandbox Code Playgroud)

java android-assets android-sqlite android-room

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

SQLite异常:Android中没有这样的列

我写了一个应用程序来更新SQlite Db中的行,下面是数据处理程序中更新的代码:

public long updatedata(String ID, String NAME,String NUMBER)
    {
        ContentValues content = new ContentValues();
        content.put(name, NAME);
        content.put(number,NUMBER);
        return db.update(table_name, content, "id "+"="+ID, null);

    }
Run Code Online (Sandbox Code Playgroud)

现在当我需要更新我在下面的代码中使用的行时:

Datahandler data =new Datahandler();
data.open();
long updateresult = data.updatedata(oldID, cloudnames.get(pos), cloudnumbers.get(pos));
data.close();
Run Code Online (Sandbox Code Playgroud)

还假设上面提供的值是存在且有效的,并且我确信我的数据库中存在id = jo_2,问题是当我运行代码时,异常如下所示:

02-19 23:59:34.200: E/SQLiteLog(18485): (1) no such column: jo_2
02-19 23:59:34.205: W/dalvikvm(18485): threadid=11: thread exiting with uncaught exception (group=0x41b30c08)
02-19 23:59:34.210: E/AndroidRuntime(18485): FATAL EXCEPTION: IntentService[test-service]
02-19 23:59:34.210: E/AndroidRuntime(18485): Process: com.kaizendroid.bc, PID: 18485
02-19 23:59:34.210: E/AndroidRuntime(18485): android.database.sqlite.SQLiteException: no such column: jo_2 …
Run Code Online (Sandbox Code Playgroud)

java sqlite android android-activity android-sqlite

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

为什么SQLite给出了无法在表上创建而不是触发器

有了这张桌子

create table FOLDER
(
    _ID integer primary key autoincrement,
    NAME text not null,
    PARENT integer not null,
    DELETED integer,
    constraint VALUEOF_folder_deleted check (DELETED == 1 or DELETED isnull) on conflict abort,
    unique (NAME, PARENT) on conflict abort
);
Run Code Online (Sandbox Code Playgroud)

我想替换存在NAME PARENT组合的插入,并将DELETED设置为1,并将替换设置为DELETED字段为null.

我试过这个触发器:

CREATE TRIGGER REPLACE_INS_folder instead of insert on FOLDER
when exists (select 1 from FOLDER where NAME == new.NAME and PARENT == new.PARENT and DELETED == 1)
begin
    update FOLDER set DELETED = null where NAME == new.NAME and …
Run Code Online (Sandbox Code Playgroud)

sqlite triggers android-sqlite

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

Andorid Studio SQLiteException:编译时语法错误(代码1)

我是这里的新手(以及一般编程人员),希望您能对此提供帮助。当我尝试启动该应用程序时,它只是“停止工作”。我在这里浏览了所有类似的问题,但无法解决。这是我的代码:

package com.example.me.mac_xyz;

     import android.content.Context;
     import android.database.sqlite.SQLiteDatabase;
     import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "mac.db";
public static final String TABLE_NAME = "1";
public static final String COL_1 = "NUMBER";
public static final String COL_2 = "MAC";
public static final String COL_3 = "X";
public static final String COL_4 = "Y";
public static final String COL_5 = "Z";

/* Constructor*/
public DatabaseHelper(Context context) { /*, String name,   SQLiteDatabase.CursorFactory factory, int version*/
    super(context, DATABASE_NAME, null, …
Run Code Online (Sandbox Code Playgroud)

android exception android-sqlite

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

无法在我的应用程序中删除SQLite数据库中的行

我需要从SQLite数据库中的表中删除一个特定的行.
该表包含文件路径.
我需要删除包含特定扩展名的路径.
而且我遇到了麻烦.
没有从我的数据库中删除任何内容.

例如,我的表名是ALL_PATHS,列名是PATH_NAME,这就是我这样做的方式.
我会很高兴得到任何帮助谢谢

private void deletePath(String extension){
    Database db = getWritableDatabase();
    String query = "DELETE FROM " + ALL_PATHS + " WHERE lower(" + PATH_NAME + ") LIKE '%" + extension + "'";
    Cursor cursor = db.rawQuery(query, null);
}
Run Code Online (Sandbox Code Playgroud)

java sqlite android android-sqlite

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

哪种方法更好地以编程方式创建数据库或从资产文件夹中复制它?

由于我们可以通过两种方式存储或复制数据库中的数据.一个来自sqlite文件,我们放在assets文件夹中,另一个来自以编程方式创建的数据库.

我有关于android中的sqlite数据库的以下问题:

1.从数据库执行select查询时执行速度更快,为什么?

2.每种方法的优点是什么?

我在互联网上发现但是我无法获得任何正确的信息,我通过Googling了解的唯一一件事就是从资产中复制数据对于像国家列表这样的静态数据更好(这很明显,因为你不会执行任何批量操作在android中插入数据.对此有任何帮助表示赞赏.:)

android android-sqlite

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

使用Room Persistance在运行时生成查询

我想在运行时生成的SQLite数据库上运行查询(而不是@Dao中的标准编译时查询)。例如,我可能想在SQLite数据库中搜索一个TEXT列,以查看它是否包含N长度列表中的所有单词。在原始SQLITE中,N为3的查询如下所示:

SELECT * FROM table 
WHERE textValue LIKE %queryTerm1% 
AND textValue LIKE %queryTerm2%"
AND textValue LIKE %queryTerm3%"
Run Code Online (Sandbox Code Playgroud)

我尝试生成并传递查询的结尾,而不只是传递变量。例如 :

String generatedQuery = "textValue LIKE %queryTerm1% AND textValue LIKE %queryTerm2% AND textValue LIKE %queryTerm3%";
tableDao.find(generatedQuery);
Run Code Online (Sandbox Code Playgroud)

并在@Dao中:

@Query("SELECT * FROM tableName WHERE :endQuery")
List<POJO> find(String endQuery);
Run Code Online (Sandbox Code Playgroud)

这似乎对我不起作用。您是否知道如何使用Room运行时生成的查询?

PS:

我已经调试了Dao实现,并查看了它正在运行的语句。这确认生成的查询信息和查询已正确传递。我认为这是SQL注入预防的问题(又是SQLITE问题,而不是Room问题) 在此处输入图片说明

java sqlite android android-sqlite android-room

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

拒绝权限:重新启动应用程序时打开提供程序com.android.providers.media.MediaDocumentsProvider

我有一个Android应用程序,允许用户如下选择个人资料照片:

public void pickImage(View view) {
    Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT);
    getIntent.setType("image/*");

    Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    pickIntent.setType("image/*");

    Intent chooserIntent = Intent.createChooser(getIntent, "Select Image");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {pickIntent});

    startActivityForResult(chooserIntent, 1);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Context context = getApplicationContext();
    if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
        if (data == null) {
            //Display an error
            return;
        }
        try {
            ImageView im = findViewById(R.id.circularImageView);
            uri = data.getData();
            im.setImageURI(uri);
            String image …
Run Code Online (Sandbox Code Playgroud)

java permissions android android-sqlite android-studio

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