如何在sqlitedatabase中实现多条搜索,一键搜索数据?
How to search for data in the sqLiteDatabase with multiple search items and one button?
我在 Android Studio 中已经有一个可用的应用程序,但我想更新它。更新将搜索两种不同类型的数据。
该应用程序将让用户通过其车牌 and/or 底盘号添加汽车,汽车将被停放在停车场。下一步是找回汽车,为此用户可以(现在)仅通过车牌搜索汽车。我想更改它,以便用户可以通过车牌号或底盘号搜索汽车。请参阅下面的代码了解我已有的内容。
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class SearchCarData extends AppCompatActivity {
TextView DisplayParkinglot, DisplayLicensePlate, DisplayChassisNumber;
EditText SearchLicensePlateTxt;
MyDBHelper myDBHelper;
SQLiteDatabase sqLiteDatabase;
String license_plate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_car_data_layout);
SearchLicensePlateTxt = (EditText)
findViewById(R.id.searchLicensePlateTxt);
DisplayParkinglot = (TextView) findViewById(R.id.displayParkingLot);
DisplayLicensePlate = (TextView) findViewById(R.id.displayLicencePlate);
DisplayChassisNumber = (TextView)
findViewById(R.id.displayChassisNumber);
DisplayParkinglot.setVisibility(View.GONE);
DisplayLicensePlate.setVisibility(View.GONE);
DisplayChassisNumber.setVisibility(View.GONE);
}
public void searchCar(View view) {
license_plate = SearchLicensePlateTxt.getText().toString();
myDBHelper = new MyDBHelper(getApplicationContext());
sqLiteDatabase = myDBHelper.getReadableDatabase();
Cursor cursor = myDBHelper.getCarInfo(license_plate, sqLiteDatabase);
if(cursor.moveToFirst()) {
String PARKINGLOT = cursor.getString(0);
String LICENSEPLATE = cursor.getString(1);
String CHASSISNUMBER = cursor.getString(2);
DisplayParkinglot.setText(PARKINGLOT);
DisplayLicensePlate.setText(LICENSEPLATE);
DisplayChassisNumber.setText(CHASSISNUMBER);
DisplayParkinglot.setVisibility(View.VISIBLE);
DisplayLicensePlate.setVisibility(View.VISIBLE);
DisplayChassisNumber.setVisibility(View.VISIBLE);
}
}
所以我想更改代码,以便可以搜索车牌或车架号。有人给我提示或想法吗?
当您从数据库中查询数据时,包括这两个字段。如果您使用内容提供程序访问数据库,那么您的代码可能看起来像这样。
Cursor cursor = getContext().getContentResolver().query(CONTENT_URI, projection, selection, selectionargs, sortOrder);
在此 CONTENT_URI 指向您的 table,投影 定义您的 table 列, selection - 您拥有数据的列,selectionargs - 数据
希望对你有帮助
我已经解决了,我试着给它添加一个新的游标并且它成功了。
public class SearchCarData extends AppCompatActivity {
TextView DisplayParkinglot, DisplayLicensePlate, DisplayChassisNumber;
EditText SearchTxt;
MyDBHelper myDBHelper;
SQLiteDatabase sqLiteDatabase;
String license_plate, chassis_number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_car_data_layout);
SearchTxt = (EditText) findViewById(R.id.searchTxt);
DisplayParkinglot = (TextView) findViewById(R.id.displayParkingLot);
DisplayLicensePlate = (TextView) findViewById(R.id.displayLicencePlate);
DisplayChassisNumber = (TextView) findViewById(R.id.displayChassisNumber);
DisplayParkinglot.setVisibility(View.GONE);
DisplayLicensePlate.setVisibility(View.GONE);
DisplayChassisNumber.setVisibility(View.GONE);
}
public void searchCar(View view) {
license_plate = SearchTxt.getText().toString();
chassis_number = SearchTxt.getText().toString();
myDBHelper = new MyDBHelper(getApplicationContext());
sqLiteDatabase = myDBHelper.getReadableDatabase();
Cursor cursor = myDBHelper.getCarInfo(license_plate, sqLiteDatabase);
Cursor cursor1 = myDBHelper.getCarInfo2(chassis_number, sqLiteDatabase);
//Search by License Plate
if(cursor.moveToFirst()) {
String PARKINGLOT = cursor.getString(0);
String LICENSEPLATE = cursor.getString(1);
String CHASSISNUMBER = cursor.getString(2);
DisplayParkinglot.setText(PARKINGLOT);
DisplayLicensePlate.setText(LICENSEPLATE);
DisplayChassisNumber.setText(CHASSISNUMBER);
DisplayParkinglot.setVisibility(View.VISIBLE);
DisplayLicensePlate.setVisibility(View.VISIBLE);
DisplayChassisNumber.setVisibility(View.VISIBLE);
}
//Search by Chassis Number
else if (cursor1.moveToFirst()) {
String PARKINGLOT = cursor1.getString(0);
String LICENSEPLATE = cursor1.getString(1);
String CHASSISNUMBER = cursor1.getString(2);
DisplayParkinglot.setText(PARKINGLOT);
DisplayLicensePlate.setText(LICENSEPLATE);
DisplayChassisNumber.setText(CHASSISNUMBER);
DisplayParkinglot.setVisibility(View.VISIBLE);
DisplayLicensePlate.setVisibility(View.VISIBLE);
DisplayChassisNumber.setVisibility(View.VISIBLE);
}
}
非常感谢 Suja 的帮助,帮助我更好地搜索。
我在 Android Studio 中已经有一个可用的应用程序,但我想更新它。更新将搜索两种不同类型的数据。
该应用程序将让用户通过其车牌 and/or 底盘号添加汽车,汽车将被停放在停车场。下一步是找回汽车,为此用户可以(现在)仅通过车牌搜索汽车。我想更改它,以便用户可以通过车牌号或底盘号搜索汽车。请参阅下面的代码了解我已有的内容。
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class SearchCarData extends AppCompatActivity {
TextView DisplayParkinglot, DisplayLicensePlate, DisplayChassisNumber;
EditText SearchLicensePlateTxt;
MyDBHelper myDBHelper;
SQLiteDatabase sqLiteDatabase;
String license_plate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_car_data_layout);
SearchLicensePlateTxt = (EditText)
findViewById(R.id.searchLicensePlateTxt);
DisplayParkinglot = (TextView) findViewById(R.id.displayParkingLot);
DisplayLicensePlate = (TextView) findViewById(R.id.displayLicencePlate);
DisplayChassisNumber = (TextView)
findViewById(R.id.displayChassisNumber);
DisplayParkinglot.setVisibility(View.GONE);
DisplayLicensePlate.setVisibility(View.GONE);
DisplayChassisNumber.setVisibility(View.GONE);
}
public void searchCar(View view) {
license_plate = SearchLicensePlateTxt.getText().toString();
myDBHelper = new MyDBHelper(getApplicationContext());
sqLiteDatabase = myDBHelper.getReadableDatabase();
Cursor cursor = myDBHelper.getCarInfo(license_plate, sqLiteDatabase);
if(cursor.moveToFirst()) {
String PARKINGLOT = cursor.getString(0);
String LICENSEPLATE = cursor.getString(1);
String CHASSISNUMBER = cursor.getString(2);
DisplayParkinglot.setText(PARKINGLOT);
DisplayLicensePlate.setText(LICENSEPLATE);
DisplayChassisNumber.setText(CHASSISNUMBER);
DisplayParkinglot.setVisibility(View.VISIBLE);
DisplayLicensePlate.setVisibility(View.VISIBLE);
DisplayChassisNumber.setVisibility(View.VISIBLE);
}
}
所以我想更改代码,以便可以搜索车牌或车架号。有人给我提示或想法吗?
当您从数据库中查询数据时,包括这两个字段。如果您使用内容提供程序访问数据库,那么您的代码可能看起来像这样。
Cursor cursor = getContext().getContentResolver().query(CONTENT_URI, projection, selection, selectionargs, sortOrder);
在此 CONTENT_URI 指向您的 table,投影 定义您的 table 列, selection - 您拥有数据的列,selectionargs - 数据
希望对你有帮助
我已经解决了,我试着给它添加一个新的游标并且它成功了。
public class SearchCarData extends AppCompatActivity {
TextView DisplayParkinglot, DisplayLicensePlate, DisplayChassisNumber;
EditText SearchTxt;
MyDBHelper myDBHelper;
SQLiteDatabase sqLiteDatabase;
String license_plate, chassis_number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_car_data_layout);
SearchTxt = (EditText) findViewById(R.id.searchTxt);
DisplayParkinglot = (TextView) findViewById(R.id.displayParkingLot);
DisplayLicensePlate = (TextView) findViewById(R.id.displayLicencePlate);
DisplayChassisNumber = (TextView) findViewById(R.id.displayChassisNumber);
DisplayParkinglot.setVisibility(View.GONE);
DisplayLicensePlate.setVisibility(View.GONE);
DisplayChassisNumber.setVisibility(View.GONE);
}
public void searchCar(View view) {
license_plate = SearchTxt.getText().toString();
chassis_number = SearchTxt.getText().toString();
myDBHelper = new MyDBHelper(getApplicationContext());
sqLiteDatabase = myDBHelper.getReadableDatabase();
Cursor cursor = myDBHelper.getCarInfo(license_plate, sqLiteDatabase);
Cursor cursor1 = myDBHelper.getCarInfo2(chassis_number, sqLiteDatabase);
//Search by License Plate
if(cursor.moveToFirst()) {
String PARKINGLOT = cursor.getString(0);
String LICENSEPLATE = cursor.getString(1);
String CHASSISNUMBER = cursor.getString(2);
DisplayParkinglot.setText(PARKINGLOT);
DisplayLicensePlate.setText(LICENSEPLATE);
DisplayChassisNumber.setText(CHASSISNUMBER);
DisplayParkinglot.setVisibility(View.VISIBLE);
DisplayLicensePlate.setVisibility(View.VISIBLE);
DisplayChassisNumber.setVisibility(View.VISIBLE);
}
//Search by Chassis Number
else if (cursor1.moveToFirst()) {
String PARKINGLOT = cursor1.getString(0);
String LICENSEPLATE = cursor1.getString(1);
String CHASSISNUMBER = cursor1.getString(2);
DisplayParkinglot.setText(PARKINGLOT);
DisplayLicensePlate.setText(LICENSEPLATE);
DisplayChassisNumber.setText(CHASSISNUMBER);
DisplayParkinglot.setVisibility(View.VISIBLE);
DisplayLicensePlate.setVisibility(View.VISIBLE);
DisplayChassisNumber.setVisibility(View.VISIBLE);
}
}
非常感谢 Suja 的帮助,帮助我更好地搜索。