簡體   English   中英

Android SQLite數據庫檢查查詢是否存在?

[英]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;
}
  • 盡管這看起來似乎更復雜,但是它在構建底層SQL時具有優勢,它可以防止SQL注入,並且可以正確地包圍/轉義(將值括在單引號中)等值)
  • 您將數據(行)檢索到游標中(在這種情況下,您只想知道是否有任何行符合給定條件,因此使用了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM