jofftiquez
jofftiquez

Reputation: 7708

Sqlite column id is not unique

below is my code i just want to display the data i inserted in the sqlite database to a text view but i have this error saying that the id is not unique.

    package com.example.sqlitetest;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class Main extends Activity {

    TextView scrName, fName;
    Button go;
    SQLiteDatabase db;
    String screenName, fullName;
    Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        db = openOrCreateDatabase("MyDataBase", MODE_PRIVATE, null);
        db.execSQL("CREATE TABLE if not exists MyTable(ScreenName Varchar, FullName Varchar, id int(3) PRIMARY KEY);");
        db.execSQL("Insert into MyTable VALUES('joff', 'tiquez', 1);");
        cursor = db.rawQuery("Select * from MyTable", null);
        cursor.moveToFirst();

        scrName = (TextView) findViewById(R.id.scrName);
        fName = (TextView) findViewById(R.id.fName);

        while(cursor.isAfterLast() == false){
            //retrieving the data from sqlite (im not sure if im doing it right)
            String screenname = cursor.getString(cursor.getColumnIndex("ScreenName"));
            String fullname = cursor.getString(cursor.getColumnIndex("FullName"));

            //this are the textview
            scrName.setText(screenname);
            fName.setText(fullname);

            cursor.moveToNext();
        }
        db.close();
    }
}

this is my whole java code. thanks :)

Upvotes: 2

Views: 5213

Answers (2)

Abhishek V
Abhishek V

Reputation: 12526

Well I think this project works fine when you run it first time. When you run it second time it gives error because id is your primary key and the row with the id 1 has been already inserted to your database.

To get rid of errors either :

1) uninstall the app and run it again   
2) Don't make id as primary key   
3) Catch the exception and handle it yourself

Upvotes: 3

d3m0li5h3r
d3m0li5h3r

Reputation: 1967

Might I suggest an alternative to this. What you can do is make the id column autoincrement as well while still keeping that column as primary key

EDIT:- Also I have some other suggestions for you:-

db.execSQL("Insert into MyTable VALUES('joff', 'tiquez', 1);");

you can user ContentValues instead

while(cursor.isAfterLast() == false){

could be replaced with while(!cursor.isAfterLast()){. Looks cleaner this way.

Or you could directly replace while(cursor.isAfterLast() == false){ with while(cursor.moveToNext()){ and can remove out cursor.moveToNext(); from the while block.

Happy Coding!!!

Upvotes: 1

Related Questions