如何在Android Studio数据库中创建多个表

5

目前我正在跟随ProgrammingKnowledge频道在youtube上关于Android数据库创建的教程,但它仅适用于一个表,而我需要在数据库中有3个表,但却无法处理它。

这是我目前拥有的代码。

public class DatabaseHelper extends SQLiteOpenHelper {

    //database name declaration
    public static final String DATABASE_NAME = "museum.db";
    public static final String TABLE_NAME = "exponent_table";
    public static final String COL_1 = "ID";
    public static final String COL_2 = "TITLE";
    public static final String COL_3 = "STORY";
    public static final String COL_4 = "AUTHOR";
    public static final String COL_5 = "DATE";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
        SQLiteDatabase db= this.getWritableDatabase(); //will create database and table, just for checking, will be replaced
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //creating tables ???
          db.execSQL("create table "+TABLE_NAME+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, STORY TEXT, AUTHOR TEXT, DATE STRING)");
          
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(db);
    }
}

我在链接中看到了类似的东西:多表数据库 SQLite Android,但我仍然不理解。
3个回答

11

这篇文章 是非常好的教程..阅读它

像这样您可以创建多个表

@Override
public void onCreate(SQLiteDatabase db) {   
  db.execSQL("create table "+TABLE_NAME+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, STORY TEXT, AUTHOR TEXT, DATE STRING)");
  db.execSQL("create table "+TABLE_NAME1+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, Table1Field TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME1);
    onCreate(db);
}

1

你只需要调用更多的 db.execSQL(sqlQuery); 方法。

例如:

db.execSQL("create table "+TABLE_NAME+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, STORY TEXT, AUTHOR TEXT, DATE STRING)");
db.execSQL("create table "+TABLE_NAME2+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, STORY TEXT, AUTHOR TEXT, DATE STRING)");
db.execSQL("create table "+TABLE_NAME3+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, STORY TEXT, AUTHOR TEXT, DATE STRING)");

如果您不了解SQL, 我建议在这里之前学习它。

0
在 Kotlin 中,我将数据库循环放在一个常量数组中,所以我只需在我的数组中添加表的名称,就像这样:
我的对象 cons
    package app.packagename

    object cons {
      val tableNames = arrayOf(
        0*/"tableZero",
        1*/"tableOne",
        2*/"tableTwo"
      )
    } 

我的SQLiteDatabase

package app.packagename

    import app.packagename.cons
    import android.content.Context
    import android.database.sqlite.SQLiteDatabase
    import android.database.sqlite.SQLiteOpenHelper

        class DBHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
            override fun onCreate(db: SQLiteDatabase) {
                for(i in cons.tableNames.indices){
                    val createProductsTable = ("CREATE TABLE " + cons.tableNames[i] + "("
                            + Business.idKey + " INTEGER PRIMARY KEY AUTOINCREMENT ,"
                            + Business.KEY_a + " TEXT, "
                            + Business.KEY_b + " TEXT, "
                            + Business.KEY_c + " TEXT, "
                            + Business.KEY_d + " TEXT, "
                            + Business.KEY_e + " INTEGER )")
                    db.execSQL(createProductsTable)
                }
            }
            override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
                // Drop older table if existed, all data will be gone!!!
                for(i in cons.tableNames.indices){

                    db.execSQL("DROP TABLE IF EXISTS ${cons.tableNames[i]}")

                    // Create tables again
                    onCreate(db)
                }
            }
            companion object {
                //version number to upgrade database version
                //each time if you Add, Edit table, you need to change the
                //version number.
                private val DATABASE_VERSION = 1

                // Database Name
                private val DATABASE_NAME = "tables.db"
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接