Ich bin neu bei StackOverflow, also bin ich mir nicht sicher, wie das funktioniert, aber ich brauche wirklich Hilfe mit dieser App, die ich in Android Studio erstelle. Ich habe eine vorbestückte chemicals.sqlite-Datenbank, die ich in Android Studio durchsuchen möchte. Im Grunde wird die App, die ich entwerfe, einem Benutzer erlauben, nach einer Verbindung nach Namen zu suchen, und es werden Informationen darüber angezeigt. Aus irgendeinem Grund sagt mein Programm, dass es keine der Werte anzeigen kann, die ich im Emulator der App suchen möchte. Es zeigt immer nur das "No Match Found".Vorgefüllte SQLite-Datenbank wird in Android Studio nicht richtig gelesen
Hier ist meine DatabaseHelper Klasse:
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;
}
}
Hier ist meine Verbindungsklasse:
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;
}
}
Und hier ist meine Hauptklasse:
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");
}
}
}
Jedwedes Hilfe ist stark geschätzt. Bitte hilf mir. Weitere Informationen: Die Datenbank befindet sich im Ordner "Assets". Alle Werte in der Datenbank sind Textfelder. Der Benutzer sucht nach dem Verbundnamen. Die Datenbank hat die Erweiterung .sqlite. Vielen Dank im Voraus.
Sie wissen, dass 'DataBaseHelper' immer eine neue' chemicals.sqlite' auf dem Telefon erstellen wird, und ignorieren Sie alles, was Sie in Ihrem Vermögen haben, richtig? Weil ich nicht sehe, wo Sie Ihre Datenbank auffüllen. –
Willkommen bei Stack Overflow! Vielen Dank, dass Sie sich die Zeit genommen haben, korrekte Grammatik zu verwenden und sicherzustellen, dass Ihr Code richtig formatiert ist. Oftmals scheinen neue Benutzer ihre Manieren zu vergessen, wenn sie posten. –
@david Danke für die Antwort! Ich wusste das nicht ... Ich dachte, ich hätte es so eingerichtet, dass es den .sqlite-Ordner in meinen Assets durchsuchen und Daten daraus ziehen würde. Das war zumindest, was meine Absicht war ... – KatieJRise