[英]Android SQLite Database check if query exists?
嗨,我仍然是Android和SQLite的新手。 我得到的活动可以向附加的db文件中添加查询。 问题是,我无法使用我的方法添加数据。 有没有简单的方法来检查查询是否存在?
这是我的数据库访问权限
public class DBAccess {
private SQLiteOpenHelper openHelper;
private SQLiteDatabase db;
private static DBAccess instance;
Cursor c = null;
private DBAccess(Context context)
{
this.openHelper = new DatabaseOpenHelper(context);
}
public static DBAccess getInstance(Context context)
{
if(instance==null)
{
instance=new DBAccess(context);
}
return instance;
}
public void open()
{
this.db = openHelper.getWritableDatabase();
}
public void close()
{
if(db!=null)
{
this.db.close();
}
}
public void tambah(String a,String b)
{
String query= ("insert into TabelAbjad (kata,arti) values('"+a+"','"+b+"')");
db.execSQL(query);
}
public boolean checkdata(String c, String d)
{
String s;
String query= ("select kata from TabelAbjad where kata = '"+c+"' AND kata = '"+d+"'");
db.execSQL(query);
return true;
}
这是当我尝试调用方法时
private void adddata()
{
DBAccess dbAccess = DBAccess.getInstance(getApplicationContext());
dbAccess.open();
String k = editkata.getText().toString().trim();
String a = editarti.getText().toString().trim();
if (dbAccess.checkdata(k,a))
{
Toast.makeText(this, "Data already exists",Toast.LENGTH_LONG).show();
dbAccess.close();
finish();
}
else
{
dbAccess.tambah(k,a);
dbAccess.close();
Toast.makeText(this, "Data Saved",Toast.LENGTH_LONG).show();
}
}
PS:我在按钮中调用方法
您在查询字符串中缺少分号(;)。 试试这个String query= ("select kata from TabelAbjad where kata = '"+c+"' AND kata = '"+d+"';");
对于所有查询字符串
您的问题是,表中的行将不存在,其中列kata的值c以及( AND
)值d都是不可能的,因为列只能有一个值,因此将不会提取任何行。
也许您想查找具有c OR
d的行
在这种情况下,您可以使用:-
String query= ("select kata from TabelAbjad where kata = '"+c+"' OR kata = '"+d+"'");
AND
已更改为OR
此外, execSQL
无法返回结果,如:-
执行一个不是SELECT的SQL语句或任何其他返回数据的SQL语句。 execSQL
因此,您需要使用rawQuery
方法或便捷query
方法,建议使用后者,除非它的局限性意味着无法使用它。 因此,您应该尝试使用类似(OR或AND假设)的东西:
public boolean checkdata(String c, String d)
boolean rv = false;
String whereargs = "kata=? OR kata=?"; // the WHERE clause less the WHERE keyword ? for the arguments (used on a 1 for 1 basis)
String[] whereargs = new String[]{c,d}; // The arguments that will be substituted into the SQL
String[] columns = new String[]{"kata"};
Cursor csr = db.query("TabelAbjad",columns,whereclause,whereargs,null,null,null);
if (csr.getCount() > 0) {
rv = true;
}
csr.close();
return rv;
}
getCount()
(它返回提取的行数,如果没有则返回0))。 有没有简单的方法来检查查询是否存在?
我相信您真正的意思是无论如何都要检查查询是否返回了任何结果。
如上所述, 查询通过游标 (如表,但根据查询返回数据),例如,上面的游标将由多行(0或更多)组成,并且具有名为kata的单列(即查询为SELECT **kata** FROM .....
)),因此您需要使用合适的方法。
您可以检查/访问众多方面/属性。 通常,您会在光标周围移动 (例如, while (your_cursor.moveToNext) {.... do things ....}
可用于遍历光标中的所有行时)。 游标 。
一旦适当地定位在行上,则可以使用get????(column_offset)
检索来自数据库的数据(其中column_offset是一个整数,其中0表示第一列,但是通常更明智的做法是检索使用getColumnIndex(column_name_as_a_string方法。)的实际偏移量
因此,假设您想将第一行中的数据(字符串)提取到游标csr中,则可以使用:-
if (csr.moveToFirst()) {
String mykata = csr.getString(csr.getColumnIndex("kata"));
}
csr.close(); // You should always close a cursor when done with it.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.