我想将Room与预先填充的数据库一起使用,但我无法理解如何告诉Room在哪里可以找到我的数据库.
我现在把它放进去src/main/assets/databases,当我为Room数据库创建实例时,我就是这样创建的:
Room.databaseBuilder(
getApplicationContext(),
AppDatabase.class,
"justintrain.db"
)
.allowMainThreadQueries()
.build();
Run Code Online (Sandbox Code Playgroud)
这样,我认为它每次创建一个新的数据库,或者不管怎样,它不使用预先填充的数据库.
我怎样才能找到我的数据库?
从文档中可以看出,插入或更新的语法是:INSERT OR REPLACE INTO <table> (<columns>) VALUES (<values>),我的问题是有没有合并以下的函数?
public long insert (String table, String nullColumnHack, ContentValues values)
public int update (String table, ContentValues values, String whereClause, String[] whereArgs)
Run Code Online (Sandbox Code Playgroud)
或者必须使用准备好的SQL语句和rawQuery来完成?
在Android中插入或更新的最佳做法是什么?
我正在创建任务管理器.我有任务列表,我希望当我点击特定的任务列表名称时,如果它为空,那么它继续添加任务活动,但如果它有2或3个任务,那么它会以列表形式向我显示这些任务.
我想在列表中计算.我的数据库查询如下:
public Cursor getTaskCount(long tasklist_Id) {
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor= db.rawQuery("SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?",
new String[] { String.valueOf(tasklist_Id) });
if(cursor!=null && cursor.getCount()!=0)
cursor.moveToNext();
return cursor;
}
Run Code Online (Sandbox Code Playgroud)
在我的活动中:
list_tasklistname.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0,
android.view.View v, int position, long id) {
db = new TodoTask_Database(getApplicationContext());
Cursor c = db.getTaskCount(id);
System.out.println(c.getCount());
if(c.getCount()>0) {
System.out.println(c);
Intent taskListID = new Intent(getApplicationContext(), AddTask_List.class);
task = adapter.getItem(position);
int taskList_id = …Run Code Online (Sandbox Code Playgroud) 去年,当我在他们的网站上检查SQLite时,建议的SQLite数据库大小为2千兆字节.但现在,我再也找不到这个建议了.
那么有没有人试图使用一个大于2千兆字节的SQLite数据库使用它的最新版本?SQLite的表现如何?
PS:我想创建一个移动应用程序,需要在本地工作的大数据库(例如存储维基百科文章).
我正在尝试制作我的第一款Android应用.我注意到,SQLiteOpenHelper.onCreate()如果数据库不存在,则不会调用该方法来创建表.但是,onCreate()即使我尝试调试,该方法也无法正常工作.
请查看下面的代码,并给我任何建议.任何帮助将不胜感激.
public class NameToPinyinActivity extends Activity {
DatabaseOpenHelper helper = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nametopinyin);
Button searchButton = (Button) findViewById(R.id.search);
searchButton.setOnClickListener(new ButtonClickListener());
helper = new DatabaseOpenHelper(NameToPinyinActivity.this);
}
public class DatabaseOpenHelper extends SQLiteOpenHelper {
/** DB Name */
private static final String DB_NAME = "pinyin";
/** CREATE TABLE SQL */
private static final String CREATE_TABLE_SQL = "CREATE TABLE UNICODE_PINYIN"
+ "(ID INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "UNICODE TEXT NOT NULL, PINYIN …Run Code Online (Sandbox Code Playgroud) 如何使用String[] selectionArgs的SQLiteDatabase.query()?我希望我可以把它设置为null,因为我没有用它.我只是尝试将数据库中的整个未排序表加载到Cursor.有关如何实现这一目标的任何建议?
我最近看到Google I/O Room Persistence Library上宣布的新功能与Android上的Sqlite数据库一起使用.我一直在寻找官方文档,我没有找到我应该导入到我的Android项目上的gradle文件的依赖项.有人可以帮个忙吗?
我有两个主要问题.
我的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, int newVersion) {
// on upgrade drop older tables
db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUOTES);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUOTES);
// create new …Run Code Online (Sandbox Code Playgroud) 我正在创建一个包含外键引用的表.我想知道所需的语法.大多数情况下,我见过以下内容(来自http://www.sqlite.org/foreignkeys.html#fk_basics):
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER,
FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
Run Code Online (Sandbox Code Playgroud)
但是,从同一个站点(http://www.sqlite.org/foreignkeys.html#fk_actions)我看到:
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE
);
Run Code Online (Sandbox Code Playgroud)
后一种语法更简洁,但我想知道结果是否有所不同(除了ON UPDATE CASCADE,当然有效果;我只包括它,因为我完全从引用的网站复制代码,因为我不知道上面的语法只在制作这样的规范时才适用).我在Android工作,如果重要的话.
我已经使用Android 5.0 Lollipop升级了我的Nexus 7,在此之前我的应用程序与SQLite数据库配合得很好但是现在每当我执行任何类型的查询时,它都会给我发送log cat错误,例如:
12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on area(server_id)
12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on account(area_id)
12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id)
12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id)
12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on area(server_id)
12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on account(area_id)
12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id)
12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id)
12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on …Run Code Online (Sandbox Code Playgroud)