【发布时间】:2021-09-19 22:01:41
【问题描述】:
我正在尝试在 android studio SQLite 数据库中动态创建多个表。我在下面附上了两个类 DatabaseHelper.java 和 DatabaseManager.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();
}
【问题讨论】:
-
不清楚变量 jabberId 来自哪里。由于您共享的代码中没有指定它的值,我假设它的长度为零,因此您在 MainActivity 中的循环只运行一次。
-
我已经编辑了我的问题
-
只有一个数据库还是只有一个表?
-
同一个数据库需要创建多个表。以上代码现在只创建一个表
标签: android sqlite android-studio android-sqlite