Articles of SQLite

Android Room Persistence Library:Upsert

Android的Room持久性库慷慨地包含适用于对象或集合的@Insert和@Update注释。 然而,我有一个用例(包含模型的推送通知)需要UPSERT,因为数据可能存在或可能不存在于数据库中。 Sqlite本身没有upsert,并且在这个SO问题中描述了变通方法。 鉴于那里的解决方案,如何将它们应用于房间? 更具体地说,如何在Room中实现不会破坏任何外键约束的插入或更新? 使用带onConflict = REPLACE的insert将导致onDelete调用该行的任何外键。 在我的情况下,onDelete导致级联,并重新插入一行将导致其他表中的行与外键被删除。 这不是预期的行为。

在SQLite For Android中查询列的最大值

我创建了一个数据库,并提交了数据。 有一列我想find最大的价值。 这是我的数据库适配器中使用的方法: public Cursor getBiggestInTheColumn() { return db.query(DATABASE_TABLE, null, “MAX(price)”, null, null, null, null); } 它应该工作,但当我调用方法时: cursor = dbadp.getBiggestInTheColumn(); 我得到像这样的运行时错误(LogCat): 07-14 12:38:51.852:ERROR / AndroidRuntime(276):引起:android.database.sqlite.SQLiteException:滥用聚合函数MAX():,同时编译:SELECT * FROM花费WHERE MAX(价格) 有任何想法吗? 我怀疑这是由于查询错误,但这是我能想到的最好的。 其他查询运作良好。

为什么要在Android中使用sqlite数据库?

为什么我们在android中使用sqlite数据库。我正在开发一个Android应用程序,其中数据将从服务器获取并进行一些数据计算并在UI上显示。 我是否有兴趣将数据提取到sqlite数据库并在20分钟内从sqlite定期更新UI,或者将Http get请求发送到服务器并更新数据来自更新UI。 我想知道哪一个更好,为什么?为什么要涉及sqlite DB? 数据对应于一些40X40表数据,其中要进行一些重要的数学处理,然后在UI上显示(类似于股票市场应用程序),并且每12小时后需要清除数据。 PLZ建议Rgds,劳尔

尝试写一个只读数据库…但我不是

我有一个只读数据库连接。 有时,当使用SELECT查询从数据库读取数据时,它会抛出SQLiteReadOnlyDatabaseException 。 我这样打开连接: return SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY); 查询是: Select * FROM BudgetVersions WHERE entityId = ? 我使用db.rawQuery()从数据库中读取数据,如下所示: String query = …; Cursor c = db.rawQuery(query, new String[]{ activeBudgetId }); try { if (c.moveToFirst()) { bv.versionName = c.getString(c.getColumnIndexOrThrow(“versionName”)); return bv; } else { return null; } } finally { c.close(); } 很少,我在调用c.moveToFirst()遇到这样的崩溃: Caused by: android.database.sqlite.SQLiteReadOnlyDatabaseException: […]

为什么ContentValues有一个支持Boolean的put方法?

ContentValues类包含一个允许将布尔值放入值集合的方法。 AFAIK,SQLite不包含Android可以将布尔值推入的本机布尔格式。 那么,Android在幕后存储这些值的魔力是什么? 另外,为什么Cursor上没有免费的getBoolean方法? 对我来说,这似乎是一个非常尴尬的设计疏忽,因为似乎没有“安全”的方法来检索通过ContentValues放入DB的布尔值。 我错过了什么? 这个问题可能看起来有点无聊,因为我怀疑布尔值存储为1或0整数,但为什么Android会向开发人员提出这个假设呢? 据我所知,它甚至都没有记录。

如何在Android中访问现有的sqlite数据库?

到目前为止,我们已经在android中开发了在运行时创建数据库的应用 我们想知道如何在Android应用程序中访问预构建或现有的数据库/ sqlite文件? 请提供详细信息

查询在SQLite中获取基于Radius的记录?

我有这个查询,它在MySQL中运行良好 SELECT ((ACOS(SIN(12.345 * PI() / 180) * SIN(lat * PI() / 180) + COS(12.345 * PI() / 180) * COS(lat * PI() / 180) * COS((67.89 – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344) AS distance, poi.* FROM poi WHERE lang=’eng’ HAVING distance<='30' 距离以公里为单位,输入为lat=12.345 , lon=67.89 […]

SQLite添加列,保留数据

我有一个包含4列的数据库: @Override public void onCreate(SQLiteDatabase database) { database.execSQL(“CREATE TABLE ” + DATABASENAME + ” (name TEXT, latitude REAL, longitude REAL, country TEXT);”); } 现在我想添加另一列,但保留已存在于数据库中的行。 我该怎么做? 我找不到任何有用的参考资料。 @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { //What to do here? } 编辑 我已将onCreate修改为: @Override public void onCreate(SQLiteDatabase database) { database.execSQL(“CREATE TABLE ” + DATABASENAME + […]

将.csv文件导入Android中的Sqlite

我有一个.csv文件,我想将这个文件导入到android中的数据库中。 例如,.csv文件: | id | name | dt1 | dt2 | dt3 | | 1 | Paul | 21 | 98 | 91 | | 2 | John | 22 | 44 | 11 | | 3 | George| 21 | 31 | 22 | | 4 | Ringo | 20 | 10 | 15 […]

卸载Android应用程序时,数据库不会删除

我有两个主要问题。 卸载应用程序时,数据库不会删除。 在应用程序不稳定时,下载的文件不会被删除。 我的android应用程序中有一个数据库。 我用java创建它 class as follows. public DataBaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); } @Override public void onCreate(SQLiteDatabase db) { // creating required tables db.execSQL(CREATE_TABLE_QUOTES); db.execSQL(CREATE_TABLE_FILTERS); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, […]