logcat に次のエラーがあります。
12-05 19:20:26.696: E/SQLiteDatabase(1415): Error inserting lon=5.25 lat=7.52 name=null
12-05 19:20:26.696: E/SQLiteDatabase(1415): android.database.sqlite.SQLiteException: no such table: position (code 1): , while compiling: INSERT INTO position(lon,lat,name) VALUES (?,?,?)
私は3つの値を挿入しようとしています:名前、緯度、経度という名前のテーブルに:位置。コードにはエラーはなく、アプリはクラッシュしません。onClickListener を使用して、値の挿入のイベントをボタンに添付しました (ユーザーがボタンを押すと、値が挿入されます)。
データベース作成のコード:
パブリッククラスlistagpsdb {
SQLiteDatabase mDb; DbHelper mDbHelper; Context mContext; private static final String DB_NAME="listagps"; private static final int DB_VERSION=1; public listagpsdb(Context ctx){ mContext=ctx; mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION); } public void open(){ //il database su cui agiamo è leggibile/scrivibile mDb=mDbHelper.getWritableDatabase(); } public void close(){ mDb.close(); } public void insertPosition(String name,double lat, double lon){ ContentValues cv=new ContentValues(); cv.put(PositionsMetaData.POSITIONS_NAME_KEY, name); cv.put(PositionsMetaData.POSITIONS_LATITUDE_KEY, lat); cv.put(PositionsMetaData.POSITIONS_LONGITUDE_KEY, lon); mDb.insert(PositionsMetaData.POSITIONS_TABLE, null, cv); } public Cursor fetchProducts(){ return mDb.query(PositionsMetaData.POSITIONS_TABLE, null,null,null,null,null,null); } static class PositionsMetaData { static final String POSITIONS_TABLE = "position"; static final String ID = "_id"; static final String POSITIONS_NAME_KEY = "name"; static final String POSITIONS_LATITUDE_KEY = "lat"; static final String POSITIONS_LONGITUDE_KEY = "lon"; } private static final String POSITIONS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS" + PositionsMetaData.POSITIONS_TABLE + " (" + PositionsMetaData.ID+ " integer primary key autoincrement, " + PositionsMetaData.POSITIONS_NAME_KEY + " text, " + PositionsMetaData.POSITIONS_LATITUDE_KEY + " double not null);" + PositionsMetaData.POSITIONS_LONGITUDE_KEY + "double not null);"; private class DbHelper extends SQLiteOpenHelper { public DbHelper(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase _db) { _db.execSQL(POSITIONS_TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { } }
}
ご覧のコードでは、データベースが作成されたときにのみテーブルを作成したいと考えています。
これはアクティビティ クラスのコードです。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navi);
Button SalvaLocation = (Button) findViewById(R.id.SalvaLocation);
final listagpsdb db = new listagpsdb(getApplicationContext());
SalvaLocation.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
db.open();
String name = null;
Double lat = 7.52;
Double lon = 5.25;
db.insertPosition(name, lat, lon);
db.close();
}
});
データベース/テーブルが作成されない理由がわかりません。誰にもアイデアがありますか? データベースが作成されているかどうかを AVD メモリで確認するトリックはありますか?
私を助けてくれるすべての人に感謝します!