2014-12-07 3 views
-1

Я создаю приложение для Android, имеющее две базы данных. One - это автономная база данных SQLite непосредственно на устройстве, а другая - на общедоступном сервере, которая используется для обновления автономного.Вставка данных SQLite SQL

Это способ, которым я вставляя данные в моей базе данных 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

+0

Я использовал именно эту часть кода, чтобы она работала: db.execSQL (TABLE_LINE_CREATE); \t \t \t \t \t db.execSQL ("INSERT INTO" + TABLE_LINE + "(" \t + KEY_LINE_NAME + ") ЗНАЧЕНИЯ ('1');"); \t \t \t \t \t db.execSQL ("INSERT INTO" + TABLE_LINE + "(" \t + KEY_LINE_NAME + ") ЗНАЧЕНИЯ ('2');"); – Miquello

+0

ОК это работает? или любой вопрос? – Siva

Смежные вопросы