1

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;
}

}

既存のレコードを使用してデータベースを作成したい場合はどうすればよいですか。データベースの作成と一緒にレコードを追加するにはどうすればよいですか?

4

3 に答える 3

2

データを挿入するために必要なすべての挿入ステートメントを含むファイルを作成し、そのファイルをアセットフォルダーに配置できます。データベースを作成したら、ファイルの各行を取得して、を実行しますrawQuery

他の答えが示すように、他の方法もあります。

于 2012-10-26T18:17:21.710 に答える
2

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
   }

これでは、状態をabeanオブジェクトとしてメソッドaddStatesModelに渡します。

4)または、別のデータベースにデータがある場合は、2つのデータベースを接続してから、copyコマンドを実行して、あるテーブルから別のテーブルにデータを転送できます。または、SQLite Managerを使用して、あるデータベースからcsvファイルまたはxmlにテーブルをエクスポートできます。ファイルを作成し、そのファイルをテーブルにインポートします。

于 2012-10-26T18:18:38.637 に答える
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...
} 

ちなみに、データベースがこの単純な例よりも複雑な場合は、テーブルの作成と初期化を他のメソッドまたはクラスに委任することをお勧めします。

于 2012-10-26T18:16:14.053 に答える