【发布时间】:2016-07-09 19:11:30
【问题描述】:
我是 StackOverflow 的新手,所以我不确定它是如何工作的,但我确实需要一些关于我在 Android Studio 中构建的应用程序的帮助。我有一个预填充的chemicals.sqlite 数据库,我正在尝试在Android Studio 中进行搜索。基本上,我正在设计的应用程序将允许用户按名称搜索化合物,它会显示有关它的信息。出于某种原因,我的程序说它无法显示我试图在应用程序的模拟器中搜索的任何值。它总是显示“未找到匹配项”。
这是我的 DatabaseHelper 类:
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "chemicals.sqlite";
private static final String TABLE_OSHA = "osha";
public static final String COLUMN_COMPOUND = "compound";
public static final String COLUMN_H = "h";
public static final String COLUMN_F = "f";
public static final String COLUMN_R = "r";
public static final String COLUMN_SN = "sn";
public DataBaseHelper(Context context, String name,
SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_OSHA_TABLE = "CREATE TABLE " +
TABLE_OSHA + "("
+ COLUMN_COMPOUND + " TEXT," + COLUMN_H
+ " TEXT," + COLUMN_F + " TEXT," + COLUMN_R + " TEXT," + COLUMN_SN + " TEXT" + ")";
db.execSQL(CREATE_OSHA_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_OSHA);
onCreate(db);
}
public Compound findCompound(String compoundname) {
String query = "Select * FROM " + TABLE_OSHA + " WHERE " + COLUMN_COMPOUND + "= '" + compoundname + "'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
Compound compound = new Compound();
if (cursor.moveToFirst()) {
cursor.moveToFirst();
compound.setH(cursor.getString(0));
compound.setF(cursor.getString(1));
compound.setR(cursor.getString(2));
compound.setSN(cursor.getString(3));
// cursor.moveToNext();
cursor.close();
} else {
compound = null;
}
db.close();
return compound;
}
}
这是我的复合类:
public class Compound {
private String _compound;
private String _h;
private String _f;
private String _r;
private String _sn;
public Compound() {
}
public Compound(String compound, String h, String f, String r, String sn) {
this._compound = compound;
this._h = h;
this._f = f;
this._r = r;
this._sn = sn;
}
public Compound(String h, String f, String r, String sn) {
this._h = h;
this._f = f;
this._r = r;
this._sn = sn;
}
public void setCompound(String compound) {
this._compound = compound;
}
public String getCompound() {
return this._compound;
}
public void setH(String h) {
this._h = h;
}
public String getH() {
return this._h;
}
public void setF(String f) {
this._f = f;
}
public String getF() {
return this._f;
}
public void setR(String r) {
this._r = r;
}
public String getR(){
return this._r;
}
public void setSN(String sn){
this._sn = sn;
}
public String getSN(){
return this._sn;
}
}
这是我的主要课程:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class oshaSearch extends AppCompatActivity {
TextView txtH;
TextView txtR;
TextView txtF;
TextView txtSN;
EditText txtCompound;
Button btnSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_osha_search);
txtF = (TextView) findViewById(R.id.txtF);
txtR = (TextView) findViewById(R.id.txtR);
txtH = (TextView) findViewById(R.id.txtH);
txtSN = (TextView) findViewById(R.id.txtSN);
txtCompound = (EditText) findViewById(R.id.searchCompound);
btnSearch = (Button) findViewById(R.id.btnSearch);
}
public void lookupCompound (View view) {
DataBaseHelper dbHandler = new DataBaseHelper(this, null, null, 1);
Compound compound =
dbHandler.findCompound(txtCompound.getText().toString());
if (compound != null) {
txtH.setText(String.valueOf(compound.getH()));
txtF.setText(String.valueOf(compound.getF()));
txtR.setText(String.valueOf(compound.getR()));
txtSN.setText(String.valueOf(compound.getSN()));
} else {
txtH.setText("No Match Found");
}
}
}
非常感谢任何和所有帮助。请帮帮我。 附加信息:数据库位于资产文件夹中,数据库中的所有值都是文本字段,用户正在按化合物名称搜索,数据库具有 .sqlite 扩展名。提前谢谢大家。
【问题讨论】:
-
您知道
DataBaseHelper总是会在手机上创建一个新的chemicals.sqlite,而忽略您资产中的任何内容,对吧?因为我看不到您在哪里填充数据库。 -
欢迎来到 Stack Overflow!感谢您花时间使用正确的语法并确保您的代码格式正确。很多时候,新用户在发帖时似乎忘记了自己的礼貌。
-
@david 感谢您的回复!我不知道……我以为我已经设置好了,所以它会搜索我资产中的 .sqlite 文件夹并从中提取数据。至少我的意图是这样的......
-
在那个帖子中链接的是SQLiteAssetHelper,它可以从你的
assets打开文件
标签: java android database sqlite search