标签: android-sqlite

初始化一个sqlite数据库android

大家好,我对在 android 中开发非常陌生,我想向我的应用程序添加一个数据库。

问题是我不知道如何只初始化整个表一次。

我做了很多阅读,我发现你可以通过覆盖onCreate(SQLiteDatabase db)helper 类中的方法来做到这一点。

这些是我的数据字段和我的onCreate(SQLiteDatabase db)方法。

public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_EIGHTU = "8u";
public static final String KEY_NINEU = "9u";
public static final String KEY_TENU = "10u";
public static final String KEY_ELEVENU = "11u";
private static final String TAG = "DBAdapter"; 

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE);        
}
Run Code Online (Sandbox Code Playgroud)

但我不确定如何......有什么想法吗?

主要问题是我有多个要初始化的行。

android android-sqlite

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

使用CursorLoader和SimpleCursorAdapter的AutoCompleteTextView

我尝试使用db表的数据填充建议列表.但是我得到了StaleDataException.它会随机抛出,但总是在我将一个角色输入textview时.

这是我的代码:

CursorLoader扩展了Cristian的SimpleCursorLoader类

public class TagCursorLoader extends SimpleCursorLoader {

    private String mSelection;
    private TagDbLoader mDbLoader;

    public TagCursorLoader(Context context, TagDbLoader dBLoader, String selection) {
        super(context);
        this.mDbLoader = dBLoader;
        this.mSelection = selection;
    }

    @Override
    public Cursor loadInBackground() {
        return mDbLoader.fetchContainingString(mSelection);
    }

}
Run Code Online (Sandbox Code Playgroud)

Loader回调:

public class TagCursorLoaderCallback implements LoaderCallbacks<Cursor>, CursorToStringConverter {

    private Context mContext;
    private TagDbLoader mdDbLoader;
    private SimpleCursorAdapter mAdapter;
    private String mSelection;

