java - SQLite error for Android: "Column is not unique" -
i have spent lots of time searching answer, couldn't find it.
i trying utilize sqlite database on android app, when seek add together new object de "db.insert(object)" error saying primary key not unique.
what doing wrong?
sqlite database:
public class sqlcadastro extends sqliteopenhelper{ private static final int database_version = 1; private static final string database_name = "contactsmanager"; private static final string table_materias = "materias"; // contacts table columns names private static final string key_nome = "nome"; private static final string key_nota1 = "tri1"; private static final string key_nota2 = "tri2"; private static final string key_nota3 = "tri3"; private static final string key_prenota3 = "est3tri"; private static final string key_ma = "ma"; private static final string key_prepfv = "estpfv"; private static final string key_pfv = "pfv"; public sqlcadastro(context context) { super(context, database_name, null, database_version); } // creating tables @override public void oncreate(sqlitedatabase db) { string create_contacts_table = "create table " + table_materias + "(" + key_nome + " text unique," + key_nota1 + " float," + key_nota2 + " float," + key_prenota3 + " float," + key_nota3 + " float," + key_ma + " float," + key_prepfv + " float, " + key_pfv + " float, primary key (" + key_nome + ") on conflict ignore)" + ")"; db.execsql(create_contacts_table); } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop table if exists " + table_materias); oncreate(db); } public void addmateria(materias materia) { sqlitedatabase db = this.getwritabledatabase(); contentvalues values = new contentvalues(); values.put(key_nome, materia.getnome()); values.put(key_nota1, float.tostring(materia.getnota1())); values.put(key_nota2, float.tostring(materia.getnota2())); values.put(key_prenota3, float.tostring(materia.getprenota3())); values.put(key_nota3, float.tostring(materia.getnota3())); values.put(key_ma, float.tostring(materia.getma())); values.put(key_prepfv, float.tostring(materia.getprepfv())); values.put(key_pfv, float.tostring(materia.getpfv())); // inserting row db.insertorthrow(table_materias, null, values); db.close(); // closing database connection } the erro log:
fatal exception: main android.database.sqlite.sqliteconstraintexception: column nome not unique (code 19) @ android.database.sqlite.sqliteconnection.nativeexecuteforlastinsertedrowid(native method) @ android.database.sqlite.sqliteconnection.executeforlastinsertedrowid(sqliteconnection.java:775) @ android.database.sqlite.sqlitesession.executeforlastinsertedrowid(sqlitesession.java:788) @ android.database.sqlite.sqlitestatement.executeinsert(sqlitestatement.java:86) @ android.database.sqlite.sqlitedatabase.insertwithonconflict(sqlitedatabase.java:1469) @ android.database.sqlite.sqlitedatabase.insertorthrow(sqlitedatabase.java:1365) @ com.testemedia.mediacp2.sqlcadastro.addmateria(sqlcadastro.java:68) @ com.testemedia.mediacp2.cadastrar.onclick(cadastrar.java:49) @ android.view.view.performclick(view.java:4084) @ android.view.view$performclick.run(view.java:16966) @ android.os.handler.handlecallback(handler.java:615) error opening trace file: no such file or directory (2)
what doing wrong?
you adding row database table desired primary key used existing row. either:
use separate column primary key, such adding _id integer primary key autoincrement, or
make sure set in nome column unique
java android sql database sqlite
No comments:
Post a Comment