原因:android.database.sqlite.SQLiteException:表已存在

原因:android.database.sqlite.SQLiteException:表已存在,android,mysql,database,sqlite,Android,Mysql,Database,Sqlite,我的sqlite3数据库中有一个名为Courts的表。根据我的代码,如果表已经存在,它应该删除它,但它不存在,并给我一个错误,因为它正在创建一个已经存在的表。有什么想法吗?提前谢谢 package com.iu.ajchong.ball_in; /** * Created by andrewchong on 3/23/17. */ import android.content.ContentValues; import android.content.Context; import andr

我的sqlite3数据库中有一个名为Courts的表。根据我的代码,如果表已经存在,它应该删除它,但它不存在,并给我一个错误,因为它正在创建一个已经存在的表。有什么想法吗?提前谢谢

package com.iu.ajchong.ball_in;

/**
* Created by andrewchong on 3/23/17.
*/

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.HashMap;

public class CourtsDBHandler extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 5;

    private static final String TABLE_COURTS = "Courts";
    private static final String COLUMN_COURTID_ = "court_id";
    private static final String COLUMN_NAME = "name";
    private static final String COLUMN_STREET = "street";
    private static final String COLUMN_CITY = "city";
    private static final String COLUMN_STATE = "state";
    private static final String COLUMN_ZIP = "zip";


    public CourtsDBHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String CREATE_COURTS_TABLE = "CREATE TABLE " +
                TABLE_COURTS + "(" +
                COLUMN_COURTID_+ " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COLUMN_NAME + " TEXT, " +
                COLUMN_STREET + " TEXT, " +
                COLUMN_CITY + " TEXT, " +
                COLUMN_STATE + " TEXT, " +
                COLUMN_ZIP + " TEXT)";

        db.execSQL(CREATE_COURTS_TABLE);
        addCourt();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_COURTS);

        onCreate(db);
    }





    public void addCourt(){
        ContentValues values = new ContentValues();


        ArrayList<ArrayList<String>> myMap = feedDB();


        //iterate through the outer ArrayList and get each ArrayList
        //get the values of each column from the ArrayList
        //System.out.println("Size: "+ myMap.size());
        //System.out.println("first value is " + myMap.get(0).get(0).toString());
        //advanced for loop
        for(ArrayList<String> each : myMap) {
            //System.out.println(each.get(0).toString()+ " is the value from DB");

            values.put(COLUMN_NAME,each.get(0).toString());
            values.put(COLUMN_STREET,each.get(1).toString());
            values.put(COLUMN_CITY,each.get(2).toString());
            values.put(COLUMN_STATE,each.get(3).toString());
            values.put(COLUMN_ZIP,each.get(4).toString());


            SQLiteDatabase db = this.getWritableDatabase();
            try {
                this.onCreate(db);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                db.insert(TABLE_COURTS, null, values);
            } catch (Exception e) {
                e.printStackTrace();
            }
            db.close();
        }





        /* */
    }

    public ArrayList<ArrayList<String>> feedDB(){

        ArrayList<ArrayList<String>> map = new ArrayList<>();

        ArrayList<String> myList = new ArrayList<>();
        ArrayList<String> myList2 = new ArrayList<>();
        ArrayList<String> myList3 = new ArrayList<>();

        myList.add("Briscoe");
        myList.add("1225 N Fee Ln");
        myList.add("Bloomington");
        myList.add("IN");
        myList.add("47408");

        map.add(myList);




        myList2.add("Forest");
        myList2.add("1725 East Third St.");
        myList2.add("Bloomington");
        myList2.add("IN");
        myList2.add("47408");

        map.add(myList2);



        myList3.add("Wright");
        myList3.add("501 N Jordan Ave.");
        myList3.add("Bloomington");
        myList3.add("IN");
        myList3.add("47406");

        map.add(myList3);


        return map;


    }


}
包com.iu.ajchong.ball\u in;
/**
*由andrewchong于2017年3月23日创建。
*/
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入java.util.ArrayList;
导入java.util.HashMap;
公共类CourtsDBHandler扩展了SQLiteOpenHelper{
私有静态最终字符串数据库\u NAME=“mydatabase.db”;
私有静态最终int数据库_VERSION=5;
私有静态最终字符串表\u COURTS=“COURTS”;
私有静态最终字符串列\u COURTID=“court\u id”;
私有静态最终字符串列\u NAME=“NAME”;
私有静态最终字符串列_STREET=“STREET”;
私有静态最终字符串列_CITY=“CITY”;
私有静态最终字符串列_STATE=“STATE”;
私有静态最终字符串列_ZIP=“ZIP”;
公共法庭Bhandler(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
字符串CREATE\u\u TABLE=“CREATE TABLE”+
表_+“(”+
列“\u COURTID”+“整型主键自动递增,”+
列名称+文本+
“街道+文本”列+
“城市+文本”列+
列_状态+“文本,”+
列_ZIP+“文本)”;
execSQL(创建表);
addCourt();
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+表_);
onCreate(db);
}
公共法庭(){
ContentValues=新的ContentValues();
ArrayList myMap=feedDB();
//遍历外部ArrayList并获取每个ArrayList
//从ArrayList获取每列的值
//System.out.println(“大小:+myMap.Size());
//System.out.println(“第一个值是”+myMap.get(0.get(0.toString());
//高级for循环
for(ArrayList each:myMap){
//System.out.println(each.get(0).toString()+“是来自DB的值”);
value.put(列名称,each.get(0.toString());
value.put(COLUMN_STREET,each.get(1.toString());
value.put(COLUMN_CITY,each.get(2.toString());
value.put(COLUMN_STATE,each.get(3.toString());
value.put(COLUMN_ZIP,each.get(4.toString());
SQLiteDatabase db=this.getWritableDatabase();
试一试{
这个.onCreate(db);
}捕获(例外e){
e、 printStackTrace();
}
试一试{
db.insert(表1,空,值);
}捕获(例外e){
e、 printStackTrace();
}
db.close();
}
/* */
}
公共ArrayList feedDB(){
ArrayList映射=新的ArrayList();
ArrayList myList=新的ArrayList();
ArrayList myList2=新的ArrayList();
ArrayList myList3=新的ArrayList();
myList.add(“布里斯科”);
myList.添加(“1225 N费用项次”);
myList.add(“布鲁明顿”);
myList.add(“IN”);
myList.添加(“47408”);
map.add(myList);
myList2.添加(“森林”);
myList2.添加(“1725东三街”);
myList2.添加(“布鲁明顿”);
myList2.添加(“IN”);
myList2.添加(“47408”);
地图添加(myList2);
myList3.添加(“Wright”);
myList3.添加(“北约旦大道501号”);
myList3.添加(“布鲁明顿”);
myList3.添加(“IN”);
myList3.添加(“47406”);
地图添加(myList3);
返回图;
}
}
递归调用您的
onCreate()
。特别是,这段代码位于一个名为from
onCreate()
的方法中:

getWritableDatabase()
getReadableDatabase()
在需要时调用
onCreate()
。从onCreate()调用的代码不得再次执行此操作。相反,如果需要,将收到的
SQLiteDatabase
作为参数传递

您不应该这样自己调用
onCreate()
。框架将为您完成这项工作

进一步阅读:

递归调用您的
onCreate()
。特别是,这段代码位于一个名为from
onCreate()
的方法中:

getWritableDatabase()
getReadableDatabase()
在需要时调用
onCreate()
。从onCreate()调用的代码不得再次执行此操作。相反,如果需要,将收到的
SQLiteDatabase
作为参数传递

您不应该这样自己调用
onCreate()
。框架将为您完成这项工作


进一步阅读:

有此行的版本,是DATABASE_version=4吗?如果不是,则不运行onUpgrade。包含此行的版本是否为数据库_version=4?如果没有,onUpgrade不会运行。嗯,当我注释该零件时,它仍然会给我相同的错误。Stacktrace将有助于进一步诊断。嗯,当我注释该零件时,它仍然会给我相同的错误。Stacktrace将有助于进一步诊断
SQLiteDatabase db = this.getWritableDatabase();
try {
    this.onCreate(db);