在SQLite中存储Android标记时出错

时间:2017-07-23 20:48:25

标签: java android sqlite google-maps google-maps-markers

我试图在SQLite数据库中保存位置并将标记放在地图上。 但我得到以下错误:

  

FATAL EXCEPTION:main进程:com.example.android.myfavplaces,PID:2354 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.android.myfavplaces / com.example.android.myfavplaces.MapsActivity} :android.database.sqlite.SQLiteException:只允许在INTEGER PRIMARY KEY(代码1)上执行AUTOINCREMENT :,编译时:创建表位置(loc_idinteger主键autoincrement,loc_latdouble,loc_lngdouble,loc_postext);

这是我的代码:

public class LocationsSQLHelper extends SQLiteOpenHelper {

    private SQLiteDatabase mDB;
    public static final String DATABASE_NAME = "MyDBName.db";
    private static final String TABLE_NAME="locations";

    private static final String FIELD_ROW_ID="loc_id";
    private static final String FIELD_LAT="loc_lat";
    private static final String FIELD_LNG="loc_lng";
    private static final String FIELD_ZOOM="loc_pos";

    private static final int D_VERSION=1;

    private static final String DB_NAME="markerlocations.db";
    private static final String DB_CREATE="create table "+TABLE_NAME+ "("
                            +FIELD_ROW_ID + "integer primary key autoincrement, "
                            +FIELD_LAT + "double , "
                            +FIELD_LNG + "double ,"
                            +FIELD_ZOOM + "text"
                            +");"
                    ;


        public LocationsSQLHelper(Context context) {
        super(context, DB_NAME, null, D_VERSION);

        }

    @Override
        public void onCreate(SQLiteDatabase db) {
        db.execSQL(DB_CREATE);
    }


    /** Inserts a new location to the table locations */
    public boolean insert(Integer id, Double lat, Double lon, String zoom) {
     SQLiteDatabase db=this.getWritableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("id", id);
        contentValues.put("lat", 12.944400 );
        contentValues.put("lon", 75.785966);
        contentValues.put(zoom,"zoom");
        return true;
    }

    /** Deletes all locations from the table */
    public long del(Integer id){
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete("locations",
                "id = ? ",
                new String[] { Long.toString(id) });
    }

    public ArrayList<String> getAllLocations(){
    ArrayList<String> arrayList=new ArrayList<>();
            SQLiteDatabase db=this.getReadableDatabase();
        Cursor res=db.rawQuery("select * from locations", null );
        res.moveToFirst();
        while(res.isAfterLast() == false){
            arrayList.add(res.getString(res.getColumnIndex(FIELD_ROW_ID)));
            res.moveToNext();
        }
        return arrayList;
    }

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


}

1 个答案:

答案 0 :(得分:1)

在“integer primary key”,“double ...”和“text”之前添加一个空格,如下所示:

+FIELD_ROW_ID + " integer primary key autoincrement, " +FIELD_LAT + " double , " +FIELD_LNG + " double ," +FIELD_ZOOM + " text" +");"

请注意“签名后整数,双精度和文本之前的空格。