2014-12-07 103 views
-1

我正在創建一個有兩個數據庫的android應用程序。一個是直接在設備上的脫機SQLite數據庫,另一個是在公共服務器上用於更新脫機的SQLite數據庫。Android SQLite數據插入

這是我將數據插入我的SQLite數據庫的方式:

我的活動:

package com.empekapp; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class Linie extends Activity { 
DBAdapter db 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.linie); 
    openDB(); 
} 
private void openDB(){ 
    db = new DBAdapter(this); 
    db.open(); 
    db.insertLineRecord("1"); 
    db.insertLineRecord("2"); 
} 

而且在我的數據庫適配器:

public static final String KEY_LINE_ROWID = "_id"; 
public static final String KEY_LINE_NAME = "line_name"; 
public static final int COL_LINE_ROWID = 0; 
public static final int COL_LINE_NAME = 1; 

public static final String[] ALL_LINE_KEYS = new String[] {KEY_LINE_ROWID, KEY_LINE_NAME}; 
private static final String TABLE_LINE = "lines"; 

private static final String TABLE_LINE_CREATE = 
    "create table if not exists " + TABLE_LINE + "(" 
    + KEY_LINE_ROWID + " integer primary key autoincrement, " 
    + KEY_LINE_NAME + " VARCHAR not null unique);"; 

private final Context context; 

private DatabaseHelper DBHelper; 
private SQLiteDatabase db; 

public DBAdapter (Context ctx){ 
    this.context = ctx; 
    DBHelper = new DatabaseHelper(context); 
} 

private static class DatabaseHelper extends SQLiteOpenHelper{ 
    DatabaseHelper(Context context){ 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

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

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

public DBAdapter open(){ 
    db = DBHelper.getWritableDatabase(); 
    return this; 
} 

public void close(){ 
    DBHelper.close(); 
} 

public void insertLineRecord(String line_name){ 
    db.execSQL("INSERT OR IGNORE INTO " + TABLE_LINE + "('" 
      + KEY_LINE_NAME + "') VALUES ('" 
      + line_name + "');"); 
} 

一般來說這種解決方案是不夠對我來說..但是每當我打開該活動以防止這種情況時,數據被插入到表中我設置了唯一的約束,但是如何僅在創建該表時插入數據一次像這樣的情況?

回答

0

使用數據插入數據庫適配器類的onCreate,因爲這會被調用一次當此創建的數據庫,你可以把它插入只有一次,沒有必要獨特constaraint以及

像這樣:

public void onCreate(SQLiteDatabase db) { 
      db.execSQL(TABLE_LINE_CREATE); 
db.insertLineRecord("1"); 
    db.insertLineRecord("2"); 

    } 
+0

我想這個工程,非常感謝。我希望這會解決我所有的問題:) – Miquello 2014-12-07 14:36:51

+0

我正是使用這部分代碼才能使它工作: db.execSQL(TABLE_LINE_CREATE); (「INSERT INTO」+ TABLE_LINE +「('」\t + KEY_LINE_NAME +「')VALUES('1');」); (「INSERT INTO」+ TABLE_LINE +「('」\t + KEY_LINE_NAME +「')VALUES('2');」); – Miquello 2014-12-07 15:00:18

+0

好的,這工作?或任何問題? – Siva 2014-12-07 15:02:10