私のアプリは基本的に、名前、番号、およびすべての文字列を格納するSQLiteデータベースに値を入力する顧客アプリです。今私の挿入関数は私が知ることができますが、私は文字列を返すしようとしている関数でrawQueryを呼び出すしようとしているときに私のアプリクラッシュからうまく動作しているようだ。AndroidアプリがCursor db.rawQuery()コールでクラッシュしていますか?
public String returnString(String name) {
String temp = "";
String query = "SELECT * FROM " + TABLE_CUSTOMERS + " WHERE " + COLUMN_NAME + " = ?";
String[] value = {name};
SQLiteDatabase db = this.getReadableDatabase();
if(db.isOpen()) {
Cursor c = db.rawQuery(query, value);
c.moveToFirst();
while (c.moveToNext()) {
if (c.getString(c.getColumnIndex("name")) != null && c.getString(c.getColumnIndex("name")).equals(name)) {
temp = c.getString(c.getColumnIndex("name"));
break;
}// if
} // while
c.close();
db.close();
} // if
else{
Log.i("Failure -> ", " DataBase failed to open.");
temp = "ERROR";
}
return temp;
}
基本的に名前を送信すると、列全体が返されます。しかし、私は
public class DBHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1; // version
private static final String DATABASE_NAME = "customers.db"; // stored file name
public static final String TABLE_CUSTOMERS = "customers"; // name of table
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_ADDRESS = "address";
public static final String COLUMN_EMAIL = "email";
public static final String COLUMN_PHONE = "phone";
public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
} // constructor
// first time creation of db
@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE " + TABLE_CUSTOMERS + "(" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
COLUMN_NAME + " TEXT NOT NULL, " +
COLUMN_ADDRESS + " TEXT NOT NULL, " +
COLUMN_EMAIL + " TEXT NOT NULL, " +
COLUMN_PHONE + " TEXT NOT NULL);";
db.execSQL(query);
}
// on upgrade of db
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CUSTOMERS);
onCreate(db);
}
// add customer by custom container
public void addCustomer(StudentsDB customer) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_NAME, customer.get_name());
values.put(COLUMN_ADDRESS, customer.get_address());
values.put(COLUMN_EMAIL, customer.get_email());
values.put(COLUMN_PHONE, customer.get_phone());
db.insert(TABLE_CUSTOMERS, null, values);
db.close();
} // addCustomer
// delete all of table
public void dropTable() {
SQLiteDatabase db = getWritableDatabase();
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CUSTOMERS);
db.close();
}
// return string with string
public String returnString(String name) {
String temp = "";
String query = "SELECT * FROM " + TABLE_CUSTOMERS + " WHERE " + COLUMN_NAME + " = ?";
String[] value = {name};
SQLiteDatabase db = getReadableDatabase();
if (db.isOpen()) {
Cursor c = db.rawQuery(query, value);
c.moveToFirst();
while (c.moveToNext()) {
if (c.getString(c.getColumnIndex("name")) != null && c.getString(c.getColumnIndex("name")).equals(name)) {
temp = c.getString(c.getColumnIndex("name"));
break;
}// if
} // while
c.close();
db.close();
} // if
else {
Log.i("Failure -> ", " DataBase failed to open.");
temp = "ERROR";
}
return temp;
}
ここにクラッシュログを追加してください。 –
@Gurujiここであなたは行く、[リンク](https://drive.google.com/open?id=1M7gbgXzr3zmOxlXBtf811A_KL8Gc9Zhj)私はそのようなテーブルを持っていないようだ...私のonCreateが間違っている? – mkamran94
テーブルが作成されていません。 –