如何用现有数据在android中创建数据库?

时间:2012-10-26 18:09:45

标签: android database sqlite

我的sqlite数据库有问题。我想在Android中使用现有记录创建数据库。 我创建了数据库:

public class PrzyslowiaArabskie  {

private static final String TABLE_NAME = "tabela_przyslowia";
private static final String DATABASE_NAME = "przyslowiadb";
private static final int DATABASE_VERSION = 1;
public static final String KEY_ID = "id";
public static final String KEY_PRZYSLOWIE = "przyslowie";

private DbHelper myHelper;
private final Context myContext;
private SQLiteDatabase myDatabase;




private static class DbHelper extends SQLiteOpenHelper {

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
         db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + 
                   KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                 KEY_PRZYSLOWIE + " TEXT NOT NULL);" );


    } 

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

        onCreate(db);
    }

}
public PrzyslowiaArabskie(Context c) {
    myContext = c;
}
public PrzyslowiaArabskie open() {
    myHelper = new DbHelper(myContext);
    myDatabase = myHelper.getWritableDatabase();
    return this;
}
public void close() {
    myHelper.close();
}
public long createEntry(String przyslowie) {
    ContentValues cv = new ContentValues();
    cv.put(KEY_PRZYSLOWIE, przyslowie);
    return myDatabase.insert(TABLE_NAME, null, cv);

}
public String getData() {
    // TODO Auto-generated method stub
    String[] columns = new String[] { KEY_ID, KEY_PRZYSLOWIE };
    Cursor c = myDatabase.query(TABLE_NAME, columns, null, null, null, null, null);
    String result = "";

    int iRow = c.getColumnIndexOrThrow(KEY_ID);
    int iPrzyslowie = c.getColumnIndexOrThrow(KEY_PRZYSLOWIE);


    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        result = result + c.getString(iRow) + " " + c.getString(iPrzyslowie) + "\n";
    }

    return result;
}

}

如果我想创建具有现有记录的数据库,我该怎么办?如何与create database一起添加记录?

3 个答案:

答案 0 :(得分:1)

您可以创建一个文件,其中包含插入数据所需的所有插入语句,并将该文件放在assets文件夹中。创建数据库后,然后获取文件的每一行并通过rawQuery运行它。

还有其他方法,正如另一个答案所示。

答案 1 :(得分:1)

1)如果您已经拥有数据,那么使用firefox的sqlite管理器来插入数据会更容易。

2)如果您有其他形式的数据,如“CSV”或“XML”,那么您只需使用Firefox的sqlite管理器将该文件导入到您的表中。

3)或者如果您必须从您的应用程序插入数据,那么最好创建一个bean对象,将其发送到您的数据库帮助程序类,并使用任何查询将值插入到您的表中。

举个例子,

    void addStatesModel(StatesModel states) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, states.getName()); // StatesModel Name
    values.put(KEY_CODE, states.getCode()); // StatesModel Phone

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

在这里,我将状态作为方法addStatesModel。

的abean对象传递

4)或者如果您在单独的数据库中有数据,您可以只连接这两个数据库,然后运行copy命令将数据从一个表传输到另一个表。或者只使用SQLite Manager,您可以将表从一个数据库导出到csv文件或xml文件,然后在表中导入该文件。

答案 2 :(得分:0)

您只需在创建表格后在onCreate()方法中插入值:

@Override
public void onCreate(SQLiteDatabase db) {
  db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
      + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
      + KEY_PRZYSLOWIE + " TEXT NOT NULL);" );

  ContentValues values = new ContentValues();
  values.put(KEY_PRZYSLOWIE , "My text");

  db.insert(TABLE_NAME, null, values);
  // ... etc...
} 

作为旁注,如果您的数据库比这个简单示例更复杂,您可能希望将表创建和初始化委托给其他方法甚至类。