如何在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 的帮助,帮助我更好地搜索。