在Android中创建SQLite表

时间:2012-04-03 01:55:36

标签: android sqlite

我试图将值加载到android上的SQLite表中。我的应用程序一直在破坏,但除了NullPointerException之外它没有给我一个特定的错误,因为它认为表没有被正确创建。

public class MySQLiteHelper{


        private static final String DATABASE_NAME = "breadcrumbs.db";
        private static final int DATABASE_VERSION = 1;
        public static final String TABLE_BREADCRUMBS = "breadcrumbs";
        private static Context context;
        static SQLiteDatabase db;
        private static SQLiteStatement insertStmt;
        private static final String INSERT ="insert into " + TABLE_BREADCRUMBS + " (time,lat,lon) values (?,?,?)";


        public MySQLiteHelper(Context context) {
            MySQLiteHelper.context = context;
            OpenHelper openHelper = new OpenHelper(MySQLiteHelper.context);
            MySQLiteHelper.db = openHelper.getWritableDatabase();
            MySQLiteHelper.insertStmt = MySQLiteHelper.db.compileStatement(INSERT);

        }

        public static long insert(long time,int lat,int lon) {
            insertStmt.bindLong(1, time);
            insertStmt.bindLong(2, lat);
            insertStmt.bindLong(3, lon);
            return insertStmt.executeInsert();
        }

        public void deleteAll() {
            db.delete(TABLE_BREADCRUMBS, null, null);
        }

        public List<String[]> selectAll()
        {
            List<String[]> list = new ArrayList<String[]>();
            Cursor cursor = db.query(TABLE_BREADCRUMBS, new String[] 
                    { "id","time","lat","lon"}, null, null, null, null, null); 
           int x=0;
            if (cursor.moveToFirst()) {
               do {
                    String[] b1=new String[]{cursor.getString(0),cursor.getString(1),cursor.getString(2),
    cursor.getString(3)};
                    list.add(b1);
                    x=x+1;
               } while (cursor.moveToNext());
            }
            if (cursor != null && !cursor.isClosed()) {
               cursor.close();
            } 
           cursor.close();
            return list;
       }

        public void delete(int rowId) {
            db.delete(TABLE_BREADCRUMBS, null, null); 
      } 


    private static class OpenHelper extends SQLiteOpenHelper {
            OpenHelper(Context context) {
                 super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
            public void onCreate(SQLiteDatabase db) {
                db.execSQL("CREATE TABLE " + TABLE_BREADCRUMBS + " (id INTEGER PRIMARY KEY, tim REAL, lat REAL, long REAL);");
                //db.execSQL("CREATE TABLE " + TABLE_BREADCRUMBS + " (id INTEGER PRIMARY KEY AUTOINCREMENT, time REAL, lat REAL, long REAL);");
            }

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


           }    
     }

我正在使用以下方法在另一个类中调用该方法:

    @Override
            public void onLocationChanged(Location location) {
                int lat = (int) (location.getLatitude() * 1E6);
                int lng = (int) (location.getLongitude() * 1E6);
                long time = (int)(location.getTime() * 1E6);
                GeoPoint point = new GeoPoint(lat, lng);
                createMarker();
                MySQLiteHelper.insert(time,lat,lng);
                mapController.animateTo(point); // mapController.setCenter(point);

            }
}

也许我需要以某种方式调用OpenHelper?

3 个答案:

答案 0 :(得分:5)

扩展 SQLiteOpenHelper &amp;覆盖两种方法 onCreate() onUpgrade()

You can follow this really helpful tutorial

答案 1 :(得分:3)

我相信你需要让你的课程延长SQLiteOpenHelper

答案 2 :(得分:3)

通过更改insert语句以匹配列名“tim”而不是“time”来修复。