我试图在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);
}
}
答案 0 :(得分:1)
在“integer primary key”,“double ...”和“text”之前添加一个空格,如下所示:
+FIELD_ROW_ID + " integer primary key autoincrement, " +FIELD_LAT + " double , " +FIELD_LNG + " double ," +FIELD_ZOOM + " text" +");"
请注意“签名后整数,双精度和文本之前的空格。