我的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一起添加记录?
答案 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...
}
作为旁注,如果您的数据库比这个简单示例更复杂,您可能希望将表创建和初始化委托给其他方法甚至类。