簡體   English   中英

SQLite數據庫不存儲數據-Android

[英]SQLite database not storing data - Android

我為我的應用程序實現了一種靜態的SQLite數據庫。 該應用一旦構建便只能從數據庫中讀取。 沒有更新或刪除的方法。 我在LogCat中得到一個異常,即RestaurantID不是唯一的。 這是我的實現:

RLocationDatabase.java

public class RLocationDatabase extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "RGeoDbase";

public static final String TABLE_RG = "RGeoDbase";
public static final String R_ID = "RestaurantID";
public static final String R_Name = "Name";
public static final String R_Latitude = "Latitude";
public static final String R_Longitude = "Longitude";

public static final String [] COLUMNS = {R_ID,R_Name,R_Latitude,R_Longitude};


public RLocationDatabase(Context context){
    super(context, DATABASE_NAME, null, DATABASE_VERSION);  
}

@Override
public void onCreate(SQLiteDatabase data){

    String CREATE_DB = "CREATE TABLE RGeoDbase ( " + "RestaurantID VARCHAR(4) PRIMARY KEY, " + "Name TEXT, "
                        + "Latitude DECIMAL(10,8), " + "Longitude DECIMAL(11,8) )";

    data.execSQL(CREATE_DB);
}

@Override
public void onUpgrade(SQLiteDatabase data, int oldV, int newV){

    data.execSQL("DROP TABLE IF EXISTS RGeoDbase");

    this.onCreate(data);
}

public void insertRecord(String id, String name, double latitude, double longitude){
    SQLiteDatabase dbase = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(R_ID, id);
    values.put(R_Name, name);
    values.put(R_Latitude, latitude);
    values.put(R_Longitude, longitude);

    dbase.insert(TABLE_RG, null, values);
}

public Cursor getData(String id){
    SQLiteDatabase dbase = this.getWritableDatabase();
    Cursor cursor = dbase.rawQuery("SELECT * FROM RGeoDbase WHERE Restaurant_ID="+id+"", null);
    return cursor;
}

@SuppressWarnings("rawtypes")
public ArrayList getAllData(){
    ArrayList list = new ArrayList();
    SQLiteDatabase dbase = this.getReadableDatabase();

    Cursor cursor = dbase.rawQuery("SELECT * FROM RGeoDbase", null);
    cursor.moveToFirst();
    while(!cursor.isAfterLast()){
        list.add(cursor.getString(cursor.getColumnIndex(R_Name)));
        cursor.moveToNext();
    }
    return list;
}

MainActivity.java

public class MainActivity extends Activity {

private RLocationDatabase myDatabase;
private SQLiteDatabase data;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

myDatabase = new RLocationDatabase(this);
buildDatabase();

ArrayList a = myDatabase.getAllData();
    for(int i=0; i<a.size(); i++){
        System.out.println(a.indexOf(i));
}
}

public void buildDatabase(){
        myDatabase.insertRecord("0001", "ABC Fastfoods", 22.28416252, 114.13412900);
    }
    }

LogCat:

06-18 16:37:43.359: E/SQLiteDatabase(25373): Error inserting Name=ABC Fastfoods Latitude=22.28416252 Longitude=114.134129 RestaurantID=0001
06-18 16:37:43.359: E/SQLiteDatabase(25373): android.database.sqlite.SQLiteConstraintException: column RestaurantID is not unique (code 19)
ArrayList a = myDatabase.getAllData();
for(int i=0; i<a.size(); i++){
    System.out.println(a.indexOf(i));

indexOf()獲取指定對象的索引。 例如,列表中沒有對象“ 0”,並且返回索引-1。

如果要打印對象本身,請更換

a.indexOf(i)

a.get(i)

要擺脫“非唯一”問題,請將buildDatabase()插入項移動到數據庫助手onCreate()以便在創建數據庫時僅將它們運行一次。

在您的表中,“ RestaurantID”是PRIMARY KEY。無需定義主鍵的值。

你也可以這樣嘗試嗎:

myDatabase.insertRecord("ABC Fastfoods", 22.28416252, 114.13412900);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM