Java 在SQLite中,如何基于3个值而不是一个值返回一行?(已完成1的代码)

Java 在SQLite中,如何基于3个值而不是一个值返回一行?(已完成1的代码),java,android,mysql,sql,sqlite,Java,Android,Mysql,Sql,Sqlite,在SQLite中,我可以在一个表中搜索一个特定的行,该行包含1个值,例如一个球员姓名,但我想返回一个基于3个值的行,例如球员姓名、球队名称和喜爱的颜色等 如何更改下面的代码来执行此操作? 基于一个值进行搜索的代码如下: public BackupDatastore getentry(String value, String columnName) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor =

在SQLite中,我可以在一个表中搜索一个特定的行,该行包含1个值,例如一个球员姓名,但我想返回一个基于3个值的行,例如球员姓名、球队名称和喜爱的颜色等

如何更改下面的代码来执行此操作?

基于一个值进行搜索的代码如下:

public BackupDatastore getentry(String value, String columnName) {

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_Name, 
                    new String[] { KEY_ID,
                                         KEY_Team_Name, 
                                 KEY_Ref_Name, 
                                 KEY_Date, 
                                 KEY_Player_1,
                                 KEY_Player_2,
                                 KEY_Player_3,
                                 KEY_Player_4,
                                 KEY_Player_5,
                                 KEY_Player_6,
                                 KEY_Player_7 ,
                                 KEY_Player_8},
                    columnName + "=?",
                            new String[] { value }, null, null, null, null);
    if (cursor != null)
{
        boolean move = cursor.moveToFirst();
    //false value means the query returned 0 results
    if(!move) 
    {
    return BackupDatastore.kEmptyData;
     }
}

    BackupDatastore entry = new BackupDatastore(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getString(7), cursor.getString(8),  cursor.getString(9), cursor.getString(10), cursor.getString(11));
    // return entry
    return entry;
}

您需要更改作为第3和第4个参数传递的内容—传递给WHERE子句的列名和值

例如,要跨3列进行筛选,您需要执行以下操作:

Cursor cursor = db.query(TABLE_Name, 
                new String[] { KEY_ID,
                                     KEY_Team_Name, 
                             KEY_Ref_Name, 
                             KEY_Date, 
                             KEY_Player_1,
                             KEY_Player_2,
                             KEY_Player_3,
                             KEY_Player_4,
                             KEY_Player_5,
                             KEY_Player_6,
                             KEY_Player_7 ,
                             KEY_Player_8},
                column1Name + "=? AND " +
                column2Name + "=? AND " +
                column3Name + "=? ",
                        new String[] { value1, value2, value3 }, null, null, null, null);
这将构建一个类似于
selectplayer1,Player2。。。来自TeamName,其中FirstName='X'和LastName='Y'以及TeamName='Z'

您可以使用可变长度的参数或传入字符串数组动态地构建它,而不是简单地定义一个将3列和3个值作为参数的方法,例如:

public BackupDatastore getentry(String[] values, String[] columns) {
    if (values.length != columns.length) {
        throw new IllegalArgumentException("Number of columns does not match number of values provided.");
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < columns.length; i++) {
        sb.append(columns[i]);
        sb.append("=?");
        if (i != columns.length - 1) {
            sb.append(" AND ");
        }
    }
    String whereColumns = sb.toString();

    Cursor cursor = db.query(TABLE_Name, 
                new String[] { KEY_ID,
                                     KEY_Team_Name, 
                             KEY_Ref_Name, 
                             KEY_Date, 
                             KEY_Player_1,
                             KEY_Player_2,
                             KEY_Player_3,
                             KEY_Player_4,
                             KEY_Player_5,
                             KEY_Player_6,
                             KEY_Player_7 ,
                             KEY_Player_8},
                whereColumns,
                values, null, null, null, null);
    ...
public backupdateastore getentry(字符串[]值,字符串[]列){
if(values.length!=columns.length){
抛出新的IllegalArgumentException(“列数与提供的值数不匹配”);
}
StringBuilder sb=新的StringBuilder();
for(int i=0;i
也许您可以使用arrayList并使用哈希映射在列表中临时添加值。然后通过listview或其他方式显示这些值。获取错误:类型SQLiteDatabase中的方法查询(String,String[],String,String,String,String)不适用于参数(String,String[],String,String,String,String,String,String[],null,null,null,null)是的,我最初的帖子在where过滤器的不同列之间有逗号,而不是加号,导致传递的是3个字符串而不是1。试试新代码,甚至试试我编写的新方法,它更通用。