0

複数の実験を試みたNullPointerExceptionところ、SQL クエリを実行しようとするとエラーが発生することがわかりました。私の完全なクエリは次のとおりです。

create table transactiontable(_id integer primary key autoincrement, name text not null, reason text not null, money text not null );

私が間違っていた場所に関する提案はありますか?スタック トレースは次のとおりです。

Caused by: java.lang.NullPointerException
at com.example.startandroid.DBAdapter$DatabaseHelper.<init>(DBAdapter.java:110)
at com.example.startandroid.DBAdapter.open(DBAdapter.java:43)
at com.example.startandroid.MainActivity.onButtonClick(MainActivity.java:34)
Not sure what is the issue.

私のSQLアダプタクラスは次のとおりです。

public class DBAdapter {

private static final String DATABASE_NAME = "transaction.db";
private static final String DATABASE_TABLE = "transactiontable";
private static final int    DATABASE_VERSION = 1;

public static final String KEY_ID   = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_REASON = "reason";
public static final String KEY_MONEY = "money";

private static final String DATABASE_CREATE = "create table " 
        + DATABASE_TABLE 
        + "("
        + KEY_ID + " integer primary key autoincrement, "
        + KEY_NAME + " text not null,  " 
        + KEY_REASON + " text not null, "
        + KEY_MONEY + " text not null "
        + ");";

private final Context context;

private DatabaseHelper DBHelper;
private static SQLiteDatabase db;

public DBAdapter(Context context)
{
    this.context = context;
}

// Open the database
public DBAdapter open() throws SQLException
{
    DBHelper = new DatabaseHelper(context);
    if (DBHelper != null )
        db = DBHelper.getWritableDatabase();
    return this;
}

// Close the database
public void close()
{
    DBHelper.close();
}


private static class DatabaseHelper extends SQLiteOpenHelper
{
    DatabaseHelper(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onCreate(SQLiteDatabase arg0) 
    {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
    }
}
}

コードを使用して、このクラスの関数を呼び出します。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    db = new DBAdapter(this);
    Log.e(TAG, "OnCreate is run");
    myIntent = new Intent(MainActivity.this, FrameActivity.class);
}

public void onButtonClick(View v)
{
    try
    {
        Log.e(TAG, "OnButtonClick starts");
        if (db != null)
        {
            db.open();
            db.close();
        }
    }
    catch(SQLException e)
    {
        e.printStackTrace();
    }
    MainActivity.this.startActivity(myIntent);
    finish();
}
4

1 に答える 1

1

dbnullコンストラクターにありDatabaseHelperます。行を移動します:

db.execSQL(DATABASE_CREATE);

onCreate方法でDatabaseHelper

@Override
public void onCreate(SQLiteDatabase arg0) {
    arg0.execSQL(DATABASE_CREATE);
}
于 2012-07-27T18:27:03.423 に答える