2017-07-06 8 views
0
package company.mystorage.com.mystorage; 

import android.content.ContentValues; 
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 String DATABASE_NAME = "mystorage.db"; 
private static final String TABLE_NAME = "userlist"; 

public static final String COLUMN_1 ="Id"; 
private static final String COLUMN_2 = "username"; 
private static final String COLUMN_3 = "password"; 
SQLiteDatabase db; 

    public DatabaseHelper(Context context) { 
     // database is created when constructor is called. 
     super(context, DATABASE_NAME, null, 1); 
     // to invoke onCreate() and onUpgrade() methods to create the tables 
     SQLiteDatabase db = this.getWritableDatabase(); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db){ 
     db.execSQL("create table " + TABLE_NAME + "(" 
       + COLUMN_1 +" INTEGER PRIMARY KEY AUTOINCREMENT, " 
       + COLUMN_2 +" TEXT, " 
       + COLUMN_3 +" TEXT)" 
     ); 

    } 

    public boolean insertData(String username, String password){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COLUMN_2, username); 
     contentValues.put(COLUMN_3, password); 
     long result = db.insert(TABLE_NAME, null, contentValues); 
     if (result == -1) 
      return false; 
     else 
      return true; 
    } 

    public boolean searchPass(String user){ 
     db = this.getReadableDatabase(); 
     String query = "select * from " + TABLE_NAME + " where " + COLUMN_2 + " = " + "'" + user + "'"; 
     Cursor cursor = db.rawQuery(query, null); 

     cursor.moveToFirst(); 
     if (cursor.getCount() > 0) { 

      return true; 
     } 
     cursor.close(); 
     db.close(); 

     return false; 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS "+ TABLE_NAME); 
     onCreate(db); 
    } 

} 

このコードはデータベースを検索し、データベースにユーザーを追加する機能も備えています。コードをデバッグしようとしましたが、onCreateが呼び出されたときにクラッシュしたことが示されました。私はonCreateをチェックしましたが、クエリは正しく実行されています。私はログインしてアンドロイドにサインアップしていますが、sqliteデータベースを使用するとonCreateでクラッシュします

編集*これを変更しました。しかし、それはまだクラッシュした。

+2

thisを使用していないスタックオーバーフローにあなたのクラッシュのスタックトレース –

+2

ようこそ投稿してください! [ツアー](https://stackoverflow.com/tour)、 を見て、[ヘルプセンター](https://stackoverflow.com/help)、特に を読んでください[どのようにして私は良い質問をしますか?](https://stackoverflow.com/help/how-to-ask) と[ここではどのような話題がありますか?](https://stackoverflow.com/help/on-トピック)。 –

答えて

2
public void onCreate(SQLiteDatabase db){ 
    this.db.execSQL(...) 

あなたはdbパラメータと初期化されていないではないthis.dbフィールド上execSQL()を呼び出す必要があります。

+0

これは意味を –

+0

変更しましたが、それでもクラッシュします。他の問題はありますか? –

+0

Stacktraceを見て、アプリがクラッシュする場所とその理由を覚えてください。 – laalto

0

これは役立つはず:

public void onCreate(SQLiteDatabase db) { 
     db.execSQL(SQL_CREATE_ENTRIES); 
    } 

"これを" 削除してください。

また、SearchPass()メソッドでは、カーソルの数がそれより多い場合は、カーソルとdbオブジェクトを閉じません。 Finallyブロックでそれを処理する方が良い考えです。あなたのonCreate方法で

0

db.execSQL(..)

+0

onCreate()の例外をキャッチすることは、ほとんど常に悪い考えです。データベーススキーマの作成に問題があった場合、メソッドは正常に返されません。 – laalto

+0

got it。説明してくれてありがとう(Y)@laalto – ZaidBinAsif

関連する問題