    public TagCursorLoaderCallback(Context context, TagDbLoader dBLoader, SimpleCursorAdapter adapter) {
        this.mContext = context;
        this.mdDbLoader = dBLoader; …
Run Code Online (Sandbox Code Playgroud)

android simplecursoradapter android-cursor android-sqlite android-cursoradapter

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

Sqlite数据库无法删除对象,失败并显示消息"无法存储类型:<type>"

我正在尝试删除我存储在Sqlite数据库中的类型的记录.它失败了以下消息:

"Cannot store type: MyNamespace.PanelLog"
Run Code Online (Sandbox Code Playgroud)

我有以下方法来删除记录:

    public static int DeletePanelLog(int id)
    {
        return me.db.DeleteItem<PanelLog>(id);
    }
Run Code Online (Sandbox Code Playgroud)

其中DeleteItem定义为:

    public int DeleteItem<T>(int id) where T : IBusinessEntity, new()
    {
        lock (locker) {
#if NETFX_CORE
            return Delete(new T() { ID = id });
#else
            return Delete<T> (new T () { ID = id });
#endif
        }
    }
Run Code Online (Sandbox Code Playgroud)

PanelLog定义为:

public class PanelLog : IBusinessEntity
{
    public PanelLog(){}

    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }

    public uint Sequence { get; set; }
    public DateTime …
Run Code Online (Sandbox Code Playgroud)

sqlite system.data.sqlite xamarin android-sqlite

4
推荐指数
2
解决办法
3462
查看次数

从SQLite数据库Android SDK获取随机行

我想从我创建的数据库中获取一个随机行,但我无法弄清楚如何做到这一点.

我在StackOverflow上找到了几个问题和答案,我说应该使用它:

Cursor cursor = this.db.query("mainTable Order BY RANDOM() LIMIT 1",
            new String[] { "*" }, null, null, null, null, null);
Run Code Online (Sandbox Code Playgroud)

但是,我认为我有某种其他数据库,因为它返回错误,不知道方法'查询'.

这是我使用的数据库代码:

package com.example.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdapter{

    private static final String TAG = "DBAdapter";

    public static final String KEY_ROWID = "_id";
    public static final int COL_ROWID = 0;

    public static final String KEY_PIC = "picture";
    public static final String KEY_ANS = "answer";

    public static final int COL_PIC …
Run Code Online (Sandbox Code Playgroud)

database sqlite android android-sqlite

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

在Android SQLite中,直接使用Cursor比创建模型对象更节省内存?

在大多数Android示例代码中,从SQLite数据库填充ListView有两种方式,

  1. 预取数据,以列表-执行查询,对于每一行创建模型对象,然后将其添加到列表和关闭的光标,然后填充ListView控件与列表.

  2. 没有List和Model对象 -执行查询并按照Cursor使用moveToFirst,moveToLast,move,根据需要填充ListView.

现在我想知道,在Android中,上述哪种方法的内存效率更高?

android android-listview android-cursor android-sqlite android-memory

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

在android中更新和压缩sqlite数据库

我对 android 有点陌生,我正在研究一个曾经有 40 MB 的 sqlite 数据库的项目。现在我想把 sqlite 的 blob 数据放在 raw 文件夹中,所以我的数据库现在小于 1 MB。问题是在数据库路径(data/data/package name/databases)中,db文件大小还是和以前一样(我的手机root了,每次调试后都可以查看)。在数据库浏览器中,我们可以使用紧凑型数据库来减少删除一些表后的数据库大小。现在我该怎么办?任何帮助,将不胜感激。提前 tnx。

java database sqlite android android-sqlite

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

Android:将 FCM 通知保存到 Room DB

我正在使用 firebase FCM 来获取通知。我想要如果收到通知,它应该存储在我的 RoomDatabase 中。稍后,当用户打开应用程序时,将在通知部分显示所有通知。

我正在使用 MVVM,我试图通过ViewModel进行保存,但它不起作用。这是我目前的代码。

public class MessagingService extends FirebaseMessagingService {

    @Override
    public void onNewToken(String s) {
        super.onNewToken(s);
        Log.d("MessagingService", s);
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        // Check if message contains a notification payload.

        if (remoteMessage.getData().isEmpty()){
            showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
        } else {
            showNotification(remoteMessage.getData());
        }

    }

    private void showNotification(Map<String, String> data) {


        Bitmap bitmap;

        String title = data.get("title").toString();
        String body = data.get("body").toString();
        String imageUri = data.get("image").toString();
        String TrueOrFalse = data.get("AnotherActivity").toString();

        bitmap = getBitmapfromUrl(imageUri); …
Run Code Online (Sandbox Code Playgroud)

android android-sqlite firebase-cloud-messaging android-mvvm android-room

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

如果我只更改 DAO,而不更改实体,是否需要增加房间数据库版本号?

我只是想知道如果您仅更改数据访问对象(DAO) ,是否真的需要增加房间数据库版本号。

所以场景是:

  1. 我已经在 Play 商店中发布了版本 x 的应用程序
  2. 我只更改了一些 DAO 的一部分,而没有更改实体本身
  3. 我增加了应用程序版本代码和名称(可能不相关)

我需要增加房间数据库版本号吗?

android android-sqlite android-room

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

为什么 Android Room @Query LIKE 不返回已知存在的数据

我的问题:我不确定为什么这个 Android Room 查询没有返回结果。我以为我理解了正确的编码,而且看起来很简单。如果我使用 SQLiteStudio 将相同的查询直接传递到同一个数据库,我会得到结果。

调用代码(我硬编码字符串“truth”来测试它):

List<Integer> tableIDs = researchDatabase.getCommentsDao().customSearchCommentsTable("truth");
Run Code Online (Sandbox Code Playgroud)

DAO 代码(包含在 CommentsDao 中):

@Query("SELECT CommentID FROM Comments WHERE Comment LIKE :value")
List<Integer> customSearchCommentsTable(String value);
Run Code Online (Sandbox Code Playgroud)

我所做的:我是 Android Room 的新手,但我一直在使用 Android 开发人员 (developer.android.com) 的所有示例和课程,并在 stackoverflow 上审查和应用了许多与之密切相关的帖子,但我无法得到任何结果返回。当我单步执行代码时,实际的 Android Room 代码似乎没有将变量字符串绑定到语句,尽管我可以看到参数字符串被正确识别和传递,这不是我编写的代码,或者至少不是我从来没有看到带有变量数据的结果绑定字符串,我只看到了这个:

从评论中选择评论ID 在哪里评论喜欢?

我的目标是:这实际上是创建查询来处理与此类似的多个 LIKE 查询的第一步,我认为这需要 @RawQuery 设置。现在,我无法让简单的事情发挥作用。

@Query 包装器中发生了什么:我意识到我在这里可能很天真且错误,但在下面我可以看到参数和语句都被传递,但它看起来并不像“_statement.bindString”实际上绑定了“: value”('truth')到语句中并返回 0 个结果。

房间查询注释代码

java android-sqlite android-room

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

行太大,无法放入 CursorWindow requiredPos=0,totalRows=1;

我一直点击这个烦人的消息!

当数据完成插入本地数据库时,我看到了这条消息

JNI critical lock held for 30.083ms on Thread[27,tid=23883,Runnable,Thread*=0xce150a00,peer=0x12cc0190,"Sqflite"]
Run Code Online (Sandbox Code Playgroud)

如果我从表中选择数据,我会得到

W/CursorWindow(23809): Window is full: requested allocation 3095146 bytes, free space 2096696 bytes, window size 2097152 bytes
E/SQLiteQuery(23809): exception: Row too big to fit into CursorWindow requiredPos=0, totalRows=1; query: SELECT * FROM description_table;
I/flutter (23809): DatabaseException(Row too big to fit into CursorWindow requiredPos=0, totalRows=1) sql 'SELECT * FROM defect_description_table;' args []}
Run Code Online (Sandbox Code Playgroud)

我没有任何 blob 数据,都是字符串。那么为什么会发生这种情况呢?

这里是json结构

[{ "id": 1, "name": "Descriptions","data": [{..},{...} ... ]},{....},{....}]
Run Code Online (Sandbox Code Playgroud)

我认为问题出在数据列表上,因为它包含大量数据(有10298)?

解决这个问题的办法是什么?

我的插入方法

Future insertData(
      BuildContext context, …
Run Code Online (Sandbox Code Playgroud)

dart android-sqlite flutter flutter-moor

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