如何根据给定的两个条件检索数据?
How to retrieve data based on two conditions given?
在 MainActivity 中,我希望 listView
显示特定月份的数据。
public void BuildList()
{
sqlcon.open(); // object of InfoAPI
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH)+1;
Toast.makeText(getApplicationContext(),month+"",Toast.LENGTH_LONG).show();
Cursor cursor1=sqlcon.readData(month);
String[] columns=new String[]{
MyDatabaseHelper.Date,MyDatabaseHelper.TimeIn_Info,MyDatabaseHelper.TimeOut_Info
};
int[] to=new int[]
{
R.id.date,R.id.timeIn,R.id.timeOut
};
dataAdapter = new SimpleCursorAdapter(this, R.layout.retrieve_data,
cursor1,
columns,
to,
0);
dataAdapter.setViewBinder(new ViewBinder());
listView.setAdapter(dataAdapter);
}
}
InfoAPI
public Cursor readData(int m)
{
Cursor c=database.rawQuery(" SELECT _id, Date,Weather,Status, TimeIn_Info, TimeOut_Info FROM " + MyDatabaseHelper.TABLE_INFO +
" WHERE Name = ? and strftime('%m',Date)= ?",
new String[]{"LCV"}, new String[]{String.valueOf(m)},null);
if (c != null) {
c.moveToFirst();
}
return c;
}
错误
Error:(54, 26) error: no suitable method found for rawQuery(String,String[],String[],<null>)
method SQLiteDatabase.rawQuery(String,String[]) is not applicable
(actual and formal argument lists differ in length)
method SQLiteDatabase.rawQuery(String,String[],CancellationSignal) is not applicable
(actual and formal argument lists differ in length)
Error:(106, 30) error: method readData in class InfoAPI cannot be applied to given types;
required: int
found: no arguments
reason: actual and formal argument lists differ in length
我对 rawQuery 有点困惑。为了根据两个条件检索数据,正确的写法是什么?
已编辑
public Cursor readData(int m)
{
Cursor c=database.rawQuery(" SELECT _id, Date,Weather,Status, TimeIn_Info, TimeOut_Info FROM " + MyDatabaseHelper.TABLE_INFO +
" WHERE Name = ? and strftime('%m',Date)= ?",
new String[]{ "LCV", String.valueOf(m) }, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
对于日期列,它包含日期格式 19-12-2015
。现在没有错误,但 ListView 上没有数据显示。
没有使用两个单独 String[]
的 rawQuery 方法。正如错误所指出的
no suitable method found for rawQuery(String,String[],String[],<null>)
而不是像这样查询
rawQuery(query, new String[]{"LCV"}, new String[]{String.valueOf(m)},null);
改用它,WHERE 语句的列在同一个 String[]
rawQuery(query, new String[]{ "LCV", String.valueOf(m) }, null);
或者甚至只是这样,因为你不需要末尾的 null
rawQuery(query, new String[]{ "LCV", String.valueOf(m) });
并且由于您查询的是带有零填充数字的日期格式,因此请使用 String.format("%02d",m)
而不是 String.valueOf(m)
。
在 MainActivity 中,我希望 listView
显示特定月份的数据。
public void BuildList()
{
sqlcon.open(); // object of InfoAPI
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH)+1;
Toast.makeText(getApplicationContext(),month+"",Toast.LENGTH_LONG).show();
Cursor cursor1=sqlcon.readData(month);
String[] columns=new String[]{
MyDatabaseHelper.Date,MyDatabaseHelper.TimeIn_Info,MyDatabaseHelper.TimeOut_Info
};
int[] to=new int[]
{
R.id.date,R.id.timeIn,R.id.timeOut
};
dataAdapter = new SimpleCursorAdapter(this, R.layout.retrieve_data,
cursor1,
columns,
to,
0);
dataAdapter.setViewBinder(new ViewBinder());
listView.setAdapter(dataAdapter);
}
}
InfoAPI
public Cursor readData(int m)
{
Cursor c=database.rawQuery(" SELECT _id, Date,Weather,Status, TimeIn_Info, TimeOut_Info FROM " + MyDatabaseHelper.TABLE_INFO +
" WHERE Name = ? and strftime('%m',Date)= ?",
new String[]{"LCV"}, new String[]{String.valueOf(m)},null);
if (c != null) {
c.moveToFirst();
}
return c;
}
错误
Error:(54, 26) error: no suitable method found for rawQuery(String,String[],String[],<null>)
method SQLiteDatabase.rawQuery(String,String[]) is not applicable
(actual and formal argument lists differ in length)
method SQLiteDatabase.rawQuery(String,String[],CancellationSignal) is not applicable
(actual and formal argument lists differ in length)
Error:(106, 30) error: method readData in class InfoAPI cannot be applied to given types;
required: int
found: no arguments
reason: actual and formal argument lists differ in length
我对 rawQuery 有点困惑。为了根据两个条件检索数据,正确的写法是什么?
已编辑
public Cursor readData(int m)
{
Cursor c=database.rawQuery(" SELECT _id, Date,Weather,Status, TimeIn_Info, TimeOut_Info FROM " + MyDatabaseHelper.TABLE_INFO +
" WHERE Name = ? and strftime('%m',Date)= ?",
new String[]{ "LCV", String.valueOf(m) }, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
对于日期列,它包含日期格式 19-12-2015
。现在没有错误,但 ListView 上没有数据显示。
没有使用两个单独 String[]
的 rawQuery 方法。正如错误所指出的
no suitable method found for rawQuery(String,String[],String[],<null>)
而不是像这样查询
rawQuery(query, new String[]{"LCV"}, new String[]{String.valueOf(m)},null);
改用它,WHERE 语句的列在同一个 String[]
rawQuery(query, new String[]{ "LCV", String.valueOf(m) }, null);
或者甚至只是这样,因为你不需要末尾的 null
rawQuery(query, new String[]{ "LCV", String.valueOf(m) });
并且由于您查询的是带有零填充数字的日期格式,因此请使用 String.format("%02d",m)
而不是 String.valueOf(m)
。