2012-06-13 26 views
0

我是使用sqlite数据库android的新手。现在我已经在Android的我SQLite数据库的问题, 首先我创建第一个表:无法在sqlite中创建第二个表android

 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);"; 

,但它是错误,并在logcat的对它说:

没有这样的表:tableKriteria:在编译:选择idKriteria,namaKriteria从tableKriteria

这里我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 
    } 

} 

}

我已经尝试了所有约一星期解决我的问题,如更改的数据库版本,改变了创建语句为第二个表等,但它没有工作:( 有在这个论坛作为同我的问题很多问题,但它不能解决我的问题,像herehere

家伙请帮助我。 。

以前感谢。

回答

0

看来你可能需要给'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);"; 
+0

谢谢,我已经完成了,但仍然没有工作。仍然是同样的错误。 –

+0

@JonasMFBanurea:你意识到'SQLiteOpenHelper'的'onCreate'方法只会被调用一次(如果数据库不存在)?如果数据库已经被创建,那么'onCreate'永远不会再被调用。您将需要删除数据库,然后再次运行您的代码。 – Squonk

+0

我曾尝试过,即使我已更改数据库版本,清除数据并从我的设备上卸载应用程序。但它仍然没有工作 –

0

如果你的代码仍然是相同的,那么你的第一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); 
    } 

这将删除升级这是不理想的一切,但至少当你改变数据库的版本,它会重新在您的测试表。

+0

这里是错误:没有这样的表:tableKriteria:编译时:select IDKriteria,namaKriteria从tableKriteria。 tableKriteria未创建。 –

+0

并且您确定在进行更改后您将增加数据库版本?还可以尝试在'onCreate()'中注销完整的create语句,以便它们可以被记录,并且可以验证代码是否正在运行。另外,'onUpgrade()'应该做一些事情,要么删除所有的表,然后运行'onCreate()'或者做一些更新。当增加数据库版本时,它会调用'onUpgrade()'而不是'onCreate()'。现在我会在'onUpgrade'中发出'drop table'语句,然后调用'onCreate'。 – stuckless

0

我刚才有这个问题,解决方案是从开始创建所有表。如果你创建一个只有一个表的数据库进行测试,然后你尝试创建剩下的表,它将无法工作。因此,定义一个新的数据库名称并创建您需要的所有表格,这应该足够了。