Sqlite列id不是唯一的

时间:2013-10-26 02:48:25

标签: android sql sqlite

下面是我的代码我只想将我在sqlite数据库中插入的数据显示到文本视图但是我有这个错误说id不是唯一的。

    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();
    }
}

这是我的整个java代码。谢谢:))

2 个答案:

答案 0 :(得分:3)

嗯,我认为这个项目第一次运行时工作正常。当您第二次运行它时会出错,因为id是您的primary key,而ID为1的行已经插入到您的数据库中。

要消除错误:

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

答案 1 :(得分:1)

我可能会建议替代方案。你可以做的是同时制作id列autoincrement,同时仍将该列保持为primary key

修改: - 我还有其他一些建议: -

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

您可以改为使用ContentValues

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

可以替换为while(!cursor.isAfterLast()){。这样看起来更干净。

或者您可以使用while(cursor.isAfterLast() == false){直接替换while(cursor.moveToNext()){,并可以从while块中删除cursor.moveToNext();

快乐编码!!!