无法在sqlite android中创建第二个表
我是使用sqlite数据库android的新手。现在我的sqlite数据库在android上出现了问题, 首先,我创建第一个表:无法在sqlite android中创建第二个表,android,sqlite,Android,Sqlite,我是使用sqlite数据库android的新手。现在我的sqlite数据库在android上出现了问题, 首先,我创建第一个表: private static final String CREATE_TABLE_MASTER = "create table" + TABLE_MASTER + " (" + MASTER_ID + " integer primary key autoincrement, " + NAMA_MASALAH
private static final String CREATE_TABLE_MASTER = "create table"
+ TABLE_MASTER + " (" + MASTER_ID
+ " integer primary key autoincrement, " + NAMA_MASALAH
+ " Integer not null, " + JLH_KRITERIA + " Integer not null, "
+ JLH_ALTERNATIVE + " text not null);";
这很成功,但当我创建第二个表时:
private static final String CREATE_TABLE_KRITERIA = "create table if not exist "
+TABLE_KRITERIA+ "("+ KRITERIA_ID
+ "integer primary key autoincrement, "
+KRITERIA_NAMA+ "text);";
但这是一个错误,在日志中写道:
没有这样的表:tableKriteria:编译时:从tableKriteria中选择idKriteria、namaKriteria
下面是我的SQLiteAdapter.java的完整代码:
package com.MFrameworkAHP;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
public class SQLiteAdapter {
public static final String NAMA_DATABASE = "MY_DATABASE";
public static final String TABLE_MASTER = "MY_TABLE";
public static final int MYDATABASE_VERSION = 1;
public static final String MASTER_ID = "_id";
public static final String NAMA_MASALAH = "Content1";
public static final String JLH_KRITERIA = "Content2";
public static final String JLH_ALTERNATIVE = "Content3";
public static final String TABLE_KRITERIA = "tableKriteria";
public static final String KRITERIA_ID= "idKriteria";
public static final String KRITERIA_NAMA = "namaKriteria";
public static final String KRITERIA_IDDATA = "idDataKriteria";
// create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String CREATE_TABLE_MASTER = "create table"
+ TABLE_MASTER + " (" + MASTER_ID
+ " integer primary key autoincrement, " + NAMA_MASALAH
+ " Integer not null, " + JLH_KRITERIA + " Integer not null, "
+ JLH_ALTERNATIVE + " text not null);";
private static final String CREATE_TABLE_KRITERIA = "create table if not exist "
+TABLE_KRITERIA+ "("+ KRITERIA_ID
+ "integer primary key autoincrement, "
+KRITERIA_NAMA+ "text);";
;
//private static final String
private SQLiteHelper sqLiteHelper;
private SQLiteDatabase sqLiteDatabase;
private Context context;
public SQLiteAdapter(Context c) {
context = c;
}
public SQLiteAdapter openToRead() throws android.database.SQLException {
sqLiteHelper = new SQLiteHelper(context, NAMA_DATABASE, null,
MYDATABASE_VERSION);
sqLiteDatabase = sqLiteHelper.getReadableDatabase();
return this;
}
public SQLiteAdapter openToWrite() throws android.database.SQLException {
sqLiteHelper = new SQLiteHelper(context, NAMA_DATABASE, null,
MYDATABASE_VERSION);
sqLiteDatabase = sqLiteHelper.getWritableDatabase();
return this;
}
public void close() {
sqLiteHelper.close();
}
public long insert(String namaMasalah, String jlhKriteria, String jlhAlternative) {
ContentValues contentValues = new ContentValues();
contentValues.put(NAMA_MASALAH, namaMasalah);
contentValues.put(JLH_KRITERIA, jlhKriteria);
contentValues.put(JLH_ALTERNATIVE, jlhAlternative);
return sqLiteDatabase.insert(TABLE_MASTER, null, contentValues);
}
public long insertKriteria(String namaKriteria){
ContentValues cv = new ContentValues();
//cv.put(KRITERIA_ID, idKriteria);
cv.put(KRITERIA_NAMA,namaKriteria);
return sqLiteDatabase.insert(TABLE_KRITERIA, null, cv);
}
public int deleteAll() {
return sqLiteDatabase.delete(TABLE_MASTER, null, null);
}
public void delete_byID(int id) {
sqLiteDatabase.delete(TABLE_MASTER, MASTER_ID + "=" + id, null);
}
public void update_byID(int id, String v1, String v2, String v3) {
ContentValues values = new ContentValues();
values.put(NAMA_MASALAH, v1);
values.put(JLH_KRITERIA, v2);
values.put(JLH_ALTERNATIVE, v3);
sqLiteDatabase
.update(TABLE_MASTER, values, MASTER_ID + "=" + id, null);
}
public Cursor queueAll() {
String[] columns = new String[] { MASTER_ID, NAMA_MASALAH, JLH_KRITERIA,
JLH_ALTERNATIVE };
Cursor cursor = sqLiteDatabase.query(TABLE_MASTER, columns, null,
null, null, null, null);
return cursor;
}
public Cursor queueKriteria() {
String[] columns = new String[] { KRITERIA_ID, KRITERIA_NAMA };
Cursor cursor = sqLiteDatabase.query(TABLE_KRITERIA, columns, null,
null, null, null, null);
return cursor;
}
public Cursor queueAll_SortBy_namaMasalah() {
String[] columns = new String[] { MASTER_ID, NAMA_MASALAH, JLH_KRITERIA,
JLH_ALTERNATIVE };
Cursor cursor = sqLiteDatabase.query(TABLE_MASTER, columns, null,
null, null, null, NAMA_MASALAH);
return cursor;
}
public class SQLiteHelper extends SQLiteOpenHelper {
public SQLiteHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_TABLE_KRITERIA);
db.execSQL(CREATE_TABLE_MASTER);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
}
我花了大约一个星期的时间来解决我的问题,比如更改了数据库版本,更改了第二个表的create语句,等等。但是没有成功:(
在这个论坛上有很多问题和我的问题一样,但它不能解决我的问题,比如,等等
伙计们,请帮帮我
谢谢。您可能需要在“创建”字符串中添加一些空格。而且应该是
exists
而不是exist
。请尝试
private static final String CREATE_TABLE_KRITERIA = "create table if not exists "
+TABLE_KRITERIA+ " ("+ KRITERIA_ID
+ " integer primary key autoincrement, "
+KRITERIA_NAMA+ " text);";
如果您的代码仍然相同,那么您的第一个
create table
缺少一个空格
你有
private static final String CREATE_TABLE_MASTER = "create table"
应该是这样
private static final String CREATE_TABLE_MASTER = "create table "
另外,你能发布你的错误信息吗
在onUpgrade()中,您应该执行升级。最快的方法是删除表,然后重新创建
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("MFrameworkAHP", "Upgrading database to " + newVersion);
db.execSQL("drop table if exists " + TABLE_KRITERIA);
db.execSQL("drop table if exists " + TABLE_MASTER);
onCreate(db);
}
public void onCreate(SQLiteDatabase db) {
Log.i("MFrameworkAHP", CREATE_TABLE_KRITERIA);
db.execSQL(CREATE_TABLE_KRITERIA);
Log.i("MFrameworkAHP", CREATE_TABLE_MASTER);
db.execSQL(CREATE_TABLE_MASTER);
}
这将删除升级中不理想的所有内容,但当您更改数据库版本时,它至少会在您的测试中重新创建表。我刚才遇到了这个问题,解决方法是从数据库中创建所有表。如果您创建一个数据库,其中只有一个表用于测试,然后尝试创建其余的表对于表,它将不起作用。因此,定义一个新的数据库名称并立即创建您需要的所有表,这就足够了。谢谢,我已经这样做了,但仍然不起作用。仍然是相同的错误。@JonasMFBanurea:
SQLiteOpenHelper
的onCreate
方法只调用过一次(如果数据库不存在)?如果数据库已经创建,则不会再次调用onCreate
。您需要删除数据库,然后再次运行代码。我已经尝试过了,甚至我已经更改了数据库版本,清除了数据并从我的设备上卸载了应用程序。但它仍然不起作用。错误是:没有这样的表:tableKriteria:while编译:从tableKriteria中选择idKriteria,namaKriteria。tableKriteria未创建。您确定在进行更改后正在增加数据库版本吗?还可以尝试在onCreate()中注销完整的create语句
以便记录它们,您可以验证代码是否正在运行。此外,onUpgrade()
应该做些什么,要么删除所有表,然后运行onCreate()
或者进行某种更新。当数据库版本增加时,它将调用onUpgrade()
而不是onCreate()
。现在我将在onUpgrade
中发出drop table
语句,然后调用onCreate
。