0

我正在尝试将房间号及其坐标插入数据库,然后访问它们以指示这些房间,但似乎我无法将数据插入我的数据库。

这是我的数据库处理程序:

public class MRLDatabaseHandler extends SQLiteOpenHelper {



    //private Context context;
    //private String locationsFile;


    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_NAME = "MRL_LocationsDB3";

    static final String TABLE_LOCATIONS = "locations"; //table name

    private static final String KEY_ID = "_GPSPoint_ID";
    private static final String KEY_RNUMBER = "_RNumber";
    private static final String KEY_LAT = "_Latitude";
    private static final String KEY_LONGI = "_Longitude";
    private static final String KEY_ALTI = "_Altitude";


    public MRLDatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        //this.context = context;
        //locationsFile = context.getString(R.string.mrl_locations);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_LOCATIONS_TABLE = "CREATE TABLE " + TABLE_LOCATIONS + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_RNUMBER + " TEXT," + KEY_LAT + " DOUBLE,"
                + KEY_LONGI + " DOUBLE,"  + KEY_ALTI + " DOUBLE"+ ")";
        db.execSQL(CREATE_LOCATIONS_TABLE);

        //populating the locations table
        /**MRL_LocationsLoader locationLoader = new MRL_LocationsLoader(context, db, locationsFile);
            try {
                locationLoader.loadData();

            }catch (IOException e){
                e.printStackTrace();
                } ***/


    }

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

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOCATIONS);

        // Create tables again
        onCreate(db);

    }

//////CRUD IMPLEMETATION
    // Adding new coordinate
        void addCoordinate( MRL_LocationsModelClass point) {
            SQLiteDatabase db = this.getWritableDatabase();

            ContentValues values = new ContentValues();
            values.put(KEY_ID , point.get_GPSPoint_ID());
            values.put(KEY_RNUMBER, point.get_RNumber()); 
            values.put(KEY_LAT, point.get_Latitude()); 
            values.put(KEY_LONGI, point.get_Longitude()); 
            values.put(KEY_ALTI, point.get_Altitude()); 


            // Inserting Row
            db.insert(TABLE_LOCATIONS, null, values);
            db.close(); // Closing database connection
        }

    // Getting single coordinate from SQLite database
    MRL_LocationsModelClass getPoint(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_LOCATIONS, new String[] { KEY_ID,
                KEY_RNUMBER, KEY_LAT, KEY_LONGI, KEY_ALTI }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        MRL_LocationsModelClass locationsModelClass = new MRL_LocationsModelClass(
                Integer.parseInt(cursor.getString(0)), cursor.getString(1),
                Double.parseDouble(cursor.getString(2)),
                Double.parseDouble(cursor.getString(3)),
                Double.parseDouble(cursor.getString(4)));
        // return contact
        return locationsModelClass;

    }

这是使用它的类:

public class DrawPath extends Activity {
     MRLDatabaseHandler db = new MRLDatabaseHandler(this);
    int dest = 9, src = 6;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Inserting Coordinates
                Log.d("Insert: ", "Inserting ..");
                db.addCoordinate(new MRL_LocationsModelClass("L101", -12.804646,28.240218,  (double) 1223));
                db.addCoordinate(new MRL_LocationsModelClass("C102", -12.8048,28.240736, (double) 1227));
                db.addCoordinate(new MRL_LocationsModelClass("Z103", -12.805274,28.240529, (double) 1225));
                db.addCoordinate(new MRL_LocationsModelClass("A104", -12.805347,28.238821, (double) 1232));
                db.addCoordinate(new MRL_LocationsModelClass("NH201",-12.804497,28.24068, (double) 1222));



        MRL_LocationsModelClass srcPoint = db.getPoint(src);
        MRL_LocationsModelClass destPoint = db.getPoint(dest);
        SharedData data = SharedData.getInstance();
        data.setAPIKEY("0Fm62I15vXD_pVpF8WXdTK0ooUd2Wm8rxsT3Kvg");
        data.setSrc_lat(srcPoint.get_Latitude());
        data.setSrc_lng(srcPoint.get_Longitude());
        data.setDest_lat(destPoint.get_Latitude());
        data.setDest_lng(destPoint.get_Longitude());
        startActivity(new Intent(DrawPath.this,RoutePath.class)); 

    }



}

这是我的日志:

03-13 05:19:26.337: D/Insert:(618): Inserting ..
03-13 05:19:30.940: E/Database(618): Error inserting _Longitude=28.240736 _RNumber=C102 _Altitude=1227.0 _Latitude=-12.8048 _GPSPoint_ID=0
03-13 05:19:30.940: E/Database(618): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
03-13 05:19:30.940: E/Database(618):    at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
03-13 05:19:30.940: E/Database(618):    at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:55)
03-13 05:19:30.940: E/Database(618):    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1549)
03-13 05:19:30.940: E/Database(618):    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
03-13 05:19:30.940: E/Database(618):    at com.agarwal.route.MRLDatabaseHandler.addCoordinate(MRLDatabaseHandler.java:84)
03-13 05:19:30.940: E/Database(618):    at com.agarwal.route.DrawPath.onCreate(DrawPath.java:20)
03-13 05:19:30.940: E/Database(618):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-13 05:19:30.940: E/Database(618):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-13 05:19:30.940: E/Database(618):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-13 05:19:30.940: E/Database(618):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-13 05:19:30.940: E/Database(618):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-13 05:19:30.940: E/Database(618):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-13 05:19:30.940: E/Database(618):    at android.os.Looper.loop(Looper.java:123)
03-13 05:19:30.940: E/Database(618):    at android.app.ActivityThread.main(ActivityThread.java:4627)
03-13 05:19:30.940: E/Database(618):    at java.lang.reflect.Method.invokeNative(Native Method)
03-13 05:19:30.940: E/Database(618):    at java.lang.reflect.Method.invoke(Method.java:521)
03-13 05:19:30.940: E/Database(618):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-13 05:19:30.940: E/Database(618):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-13 05:19:30.940: E/Database(618):    at dalvik.system.NativeStart.main(Native Method)
4

1 回答 1

2

您试图INTEGER PRIMARY KEY一遍又一遍地将值 0 添加到列中。这会导致约束失败。

要修复它,请从以下位置删除此行addCoordinate()

values.put(KEY_ID , point.get_GPSPoint_ID());

要捕获自动生成的 id 值,请从以下位置获取返回值insert()

long id = db.insert(TABLE_LOCATIONS, null, values);
point.set_GPSPoint_ID(id);

(老问题,但被编辑撞到了。)

于 2014-02-28T06:43:11.937 回答