唯一约束失败,SQLite,Java
我有一个包含addPub和getAllpub方法的数据库:唯一约束失败,SQLite,Java,java,android,sqlite,Java,Android,Sqlite,我有一个包含addPub和getAllpub方法的数据库: import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelpe
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.List;
public class Database extends SQLiteOpenHelper{
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "Pubs.db";
public static final String DATABASE_TABLE = "pubsTable";
public static final String COL_1 = "ID";
public static final String COL_2 = "NAME";
public static final String COL_3 = "LAT";
public static final String COL_4 = "LNG";
public static final String COL_5 = "OPEN";
public static final String COL_6 = "CLOSE";
public static final String COL_7 = "PUB";
public static final String COL_8 = "COCKTAIL";
public static final String COL_9 = "BEER";
public static final String COL_10 = "FOOD";
public static final String COL_11 = "DART";
public static final String COL_12 = "POOL";
public static final String COL_13 = "MUSIC";
public static final String COL_14 = "SPORT";
public static final String COL_15 = "OUTSIDE";
public static final String COL_16 = "PAY";
public static final String COL_17 = "QUIZ";
public static final String COL_18 = "PHONE";
public Database(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE" + " " +DATABASE_TABLE + "("
+ COL_1 +" " +"INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COL_2 +" " + "TEXT,"
+ COL_3 +" " + "TEXT,"
+ COL_4 +" " + "TEXT,"
+ COL_5 +" " + "TEXT,"
+ COL_6 +" " + "TEXT,"
+ COL_7 +" " + "TEXT,"
+ COL_8 +" " + "TEXT,"
+ COL_9 +" " + "TEXT,"
+ COL_10 +" " + "TEXT,"
+ COL_11 +" " + "TEXT,"
+ COL_12 +" " + "TEXT,"
+ COL_13 +" " + "TEXT,"
+ COL_14 +" " + "TEXT,"
+ COL_15 +" " + "TEXT,"
+ COL_16 +" " + "TEXT,"
+ COL_17 +" " + "TEXT,"
+ COL_18 +" " + "TEXT"
+ ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
void addPub(Pub pub) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_1, pub.getID());
values.put(COL_2, pub.getName());
values.put(COL_3, pub.getLat());
values.put(COL_4, pub.getLng());
values.put(COL_5, pub.getOpen());
values.put(COL_6, pub.getClose());
values.put(COL_7, pub.getPub());
values.put(COL_8, pub.getCocktail());
values.put(COL_9, pub.getBeer());
values.put(COL_10, pub.getFood());
values.put(COL_11, pub.getDart());
values.put(COL_12, pub.getPool());
values.put(COL_13, pub.getMusic());
values.put(COL_14,pub.getSport());
values.put(COL_15, pub.getOutside());
values.put(COL_16, pub.getPay());
values.put(COL_17, pub.getQuiz());
values.put(COL_18, pub.getPhone_number());
db.insert(DATABASE_TABLE, null, values);
db.close();
}
public List<Pub> getAllPubs() {
List<Pub> pubList = new ArrayList<>();
String selectQuery = "SELECT * FROM " + DATABASE_TABLE;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Pub pub = new Pub();
pub.setID(Integer.parseInt(cursor.getString(0)));
pub.setName(cursor.getString(1));
pub.setLat(cursor.getString(2));
pub.setLng(cursor.getString(3));
pub.setOpen(cursor.getString(4));
pub.setClose(cursor.getString(5));
pub.setPub(cursor.getString(6));
pub.setCocktail(cursor.getString(7));
pub.setBeer(cursor.getString(8));
pub.setFood(cursor.getString(9));
pub.setDart(cursor.getString(10));
pub.setPool(cursor.getString(11));
pub.setMusic(cursor.getString(12));
pub.setSport(cursor.getString(13));
pub.setOutside(cursor.getString(14));
pub.setPay(cursor.getString(15));
pub.setQuiz(cursor.getString(16));
pub.setPhone_number(cursor.getString(17));
pubList.add(pub);
} while (cursor.moveToNext());
}
return pubList;
}
}
但是,当我尝试运行添加函数时,如:
Database db = new Database(this);
db.addPub( new Pub(1,"The Old Queen's Head","53.3809646","-1.4631316","10:00","23:00","p","0","1","1","0","0","1","0","1","0","0","07983559073"));
我得到这个错误:
E/SQLiteDatabase﹕ Error inserting OUTSIDE=1 PUB=p PHONE=07983559073 BEER=1 COCKTAIL=0 LNG=-1.4631316 NAME=The Old Queen's Head ID=1 CLOSE=23:00 LAT=53.3809646 SPORT=0 DART=0 QUIZ=0 OPEN=10:00 PAY=0 MUSIC=1 FOOD=1 POOL=0
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: pubsTable.ID (code 1555)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:780)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
at apps.morgsssssss.pubmap.Database.addPub(Database.java:94)
at apps.morgsssssss.pubmap.MapsActivity.onCreate(MapsActivity.java:37)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我不知道原因是什么以及如何编辑我的代码。我认为您已经将pubsTable.ID定义为主键,并且它已经包含1,因此您必须在添加新Pub时输入唯一ID。无需添加
值。put(COL_1,Pub.getID())
在您的addPub(Pub-Pub)
方法中,因为您为COL\u 1
放置了INTEGER主键AUTOINCREMENT
,所以COL\u 1的id将自动生成并自动递增
在运行函数时,只需添加其他参数,无需添加COL_1参数,因此可以按如下方式调用函数-
`
db.addPub( newPub("TheOldQueen'sHead","53.3809646","1.4631316","10:00","23:00","p","0","1","1","0","0","1","0","1","0","0","07983559073"));`
省略语句values.put(COL_1,pub.getID())代码>来自addPub(Pub-Pub)
我希望有帮助
只需确保在进行所需更改后清除手机设置中的应用程序数据。可能您已经在数据库中有ID等于1的记录。
`
db.addPub( newPub("TheOldQueen'sHead","53.3809646","1.4631316","10:00","23:00","p","0","1","1","0","0","1","0","1","0","0","07983559073"));`