我创建了一个我在Android开发平台中使用的SQLite FTS3表(target2.2并且minVersion是8).例如,我创建了如下表:
create virtual table person using fts3(first,last);
Run Code Online (Sandbox Code Playgroud)
我知道当我将数据插入此表时,我long将返回,这是插入的记录的行ID.如何从此表中获取行ID?如果我执行:
select * from person
Run Code Online (Sandbox Code Playgroud)
我得到-1了Cursor.getColumnColumnIndex("rowid");.此外,Cursor.getColumnNames()仅显示两列('first'和'last')而不是'rowid'.关于如何解决这个问题的任何建议?
我正在尝试从我的资源文件夹中复制现有数据库并对其执行一些操作.一切正常,但我的模拟器的日志文件中出现以下错误:
sqlite returned: error code = 14, msg = cannot open file at source line 25467
09-06 11:23:41.844: INFO/Database(22560): sqlite returned: error code = 14, msg = cannot open file at source line 25467
09-06 11:23:41.885: ERROR/Database(22560): sqlite3_open_v2("/data/data/com.dhani.Lazy/databases/LazyDB.sqlite", &handle, 1, NULL) failed
09-06 11:23:41.885: WARN/System.err(22560): android.database.sqlite.SQLiteException: unable to open database file
09-06 11:23:41.894: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
09-06 11:23:41.904: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849)
09-06 11:23:41.914: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
09-06 11:23:41.914: WARN/System.err(22560): at com.dharani.LazyApple.Database.DataBaseHelper.checkDataBase(DataBaseHelper.java:72)
09-06 11:23:41.914: WARN/System.err(22560): at com.dharani.LazyApple.Database.DataBaseHelper.createDataBase(DataBaseHelper.java:47)
09-06 11:23:41.914: WARN/System.err(22560): …Run Code Online (Sandbox Code Playgroud) 我在SQLite DB中存储Calendar.getTimeInMilliseconds()中的日期.我需要在SELECT语句中按月标记第一行,因此我需要使用SQLite函数将时间(以毫秒为单位)转换为任何日期格式.我怎么能避免这个?
我开发了一个应用程序,我将数据库从assets文件夹复制到我的硬编码路径.所以日食给了我警告:
Do not hardcode "/data/"; use Context.getFilesDir().getPath() instead
Run Code Online (Sandbox Code Playgroud)
我在谷歌搜索并找到答案使用:
Context.getFilesDir().getPath();
Run Code Online (Sandbox Code Playgroud)
并且硬编码不适用于每个设备,有些可能会出错或无法正常工作.但通过实施上述我得到错误.
我的代码如下:
private final Context myContext;
Run Code Online (Sandbox Code Playgroud)
在这里得到警告
private static String DB_PATH = "/data/data/com.example.abc/databases/";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "exampledb.sqlite";
static SQLiteDatabase sqliteDataBase;
public DataBaseHelperClass(Context context) {
super(context, DATABASE_NAME, null ,DATABASE_VERSION);
this.myContext = context;
}
public void createDataBase() throws IOException{
boolean databaseExist = checkDataBase();
if(databaseExist){
this.getWritableDatabase();
}else{
this.getReadableDatabase();
copyDataBase();
}
}
public boolean checkDataBase(){
File databaseFile = new File(DB_PATH + DATABASE_NAME);
return databaseFile.exists(); …Run Code Online (Sandbox Code Playgroud) 我有一个databaseHandler.我需要计算表中的行数.应用程序因此错误而崩溃:android attempt to reopen an already-closed object sqlitedatabase.
我只是在活动中使用此代码:
db.getContactsCount();
Run Code Online (Sandbox Code Playgroud)
但应用程序崩溃了.另外我想重置表(删除表行).我添加了以下方法:
public void deleteTable() {
SQLiteDatabase db = this.getWritableDatabase();
db.delete("contacts", null, null);
}
Run Code Online (Sandbox Code Playgroud)
它运作良好,但我不能使用这个:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
// Create tables again
onCreate(db);
}
Run Code Online (Sandbox Code Playgroud)
这是databasehandler:
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private …Run Code Online (Sandbox Code Playgroud) 我正在尝试从Android中的Sqlite表加载所有项目,并希望订购结果.
如何指定返回光标的顺序?
我通过以下方式通过CursorLoader查询ContentProvider:
new CursorLoader(context, RepresentativeEntityContentProvider.CONTENT_URI, null, null,
null, null);
Run Code Online (Sandbox Code Playgroud) android android-contentprovider android-cursorloader android-sqlite
我无法弄清楚.query调用的语法.我需要选择与某个列匹配的所有记录,这些列对于第二个(不同的)列没有空值或空值
我最好的尝试:
Cursor cursor = mDatabase.query(DatabaseOpenHelper.TABLE_ROOMS, mAllColumns,
DatabaseOpenHelper.KEY_ROOM_HOSPITAL_ID
+ " =? AND " + DatabaseOpenHelper.KEY_ISO + " IS NOT NULL OR NOT ?",
new String[]{String.valueOf(hospitalId), ""}, null, null, null);
Run Code Online (Sandbox Code Playgroud)
这将返回所有记录.如果我使用AND代替OR,它返回与hospitalId匹配的记录,但忽略NOT NULL或NOT""部分.
有小费吗?我应该使用rawQuery调用吗?谢谢.
在 Android Q 中引入了新的Scoped 存储功能,它说:
默认情况下,面向 Android 10(API 级别 29)及更高版本的应用会获得对外部存储或范围存储的范围访问。此类应用程序只能访问外部存储上的应用程序特定目录,以及应用程序创建的特定类型的媒体。
我有我的应用程序,它在外部存储上创建 SQLite 数据库,这样当应用程序卸载数据库时,数据库仍然存在,以后可以用作恢复或在 Android 设备之外使用(假设在 PC 中)
我应该如何实现与 Android Q 相同的效果?更准确地说,如果数据库存储在外部公共目录中 - 如何使用标准读取此数据库SQLiteOpenHelper?
这些是我表中的ID:
KEY_ID(autoincremented integer primary key) KEY_NAME(text) KEY_PH_NO(text)
1 james 1234567890
2 kristein 6484996755
3 Roen 4668798989
4 Ashlie 6897980909
Run Code Online (Sandbox Code Playgroud)
我想知道的是,如何从这个表中获取单个记录unique(KEY_ID),因为我已经建立了getContact()这样的方法,
Contact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
// return contact
return contact;
}
Run Code Online (Sandbox Code Playgroud)
并且Contact是我为所有属性设置了所有getter和setter方法的类.
请帮助完整的代码.
我很困惑哪一个对Android的观点有好处Ormlite或者sqlite.请你能给我一个建议,哪个更适合使用我们的Android应用程序.并使易用和支持所有Android设备?我想在我们的项目中使用ormlite,但在此之前我想确定它对我和我的应用程序是否有用.如果有人在此之前使用过,请指导我.我非常感谢你的想法.Thnaks