android - 通过用户值给出的在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;
}
}
现在,当我点击获取数据按钮时,我会收到通信数据库(数据库是我的应用程序名称)已停止
解决方案
这是您的全部代码吗?如果是这样,您似乎没有向其中添加任何数据,这会导致访问数据出现问题。
此外,您在 Test(String ID) 方法中的查询没有任何空格。本质上,您发送的查询是这样的:
SELECTCOLUMNFROMTABLEWHERE ID =7
而它应该是这样的:
从 ID = 7 的表中选择列;
希望这会有所帮助,祝您的代码好运!
推荐阅读
- php - $bean-save() 在 Sugarcrm 中的每条记录花费的时间太长
- android - 如何通过 adb 关闭 VoLTE?
- python - Pyinstaller 编译的二进制文件从 %temp% 文件夹运行
- cartopy - lat_ts 在 cartopy 中的 Plate Carree
- node.js - 通过 Google Sheets API 更新我的数据时出现问题
- css - BEM 真的“禁止”所有重置/默认规则吗?
- mysql - Express-validator 检查 MySQL 是否存在电子邮件
- java - 排序此地图
在爪哇 - android - 无法在 aarch64 android(root)设备上运行 aarch64 编译的二进制文件
- docker - 如何使 Drone Docker 插件通过具有自签名 TLS 证书的自托管注册表进行身份验证