[英]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.