标签: android-sqlite

如何使用SQLiteStatement将空值插入Sqlite

我试着保存到Sqlite Event

public class EventDao{

    private SQLiteStatement insertStatement;
    private SQLiteDatabase db;

    private static final String INSERT =
            "insert into " + EventsTable.TABLE_NAME + "(" + EventsColumns.WHO + ", "
                                                          + EventsColumns.WHAT
                                                          + ") values (?, ?)";

    public EventDao(SQLiteDatabase db) {
        this.db = db;
        Log.w(TAG, EventDao.INSERT);
        insertStatement = db.compileStatement(EventDao.INSERT);
    }

    public long save(Event type) {
        insertStatement.clearBindings();
        insertStatement.bindString(1, type.getmWho());
        insertStatement.bindString(2, type.getmWhat());

        return insertStatement.executeInsert();
    }
//...
}
Run Code Online (Sandbox Code Playgroud)

一切工作确定,当两者getmWho()并getmWhat()返回非null数值.但是当我尝试保存具有Who字段为空的事件(并因此getmWho()返回null)时,我收到错误

java.lang.IllegalArgumentException: the bind …
Run Code Online (Sandbox Code Playgroud)

android sql-insert android-sqlite

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

Sugar ORM中的独特列

是否可以创建Sugar ORM独有的列?或者是否可以插入或替换指定的行,例如用户名,但是这个用户名可能不在db中,因为他可能没有创建.

android android-sqlite sugarorm

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

Sqlite 按日期列排序

我在 sqlite 表中以 ISO8601 格式示例 2015-04-15T10:54:14Z 存储日期,我想要表中最年轻的日期。下面是我的sqlite表中的日期

2015-04-15T10:54:14Z 
2015-04-15T10:54:115Z
2015-04-15T10:54:216Z
2015-04-15T10:54:320Z
2015-04-15T10:54:422Z
Run Code Online (Sandbox Code Playgroud)

我正在尝试以下查询:

SELECT * FROM Table1 ORDER BY datetime("date_column") DESC ;
Run Code Online (Sandbox Code Playgroud)

但我没有得到适当的结果。

sqlite android android-sqlite

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

Xamarin Sqlite Insert 不返回最后一个主键 ID

我有一个简单的实体:

[Table("History")]
public class History
{
    [PrimaryKey, AutoIncrement, Column("_id")]
    public int Id { get; set; }

    [Indexed(Name = "IDX_History", Order = 1, Unique = true)]
    public int Prefix { get; set; }

    [Indexed(Name = "IDX_History", Order = 2, Unique = true)]
    public int Stem { get; set; }

    [Indexed(Name = "IDX_History", Order = 3, Unique = true)]
    public int Suffix { get; set; }

    [Indexed(Name = "IDX_Favourite")]
    public bool IsFavourite { get; set; }

    public DateTime LastViewed { get; set; …
Run Code Online (Sandbox Code Playgroud)

sqlite xamarin android-sqlite sqlite-net

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

SQLite:选择使用 LIKE '%?%' 和 rawQuery

我正在尝试使用 select 语句从数据库表中查询一些数据。当我输入=? 查询成功,但是当我使用LIKE %?%时,我在 logcat 中收到此错误:

FATAL EXCEPTION: main
Process: com.example.ahmed.bus_time_djerba4, PID: 4178
java.lang.IllegalArgumentException: Cannot bind argument at index 2 because the index is out of range.  The statement has 0 parameters.
Run Code Online (Sandbox Code Playgroud)

这是我调用数据库的方法:

public String  QuerySQL(String DepartStation,String Destination){

    String result="";

    SQLiteDatabase db=this.getReadableDatabase();
    Cursor c=db.rawQuery("select distinct * from "+TABLE_Name+" where "+Col_3+" LIKE '%?%' and "+Col_4+" LIKE '%?%'", new String[]{DepartStation,Destination});

    if(c.getCount()==0) {result="Data not found";c.close();}
    else {
        while (c.moveToNext()) {
            //affichage des lignes
            int ligne = c.getInt(1);
            String Station …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite

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

Room API - 如何检索最近插入的实体生成的 id?

我需要检索id最近插入的实体的生成值,如下面添加的代码示例所示:

如上所述,id实体的字段用Student注释PrimaryKey(autoGenerate= true)。

Student s = new Student();
s.setName("foo");
// call of other setters
appDatabase.getGenericDAO().insertStudent(s);
// Now I need to retrieve the value of generated id as we do in Hibernate by the usage of merge method
Integer id = s.getId(); 
Run Code Online (Sandbox Code Playgroud)

道

@Dao
public interface IGenericDAO {

    @Insert
    Long insertStudent(Student student);

    @Insert
    void insertOgrenci(List<Student> studentList);

    @Update
    void updateOgrenci(Ogrenci... ogrenci);

    @Delete
    void deleteOgrenci(Ogrenci... ogrenci); 

}
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite android-room

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

通过从 assert 复制数据库文件在 Room 中使用预先填充的数据库

我想在 Android Room 中使用预先填充的数据库。我找到了一种通过使用回调来实现它的方法,并填充了数据库文件。但是出了点问题,我确定数据库复制正常,但在设备监视器和android模拟器中它仍然为空。你能帮我么

public abstract class AppDatabase extends RoomDatabase {
private static AppDatabase INSTANCE;
private static final String DB_NAME = "base.db";
static Context ctx;

public abstract Dao dao();

public static AppDatabase getDatabase(Context context) {
    if (INSTANCE == null) {
        ctx = context;
        synchronized (AppDatabase.class) {
            if (INSTANCE == null) {
                INSTANCE = Room.databaseBuilder(context,
                        AppDatabase.class, DB_NAME)
                        .allowMainThreadQueries()
                        .addCallback(rdc)
                        .build();
            }
        }
    }
    return INSTANCE;
}

private static RoomDatabase.Callback rdc = new RoomDatabase.Callback() {
    public void onCreate(SupportSQLiteDatabase db) {

        new PopulateDbAsync(INSTANCE, …
Run Code Online (Sandbox Code Playgroud)

filestream populate android-sqlite android-room

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

E/SQLiteLog: (283) 从 WAL 文件中恢复的帧

每次启动应用程序时都会出现错误。

E/SQLiteLog: (283) recovered 22 frames from WAL file /data/data/com.dmitrysimakov.kilogram/databases/androidx.work.workdb-wal
Run Code Online (Sandbox Code Playgroud)

该应用程序工作正常,但我想知道为什么会出现此错误。database/androidx.work.workdb-wal 它是 Worker 的日志。我使用 Worker 来预填充我的数据库。

Room.databaseBuilder(app, KilogramDb::class.java, "kilogram.db")
            .addCallback(object : RoomDatabase.Callback() {
                override fun onCreate(db: SupportSQLiteDatabase) {
                    super.onCreate(db)
                    val request = OneTimeWorkRequestBuilder<SeedDatabaseWorker>().build()
                    WorkManager.getInstance().enqueue(request)
                }
            })
            .fallbackToDestructiveMigration()
            .build()
Run Code Online (Sandbox Code Playgroud)

android android-sqlite android-architecture-components android-workmanager

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

成功调用 .build() 后未调用 RoomDatabase.Callback() 的 onCreate()

我已经使用 Room Persisdent lib 创建了 MovieDatabase。根据 RoomDatabase.Callback 中 onCreate() 方法的文档,onCreate() 在第一次创建数据库后调用,所有表都创建完毕。

在我调用 buildPersistentDB() 之后发生的事情是,我收到了来自 MoviesDatabase 类的日志,该类用@Database 进行了注释,但是尽管我调用了 RoomDatabase.Callback 中来自 onCreate() 的日志,但从未调用过:

this.mMovieDatabase = this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
Run Code Online (Sandbox Code Playgroud)

我创建数据库的方式清楚地显示在 buildPersistentDB() 方法中。我还发布了 MovieDatabase 类,如下所示。

我想知道为什么我没有从 Room.Callback 中的 onCreate() 方法收到日志,尽管数据库已成功创建

代码_1:

public void buildPersistentDB() {
    Log.v(TAG_LOG, "->buildPersistentDB");
    this.mMovieDBPersistentBuilder = Room
            .databaseBuilder(getApplicationContext(), MovieDatabase.class, ActMain.DATA_BASE_NAME);

    this.mMovieDBPersistentBuilder.addCallback(new RoomDatabase.Callback() {
        @Override
        public void onCreate(@NonNull SupportSQLiteDatabase db) {
            super.onCreate(db);
            Log.v(TAG_LOG + "->onCreate", " buildPersistentDB->DB is created, all tables has been created");
            Log.d(TAG_LOG + "->onCreate", " buildPersistentDB->DB db.getPath(): " + db.getPath()); …
Run Code Online (Sandbox Code Playgroud)

android sqliteopenhelper android-sqlite android-room

3
推荐指数
2
解决办法
3411
查看次数

如何使用 Room 在 SQLite 中使用 DateTime 数据类型?

我正在使用带有多个表的 SQLite 数据库。其中许多都有 DATETIME 类型的列。

我已经开始将我的数据库迁移到 Room。但我不知道在实体类中使用什么数据类型来创建表中列的 DATETIME 类型。

sqlite android android-sqlite android-room

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