如何在android中的SQLite数据库中动态存储列?

时间:2016-09-03 06:13:24

标签: android sqlite

我是Android开发的新手。请帮助我如何动态地在Sqlite数据库中存储列名。

在此处创建数据库:

  public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  db.execSQL(
  "create table contacts " +
  "(id integer primary key, name text,phone text,email text, street text,place text)"
  );
}

在此处插入查询:

 public boolean insertContact  (String name, String phone, String email,String street,String place)                                     
{
  SQLiteDatabase db = this.getWritableDatabase();
  ContentValues contentValues = new ContentValues();
  contentValues.put("name", name);
  contentValues.put("phone", phone);
  contentValues.put("email", email);    
  contentValues.put("street", street);
  contentValues.put("place", place);
  db.insert("contacts", null, contentValues);
  return true;
 }

2 个答案:

答案 0 :(得分:1)

您可以在onUpgrade()方法上使用ALTER TABLE函数,如下所示:

 @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// If you need to add a column
if (newVersion > oldVersion) {
    db.execSQL("ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0");
}
}

显然,SQLite将根据列定义而有所不同

答案 1 :(得分:0)

您无需为表中的每一列提供值来插入新行。您只需将方法中的代码更改为:

即可
public long insertContact(ContentValues contentValues) {
    return db.insert("contacts", null, contentValues);
}

让调用函数决定要插入哪些值,可以是全部,部分或全部可用列。未指定的任何值将在表中为null。例如,如果调用函数执行:

EditText name, email;

// ...

ContentValues values = new ContentValues();
values.put("name", name.getText().toString());
values.put("email", email.getText().toString());
insertContact(values);

将使用" name"在数据库中插入一个新行。和"电子邮件"已填写其余列null