当前位置: 首页 > 面试题库 >

SQLite列ID不是唯一的

终安和
2023-03-14
问题内容

下面是我的代码,我只想显示我在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代码。谢谢 :)


问题答案:

好吧,我认为这个项目在您首次运行时效果很好。当您第二次运行它时,由于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


 类似资料:
  • 问题内容: 我试图创建一个表,我需要它不允许3个字段相同的行。 当我使用SQLLite在Python中创建表时,使用了以下代码,但几乎没有得到任何结果。它通常在写入2条记录后停止,因此显然可以相信它是重复的。 因此,我希望数据库不允许在ownerID1,ownerID2,accountKey和argID1相同的记录。 谁能帮我这个忙吗? 谢谢! 问题答案: 我不确定是什么问题。它在这里工作正常:

  • 问题内容: 我有以下SQLite代码。如何在每行中插入自动生成的唯一ID? 问题答案: 您可以将其定义为自动递增列: 正如MichaelDorner指出的那样,SQLite文档说an可以做同样的事情,并且速度稍快。该类型的列是其别名,其行为类似于自动增量列。 此行为是隐式的,可能会使经验不足的SQLite开发人员措手不及。

  • 问题内容: 我注意到在具有UNIQUE约束的列中可以有NULL值: 在某些情况下会产生任何问题吗? 问题答案: 尽管以下内容解决了多个空值,但除了可能的数据库/ SQL可移植性之外,它 没有 解决与这种设计相关的任何“问题”,因此,它可能 不 应该被视为答案,在此仅作参考。 这实际上在SQLite常见问题解答中进行了介绍。这是一种设计选择-SQLite(与SQL Server不同)选择了多个NUL

  • 时间戳在所有行中是否唯一? 上面有唯一的索引吗?

  • 我正在开发一个应用程序,它要求用户先登录(电子邮件/密码),然后才能进入应用程序的其余部分。 我实现了指纹扫描,代码正确地验证了指纹是设备授权指纹列表中注册的指纹之一。 我的问题是,我希望能够将这两种情况关联起来,比如用户使用电子邮件/密码登录,然后进入一个屏幕,在那里他可以将is指纹与他刚刚登录的帐户关联起来,然后在将来,每当他使用应用程序上的指纹登录时,该应用程序将向服务器发送某种表示指纹的唯

  • 问题 你想随机生成一个唯一的标识符。 解决方案 可以根据一个随机数值生成一个 Base 36 编码的字符串。 uniqueId = (length=8) -> id = "" id += Math.random().toString(36).substr(2) while id.length < length id.substr 0, length uniqueId() # =