2017-12-17 7 views
-1

私のアプリは基本的に、名前、番号、およびすべての文字列を格納する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; 
} 
+0

ここにクラッシュログを追加してください。 –

+0

@Gurujiここであなたは行く、[リンク](https://drive.google.com/open?id=1M7gbgXzr3zmOxlXBtf811A_KL8Gc9Zhj)私はそのようなテーブルを持っていないようだ...私のonCreateが間違っている? – mkamran94

+0

テーブルが作成されていません。 –

答えて

-2

あなたのテーブルを変更...ただの情報のため

Cursor c = db.rawQuery(query, value); 

はここのonCreateとONUPGRADEと私の挿入機能だ...私のアプリは、次の行でクラッシュした理由を把握することはできませんクエリの末尾にセミコロンを付ける")";

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 + ")"; 
+0

うわーありがとう。その小さなものは一日中狂ってしまった! – mkamran94

+0

@ mkamran94幸せなコード作成をお手伝いします。 –

+0

セミコロンは問題ではありません。それはそれの有無にかかわらず動作します。このような変更がOPの問題を解決した場合は、(アプリのアンインストールなど)他に何かがあった。 – laalto

関連する問題