SQL查询从Android中的特定列和行检索特定数据?

时间:2018-11-22 06:00:41

标签: android sql sqlite

我想获取链接到数据库中特定电子邮件的电话号码。我找不到该查询或查询方式

public String getContactNumber(String email){
            SQLiteDatabase db = this.getReadableDatabase();
            String query = "SELECT " + COLUMN_USER_MOBILE_NUMBER + " FROM " + TABLE_USER + " WHERE " + email +  " = " + COLUMN_USER_EMAIL;
            Cursor cursor = db.rawQuery(query,null);
            //What to put here to extract the data.

            String contact = cursor.getString(get); 
            cursor.close();
            return contact;
        }

提取数据。完全是初学者

3 个答案:

答案 0 :(得分:0)

试试这个..

panel_data.to_frame()

答案 1 :(得分:0)

public String getContactNumber(String email){
    String contact = "";
    SQLiteDatabase db = this.getReadableDatabase();
    String query = "SELECT " + COLUMN_USER_MOBILE_NUMBER + " FROM " + TABLE_USER + " WHERE " + email +  " = " + COLUMN_USER_EMAIL;
    Cursor cursor = db.rawQuery(query,null);

    if(cursor.getCount()>0) {
        cursor.moveToNext();
        contact = cursor.getString(cursor.getColumnIndex(COLUMN_USER_MOBILE_NUMBER)); 
    }
    //What to put here to extract the data.                             
    cursor.close();
    return contact;
}

通过这种方法,您可以轻松地通过任何其他方法来获取该电子邮件的电话号码值。

答案 2 :(得分:0)

我建议以下内容:-

public String getContactNumber(String email){
    String contact = "NO CONTACT FOUND"; //<<<<<<<<<< Default in case no row is found.
    SQLiteDatabase db = this.getWritableDatabase(); //<<<<<<<<<< Generally getReadable gets a writable database 
    String[] columns_to_get = new String[]{COLUMN_USER_MOBILE_NUMBER};
    String whereclause = COLUMN_USER_EMAIL + "=?";
    String[] whereargs = new String[]{email};
    Cursor cursor = db.query(TABLE_USER,columns_to_get,whereclause,whereargs,null,null,null);
    //What to put here to extract the data.
    if (cursor.moveToFirst()) {
        contact = csr.getString(csr.getColumnIndex(COLUMN_USER_MOBILE_NUMBER));
    }
    cursor.close();
    return contact;
}
  • 上面的确假设每封电子邮件只有1行(很可能)。

说明

设置了默认值,以便您可以轻松判断是否传递了无效/不存在的电子邮件(如果需要,您可以检查返回值(可能更容易简单地使用“”并以检查)。

getReadableDatabase 已替换为 getWritableDatabase ,因为除非数据库存在问题,否则将按照以下方式返回可写数据库:-

  

创建和/或打开数据库。这将是返回的相同对象   通过getWritableDatabase()进行操作,除非出现某些问题,例如磁盘已满,   要求数据库以只读方式打开。在这种情况下,   将返回只读数据库对象。如果问题已解决,则   将来对getWritableDatabase()的调用可能会成功,在这种情况下,   只读数据库对象将关闭,而读/写对象   将来会退货。   getReadableDatabase

  • 请注意,无论哪种方式都没有实际问题;

已使用推荐的 query 方法代替了 rawQuery 方法。这具有明显的优势,它可以构建基础SQL,还可以防止SQL注入(以防传递的电子邮件是由用户输入的情况)。

  • 此方法的版本采用7个参数:-
    • 表名作为字符串
    • 要提取为字符串数组(也称为字符串数组)的列。 可以是所有列。
    • where子句减去带有?的WHERE关键字来表示参数(请参见下一个)。 (如果没有WHERE子句)。
    • 要作为String数组应用的参数(将?的1替换为1)。 (如果没有或没有WHERE子句)。
    • GROUP BY子句,减去GROUP BY关键字。 ,如果没有GROUP BY子句。
    • HAVING子句,减去HAVING关键字。 (如果没有HAVING子句)。
    • ORDER BY子句,减去ORDER BY关键字。如果没有ORDER BY子句,则为 null

SQLiteDatabase - query -请注意,共有4种查询方法(有关细微差别,请参见链接,我相信这是最常用的方法)

数据提取是新代码。返回游标后,游标将位于第一行之前的位置,因此您需要移至有效行。因此, moveToFirst *方法很适合(请注意,如果通过move方法无法进行移动,则它将返回false,因此您可以说if (cursor.moveToFirst())。然后使用** getString 方法从相应的列中提取数据,该方法将int作为列偏移量的argumnet(在这种情况下为0)。但是,使用硬编码的值可能会导致问题,因此 getColumnIndex 方法用于根据列名获取偏移量(如果命名列不在Cursor中,则返回-1)。