无法在安卓工作室SQLite数据库中动态创建多个表



我正试图在android studio SQLite数据库中动态创建多个表。我在下面附上了两个类DatabaseHelper.javaDatabaseManager.java的代码。通过运行下面的代码,只创建了一个表。

DatabaseHelper.java

package com.example.circle;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

static final String DATABASE_NAME = "MY__2MESS11AGES.DB";
public static String TABLE_NAME;
public static String ID = "ID";
public static String MESSAGE_ID = "MESSAGE_ID";
public static String TIME_STAMP = "TIME_STAMP";
public static String MESSAGE = "MESSAGE";
public static String MESSAGE_STATUS = "MESSAGE_STATUS";
public static String VIEW_TYPE = "VIEW_TYPE";

public DatabaseHelper(Context context,String table_name) {
super(context, DATABASE_NAME, null, 1);
TABLE_NAME = table_name;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME +"(ID INTEGER PRIMARY KEY AUTOINCREMENT,MESSAGE_ID TEXT,TIME_STAMP TEXT,MESSAGE TEXT,MESSAGE_STATUS TEXT NOT NULL,VIEW_TYPE TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}

DatabaseManager.java

package com.example.circle;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DatabaseManager {
private DatabaseHelper databaseHelper;
private Context context;
private SQLiteDatabase database;
public DatabaseManager(Context context) {
this.context = context;
}
public DatabaseManager open(String tableName) {
System.out.println("DATA BASE MANAGER =================="+ tableName);
databaseHelper = new DatabaseHelper(context, tableName);
database = databaseHelper.getWritableDatabase();
return this;
}
public void insert(String tableName, String messageId, String timeStamp, String message, String messageStatus, String viewType) {
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.MESSAGE, message);
contentValues.put(DatabaseHelper.MESSAGE_ID, messageId);
contentValues.put(DatabaseHelper.TIME_STAMP, timeStamp);
contentValues.put(DatabaseHelper.MESSAGE_STATUS, messageStatus);
contentValues.put(DatabaseHelper.VIEW_TYPE, viewType);
database.insert(tableName, null, contentValues);
}
public Cursor fetch(String table_name) {
String[] columns = new String[]{DatabaseHelper.ID, DatabaseHelper.MESSAGE_ID, DatabaseHelper.MESSAGE, DatabaseHelper.TIME_STAMP, DatabaseHelper.MESSAGE_STATUS, DatabaseHelper.VIEW_TYPE};
Cursor cursor = database.query(table_name, columns, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}
public int update(String messageId, String tableName,String messageStatus){
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.MESSAGE_STATUS,messageStatus);
int ret = database.update(tableName,contentValues,DatabaseHelper.MESSAGE_ID + "=" + messageId,null);
return ret;
}
public void close() {
databaseHelper.close();
}
}

这就是我在MainActivity.java中调用DatabaseManager.java的构造函数的方式

DatabaseManager databaseManager = new DatabaseManager(this);
String[]  tableName = {"sun", "moon", "one", "two", "four", "three", "five"}; //Name of the tables
for(int i = 0 ;i<tableName.length ; i++){
databaseManager.open(  tableName[i]);
databaseManager.close();
}

根据文档,onCreate在最初创建数据库时只运行一次:

https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase(

因此,它只运行一个"创建表"查询。将带有表名的循环放在onCreate((方法中更有意义。

最新更新