当前位置: 首页 > 面试题库 >

如何在sqlite的数据库中添加第二张表?

韦安怡
2023-03-14
问题内容

我有数据库examguide,已经创建了一个表table_subject,现在
我想table_chapter在该数据库中创建第二个表()。我的问题是如何在现有数据库中添加此表?我有以下代码。任何帮助表示赞赏。

private static final String DATABASE_CREATE = "create table IF NOT EXISTS "
        + TABLE_SUBJECT + "( " + COLUMN_ID
        + " integer primary key autoincrement, " 
        + COLUMN_SUBJECT + " text not null, "
        + COLUMN_CHAPTER + " text, "
        + COLUMN_QUESTION + " text not null,"
        + COLUMN_OPTIONA + " text not null,"
        + COLUMN_OPTIONB + " text not null,"
        + COLUMN_OPTIONC + " text not null,"
        + COLUMN_OPTIOND + " text not null,"
        + COLUMN_CORRECT + " text not null,"
        + COLUMN_CONFIRM + " text not null);";

    private static final String DATABASE_CREATE1 = "create table IF NOT EXISTS "
    + TABLE_CHAPTER + "( " + COLUMN_ID
    + " integer primary key autoincrement, " 
    + COLUMN_SUBJECT + " text not null, "
    + COLUMN_CHAPTER + " text, "
    + COLUMN_QUESTION + " text not null,"
    + COLUMN_OPTIONA + " text not null,"
    + COLUMN_OPTIONB + " text not null,"
    + COLUMN_OPTIONC + " text not null,"
    + COLUMN_OPTIOND + " text not null,"
    + COLUMN_CORRECT + " text not null,"
    + COLUMN_CONFIRM + " text not null);";

public MySQLiteHelper open() throws SQLException 
{
    db = this.getWritableDatabase();
    return this;
}

public MySQLiteHelper(Context context)
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION);

}


@Override
public void onCreate(SQLiteDatabase database) {

    database.execSQL(DATABASE_CREATE);
    database.execSQL(DATABASE_CREATE1);

}

此代码不会创建第二个表。我想要数据库中的两个表。
它在logcat中显示以下错误。

03-21 18:31:06.551: ERROR/Database(8255): Error inserting chapter=paging correctoption=shadow copy craete a duplicate copy of page subject=operating system question=what is shadow copy? optiona=shadow copy craete a duplicate copy of page confirm=YES optionb=sahdow copy create paging  optionc=shadow copy delete duplicate page optiond=shadow copy delete original and create shadow copy
03-21 18:31:06.551: ERROR/Database(8255): android.database.sqlite.SQLiteException: no such table: chapter: , while compiling: INSERT INTO chapter(chapter, correctoption, subject, question, optiona, confirm, optionb, optionc, optiond) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?);
03-21 18:31:06.551: ERROR/Database(8255):     at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
03-21 18:31:06.551: ERROR/Database(8255):     at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
03-21 18:31:06.551: ERROR/Database(8255):     at   android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
03-21 18:31:06.551: ERROR/Database(8255):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
03-21 18:31:06.551: ERROR/Database(8255):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
03-21 18:31:06.551: ERROR/Database(8255):     at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
03-21 18:31:06.551: ERROR/Database(8255):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
03-21 18:31:06.551: ERROR/Database(8255):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
03-21 18:31:06.551: ERROR/Database(8255):     at com.example.examguide.MySQLiteHelper.insertChapterData(MySQLiteHelper.java:212)
03-21 18:31:06.551: ERROR/Database(8255):     at com.example.examguide.ObjectiveAddActivity$2.onClick(ObjectiveAddActivity.java:155)

问题答案:

制作另一个CREATE TABLEString,然后在您的中onCreateexecSQL再次调用:

database.execSQL(DATABASE_CREATE1);
database.execSQL(DATABASE_CREATE2);

编辑

要将另一个表添加到已存在的数据库中,请onUpgrade按如下所示修改您的方法。onUpgrade每当需要升级数据库时都会调用;请注意,您必须增加VERSION_NUMBER(您希望将其作为类的私有实例变量包括在内)才能生效。

@Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) {
    db.executeSQL(DATABASE_CREATE2);
}


 类似资料:
  • 问题内容: 这是我的第一篇文章!希望您能帮帮我!:-) 我使用了NotePadExample提供的来自开发人员文档的代码来创建数据库。现在,我想添加第二个表来存储不同的数据。我可以毫无问题地添加注释,并且注释表的创建方式与路由表类似。我只是简单地“复制”并编辑了给定的代码,但是当我尝试插入到新表中时,出现错误消息: “ 0ERROR / Database(370):android.database

  • 问题内容: 首次启动应用程序后,我需要向SQLite数据库添加初始值。我该怎么办? 问题答案: 在DBAdapter.java类文件中,您可以执行此操作。 喜欢这种类型。

  • 我是< code>sqlite数据库的新手,在我的项目中,我需要在创建数据库后添加数据。我尝试了这种方式,这是我的代码。 公共类主要活动扩展活动 { } 我创建了另一个类来打开sqlite数据库。 公共类MySqlHelper扩展SQLiteOpenHelper{ 公共字符串getBird(int id){ 它给我异常 帮助我避免这种情况,并在创建数据库后立即插入数据。

  • 主要内容:语法,实例假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个。SQLite 的 ATTACH DATABASE 语句是用来选择一个特定的数据库,使用该命令后,所有的 SQLite 语句将在附加的数据库下执行。 语法 SQLite 的 ATTACH DATABASE 语句的基本语法如下: 如果数据库尚未被创建,上面的命令将创建一个数据库,如果数据库已存在,则把数据库文件名称与逻辑数据库 '

  • 问题内容: 我有一张桌子,桌子上有个日期 creationDate 。像这样存储时间戳 实际上,我正在使用mysql2sqlite.sh脚本将数据库从mysql转换为sqlite。并且在转换数据库时,它从creationDate列中减少了5:30的时间。这可能是 格林尼治标准时间的 问题。 因此,现在我想更新时间戳,并向creationDate列中的每个条目添加5小时30分钟。 我搜索了很多,但没

  • 问题内容: 我尝试使用go-bindata和packr,但是这些软件包没有显示如何将SQLite数据库文件打包为二进制文件。 我不需要以任何方式更新数据库,我只想在启动时从中读取数据。 如何将SQLite数据库文件嵌入Go二进制文件中? 问题答案: SQLite驱动程序无法从内存(例如,从字节片)读取数据库文件。但是您可以将数据写入临时文件,然后打开该文件: 您可以使用以下方式将数据库写入: 如果