在SQL表错误创建表已经存在 [英] Error Creating table in SQL table already exists

查看:545
本文介绍了在SQL表错误创建表已经存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经写命令,并创建表的onCreate() 的DatabaseManager 类的方法,它扩展了 SQLiteOpenHelper 类。当打开数据库时,的onCreate()方法被调用的第一次。但仍有一个错误,说表corporate_boxes已经存在。

open方法

 公众开放的DatabaseManager(){   ourHelper =新的DatabaseManager(背景);
   ourDatabase = ourHelper.getWritableDatabase();
   返回此;}

onCreate方法

  @覆盖
公共无效的onCreate(SQLiteDatabase DB){
db.execSQL(DATABASE_CREATE_TABLE2);
}

DATABASE_CREATE_TABLE2 是一个字符串卫生组织定义如下,

 私有静态最后弦乐DATABASE_CREATE_TABLE2 =CREATE TABLE
+ DATABASE_TABLE2 +(+ KEY_ROWID
+INTEGER PRIMARY KEY AUTOINCREMENT,+ KEY_PRODUCT
+TEXT NOT NULL,+ KEY_PRICE +TEXT NOT NULL,+ KEY_IMAGEID
+TEXT NOT NULL);;

我也试图与 CREATE TABLE IF NOT EXISTS 但仍是给了同样的错误。

下面是正在显示的栈跟踪

 七月2日至21日:59:38.296:E / AndroidRuntime(1984):致命异常:主要
7月2日至21日:59:38.296:E / AndroidRuntime(1984):android.database.sqlite.SQLiteException:表corporate_boxes已经存在(code 1),在编译:CREATE TABLE corporate_boxes(_id INTEGER PRIMARY KEY AUTOINCREMENT, _name文本NOT NULL,TEXT _price NOT NULL,_imageid文本NOT NULL);
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.database.sqlite.SQLiteConnection.native prepareStatement(本机方法)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.database.sqlite.SQLiteConnection.acquire preparedStatement(SQLiteConnection.java:882)
7月2日至21日:59:38.296:E / AndroidRuntime(1984年):在android.database.sqlite.SQLiteConnection prepare(SQLiteConnection.java:493)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.database.sqlite.SQLiteSession prepare(SQLiteSession.java:588)
7月2日至21日:59:38.296:E / AndroidRuntime(1984年):在android.database.sqlite.SQLiteProgram<&初始化GT;(SQLiteProgram.java:58)
7月2日至21日:59:38.296:E / AndroidRuntime(1984年):在android.database.sqlite.SQLiteStatement<&初始化GT;(SQLiteStatement.java:31)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在appistic.services.tricouschocolates.categories.DatabaseManager.onCreate(DatabaseManager.java:199)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在appistic.services.tricouschocolates.categories.DatabaseManager.open(DatabaseManager.java:116)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在appistic.services.tricouschocolates.Products.onItemSelected(Products.java:51)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.widget.AdapterView.access $ 200(AdapterView.java:49)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.widget.AdapterView $ SelectionNotifier.run(AdapterView.java:860)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.os.Handler.handleCallback(Handler.java:725)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.os.Handler.dispatchMessage(Handler.java:92)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.os.Looper.loop(Looper.java:137)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在android.app.ActivityThread.main(ActivityThread.java:5039)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在java.lang.reflect.Method.invokeNative(本机方法)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在java.lang.reflect.Method.invoke(Method.java:511)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
7月2日至21日:59:38.296:E / AndroidRuntime(1984):在dalvik.system.NativeStart.main(本机方法)


解决方案

更改数据库版本号和尝试,一旦它可能会使用完全给你。

I have written commands to create table in onCreate() method of DatabaseManager class which extends SQLiteOpenHelper class. When opening database, the onCreate() method is being called for the first time. but still there is an error saying table corporate_boxes already exists.

The open method

public DatabaseManager open() {  

   ourHelper = new DatabaseManager(context);  
   ourDatabase = ourHelper.getWritableDatabase();  
   return this;  

}

Oncreate Method

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE_TABLE2);
}

DATABASE_CREATE_TABLE2 is a string whos definition is given below,

private static final String DATABASE_CREATE_TABLE2 = "CREATE TABLE "
+ DATABASE_TABLE2 + " ( " + KEY_ROWID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_PRODUCT
+ " TEXT NOT NULL, " + KEY_PRICE + " TEXT NOT NULL," + KEY_IMAGEID
+ " TEXT NOT NULL );";

I also tried with CREATE TABLE IF NOT EXISTS but still it is giving the same error.

Here is the stacktrace that is being displayed.

02-21 07:59:38.296: E/AndroidRuntime(1984): FATAL EXCEPTION: main
02-21 07:59:38.296: E/AndroidRuntime(1984): android.database.sqlite.SQLiteException: table corporate_boxes already exists (code 1): , while compiling: CREATE TABLE corporate_boxes ( _id INTEGER PRIMARY KEY AUTOINCREMENT, _name TEXT NOT NULL, _price TEXT NOT NULL,_imageid TEXT NOT NULL );
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at appistic.services.tricouschocolates.categories.DatabaseManager.onCreate(DatabaseManager.java:199)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at appistic.services.tricouschocolates.categories.DatabaseManager.open(DatabaseManager.java:116)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at appistic.services.tricouschocolates.Products.onItemSelected(Products.java:51)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.widget.AdapterView.access$200(AdapterView.java:49)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.os.Handler.handleCallback(Handler.java:725)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.os.Looper.loop(Looper.java:137)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at android.app.ActivityThread.main(ActivityThread.java:5039)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at java.lang.reflect.Method.invokeNative(Native Method)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at java.lang.reflect.Method.invoke(Method.java:511)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-21 07:59:38.296: E/AndroidRuntime(1984):     at dalvik.system.NativeStart.main(Native Method)

解决方案

Change the data base version number and try once it may use full to you.

这篇关于在SQL表错误创建表已经存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