首页 > 解决方案 > 通过用户值给出的在sql数据库中查找记录的方法

问题描述

我需要创建一个方法,使用“SELECT * FROM table_name WHERE ID = getID”将数据库中的数据填充 TextView。例如,我们现在在数据库中有一条 id 等于“1”的记录,我们可以输入“1”在 EditText 中,然后我们必须点击获取数据按钮,然后程序应该显示来自数据库的数据,其中列 id 等于“1”

主要活动

public class MainActivity extends AppCompatActivity {
DatabaseHelper db;
EditText name, surname, marks, enterID;
Button addData, showData,queryButton;
TextView testTV;
String idString,nameString,surnameString,marksString;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    db = new DatabaseHelper(this);

    name = (EditText) findViewById(R.id.nameET);
    surname = (EditText) findViewById(R.id.surnameET);
    marks = (EditText) findViewById(R.id.marksET);
    enterID = (EditText) findViewById(R.id.enterIdET);

    addData = (Button) findViewById(R.id.addDataBtn);
    showData = (Button) findViewById(R.id.showDataBtn);
    queryButton = (Button) findViewById(R.id.testBTN);

    testTV = (TextView) findViewById(R.id.showID);




    AddData();
    showData();
    queryTest();
}
public void queryTest() {
    queryButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String givenID = enterID.getText().toString();
            Cursor cursor = db.Test(Integer.parseInt(enterID.getText().toString()));


            if (cursor.moveToFirst()) {
                do {
                    idString = "ID :" + cursor.getString(0);
                    nameString = "Name :" + cursor.getString(1);
                    surnameString = "Surname :" + cursor.getString(2);
                    marksString = "Marks :" + cursor.getString(3);
                } while (cursor.moveToNext());
                {
                    testTV.setText(idString + "\n" + nameString + "\n" + surnameString + "\n" + marksString);
                }
            }


        }
    });
}
public void AddData() {
    addData.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isInserted = db.insertData(name.getText().toString(),
                            surname.getText().toString(),
                            marks.getText().toString());
                    if (isInserted)
                        Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(MainActivity.this, "Data not Inserted", Toast.LENGTH_LONG).show();
                }
            }
    );
}

public void showData() {
    showData.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Cursor res = db.getAllData();
            if (res.getCount() == 0) {
                showMessage("Error", "No data");
                return;
            }
            StringBuffer buffer = new StringBuffer();
            while (res.moveToNext()) {

                buffer.append("ID :" + res.getString(0) + "\n");
                buffer.append("Name :" + res.getString(1) + "\n");
                buffer.append("Surname :" + res.getString(2) + "\n");
                buffer.append("Marks :" + res.getString(3) + "\n\n");
            }
            showMessage("Data", buffer.toString());
        }
    });
}


public void showMessage(String title, String message) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(true);
    builder.setTitle(title);
    builder.setMessage(message);
    builder.show();
}
}

DatabaseHelper(我要创建的方法现在名为“Test”)

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "asd.db";
public static final String TABLE_NAME = "Student_table";
public static final String COL_1 = "ID";
public static final String COL_2 = "NAME";
public static final String COL_3 = "SURNAME";
public static final String COL_4 = "MARKS";

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("create table " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,"+COL_2+" TEXT,"+COL_3+" TEXT,"+COL_4+" INTEGER)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}

public boolean insertData(String name, String surname, String marks) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2,name);
    contentValues.put(COL_3,surname);
    contentValues.put(COL_4,marks);
    long result = db.insert(TABLE_NAME,null,contentValues);

    if (result == -1){
        return false;
    }else
        return true;
}

public Cursor getAllData(){

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM "+TABLE_NAME,null);
    return res;
}

public Cursor Test(int getID){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery("SELECT "+COL_2+" FROM "+TABLE_NAME+" WHERE ID ="+getID+"''",null);
    return cursor;
}
}

现在,当我点击获取数据按钮时,我会收到通信数据库(数据库是我的应用程序名称)已停止

标签: androidsqldatabase

解决方案


这是您的全部代码吗?如果是这样,您似乎没有向其中添加任何数据,这会导致访问数据出现问题。

此外,您在 Test(String ID) 方法中的查询没有任何空格。本质上,您发送的查询是这样的:

SELECTCOLUMNFROMTABLEWHERE ID =7

而它应该是这样的:

从 ID = 7 的表中选择列;

希望这会有所帮助,祝您的代码好运!


推荐阅读