【问题标题】:Adding another table in Database android在数据库android中添加另一个表
【发布时间】:2015-12-10 16:20:54
【问题描述】:

我可以用这种方式在我的数据库中添加另一个表吗?看看我的 onupgrade 我试过这种方式是否可能。一件事是每次我们添加或删除信息时都会升级数据库。??

public class DataBaseOperations extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "+
        mDatabase.Tableinfo.Table_Name +"("
        +mDatabase.Tableinfo.Name+" TEXT,"
        +mDatabase.Tableinfo.phone+" INTEGER,"
        +mDatabase.Tableinfo.status+" TEXT,"
        +mDatabase.Tableinfo.Pic+" BLOB"+")";
private static final String Contacts_Table = "CREATE TABLE "+
        mDatabase.Tableinfo.contacts +"("
        +mDatabase.Tableinfo.Contacts_id+" INTEGER PRIMARY KEY,"
        +mDatabase.Tableinfo.Contacts_name+" TEXT,"
        +mDatabase.Tableinfo.Contacts_phone+" INTEGER,"
        +mDatabase.Tableinfo.status_contact+" TEXT,"
        +mDatabase.Tableinfo.Contact_pic+" BLOB"+")";

public DataBaseOperations(Context context) {
    super(context, mDatabase.Tableinfo.Database_Name, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(SQL_CREATE_ENTRIES);


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if(newVersion==1){
    db.execSQL(Contacts_Table);
    onCreate(db);

  }
}

这是我的那个合同课。

public class mDatabase {
public mDatabase(){
}
 public static abstract class Tableinfo{
 public static final String Name = "Name";
 public static final String status = "status";
 public static final String phone = "Phone";
 public static final String Pic  = "Pro_pic";
 public static final String Database_Name = "User_info.db";
 public static final String Table_Name = "User";
 public static final String contacts = "Contacts";
 public static final String Contacts_id= "Contact_id";
 public static final String Contacts_name = "Contacts name";
 public static final String Contacts_phone = "Contacts phone No";
 public static final String status_contact = "Status";
 public static final String Contact_pic = "pic";
}
}

【问题讨论】:

  • onUpgrade 在您升级数据库时被调用。最好将所有 create table 语句放在 onCreate 中,因为它在第一次创建数据库时调用,并且标题显示 mysql 将其更改为 sqlite
  • 但它不会在 onCreate() 上创建第二个表; .它只创建第一个。
  • 您没有创建第二个表的代码

标签: android sqlite


【解决方案1】:

没有。

您的onUpgrade 只需调用

db.execSQL(SQL_CREATE_ENTRIES);

然后重定向到

onCreate(db);

它再次调用相同的东西。

看看这个答案。它提供了一种更好的方式来处理升级。

Upgrade database on deployed Android app on update

作为澄清。 onCreate 仅在数据库不存在时调用。

如果数据库存在并且现有数据库版本号低于您在 OpenHelper 的构造函数中使用的版本号,则调用onUpgrade。

如果数据库存在且版本号相同,则不调用。

【讨论】:

  • 请再看一遍问题。这是一个错误
  • 还是不行。您正在从 onUpgrade 重定向到 OnCreate。首次使用 onCreate 创建数据库。然后在版本号更改为 UPGRADE 您的数据库时使用 onUpgrade。再次阅读我对我链接的问题的回答,它提供了一种处理升级的简单方法。
  • 如果我在 onCreate 中添加 db.execSQL(Contatcs-);它应该可以正常工作,因为它会重定向。对吗?
  • 你的 oncreate 已经包含了它。请停止尝试重定向。这不是一个好主意。阅读我附加到我的答案的额外数据。该文档还包含您需要的一切。一个真正的应用几乎不会想要从 onUpgrade 重定向到 onCreate。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2014-05-17
  • 1970-01-01
相关资源
最近更新 更多