我被卡住了.我无法找出我做错了什么,所以请帮助任何人.虽然这是一项非常简单的任务,但我不明白数据库的实际情况.
这是我用来将数据插入数据库中的表的代码:
EditText title = (EditText)findViewById(R.id.Title);
String Title = title.getText().toString();
EditText d = (EditText)findViewById(R.id.director);
String Director = d.getText().toString();
SQLiteDatabase db = openOrCreateDatabase("Films", MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS MyFilms (idFilm INTEGER PRIMARY KEY AUTOINCREMENT, Title VARCHAR, Director VARCHAR, Year INTEGER, Rating INTEGER);");
db.execSQL("INSERT INTO MyFilms (Title) VALUES('" + Title + "');");
db.execSQL("INSERT INTO MyFilms (Director) VALUES('" + Director + "');");
db.close();
Run Code Online (Sandbox Code Playgroud)
此代码是否给我列的表格idfilm,Title,Director,Year,Rating?如果是这样,当我尝试Title使用以下代码从列中检索所有标题时仍然存在问题:
SQLiteDatabase db = openOrCreateDatabase("Films", MODE_PRIVATE, …Run Code Online (Sandbox Code Playgroud) 当我打开我的RSS应用程序时,我想检查我的数据库中是否存在一篇文章.如果它存在,我想删除它(或忽略它),如果不在数据库中写入它.
我一直试图这样做:
Cursor cursor = ourDatabase.rawQuery("select 1 from "
+ DBHelper.DATABASE_TABLE + " where " + DBHelper.TITLE + "='"
+ title + "'" + " AND " + DBHelper.DATE + "='" + date + "'",
new String[] {});
if (cursor.moveToFirst()) {
boolean exists = (cursor.getCount() > 0);
cursor.close();
return exists;
} else {
return false; }
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
06-06 16:01:11.341: E/AndroidRuntime(13867): Caused by: android.database.sqlite.SQLiteException: near "???": syntax error (code 1): , while compiling: select 1 from all_t where title='? ????? …Run Code Online (Sandbox Code Playgroud) 我需要检索与列表中存储的ID匹配的记录.在运行时生成的查询很简单:
SELECT [whatever FROM sometable] WHERE (id = 1) or (id = 5) or (id = 33).
Run Code Online (Sandbox Code Playgroud)
这相当于
SELECT [whatever FROM sometable] WHERE [id] IN (1, 5, 33);
Run Code Online (Sandbox Code Playgroud)
这很好,但如果列表包含数百或数千个ID怎么办?声明将是巨大的,并且在某些时候SQL解析器可能会呱呱叫,或者如果它没有,性能可能会非常糟糕.如何以对检索的记录数量不那么敏感的方式执行此操作?
(我不能只循环遍历列表并逐个检索记录的原因是我需要数据库为我做ORDER BY.记录必须来自特定字段排序的数据库,而列表表示由网格中的用户可以通过多种方式进行排序.是的,我可以在检索后对代码中的记录进行排序,但这是计划B,因为我甚至不需要将它们全部保存在一个数据结构中,只是为了正确订购.)
我遇到了SQL查询的问题.问题是我正在查询企业名称的外部数据库,有些名称就像"Martha's"(包括撇号).因为我从一个Android应用程序查询,查询字符串看起来像:
String query = "Select * from Advertiser where AdvName= '" + name + "';";
Run Code Online (Sandbox Code Playgroud)
那么无论如何我可以忽略或更改查询中的撇号?
提前致谢!
我有一个插入语句,我的应用程序需要大约 25 秒才能插入 ~1000 行。我试图用它Transactions来加快我的处理时间,但我在实现它时遇到了麻烦。
下面是我的方法inserting在我的DatabaseHandler:
public boolean insertQuestions(String gid, String qid, String qname) {
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
try {
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_GID, gid);
contentValues.put(KEY_QID, qid);
contentValues.put(KEY_QNAME, qname);
long result = db.insert(TABLE_QUESTIONS, null, contentValues);
db.setTransactionSuccessful();
if (result == -1) {
db.close();
return false;
} else {
db.close();
return true;
}
} finally {
db.endTransaction(); //Error is here
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行上述方法时出现以下错误:
08-28 15:50:40.961 20539-20539/? E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.murrion.navigationdrawer, …Run Code Online (Sandbox Code Playgroud)