Java 在SQLite中,如何基于3个值而不是一个值返回一行?(已完成1的代码)
在SQLite中,我可以在一个表中搜索一个特定的行,该行包含1个值,例如一个球员姓名,但我想返回一个基于3个值的行,例如球员姓名、球队名称和喜爱的颜色等 如何更改下面的代码来执行此操作? 基于一个值进行搜索的代码如下: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 =
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。试试新代码,甚至试试我编写的新方法,它更通用。