禁止重复记录并检查数据库是否可用

发布于 2024-12-03 17:56:08 字数 1096 浏览 2 评论 0原文

我正在创建一个数据库,并像这样插入一行:

/* Add two DataSets to the Table. */
myDB.execSQL("INSERT INTO "
              + MY_DATABASE_TABLE
              + " (LastName, FirstName, Country, Age)"
              + " VALUES ('Gramlich', 'Nicolas', 'Germany', 20);");
 myDB.execSQL("INSERT INTO "
              + MY_DATABASE_TABLE
              + " (LastName, FirstName, Country, Age)"
              + " VALUES ('Doe', 'John', 'US', 34);");

我对上述代码有两个问题:

  1. 如何禁止重复记录? 我想在插入时检查传入数据时间。我怎样才能做到这一点?我应该使用IF NOT EXISTS吗?

  2. 如何检查该数据库是否可用?到目前为止,我已经尝试过,但没有成功:

    private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/myDBName";
    私有静态字符串 DB_NAME = "myDBName";
    
    私有布尔 checkDataBase() {
        SQLiteDatabase checkDB = null;
        尝试 {
            checkDB = SQLiteDatabase.openDatabase(DB_PATH, null,
            SQLiteDatabase.OPEN_READONLY);
            checkDB.close();
        } catch (SQLiteException e) {
            // 数据库尚不存在。
        }
        返回 checkDB != null ?真:假;
    }
    

关于如何实现此目的有什么建议吗?

I am creating a database and I'm inserting a row like so:

/* Add two DataSets to the Table. */
myDB.execSQL("INSERT INTO "
              + MY_DATABASE_TABLE
              + " (LastName, FirstName, Country, Age)"
              + " VALUES ('Gramlich', 'Nicolas', 'Germany', 20);");
 myDB.execSQL("INSERT INTO "
              + MY_DATABASE_TABLE
              + " (LastName, FirstName, Country, Age)"
              + " VALUES ('Doe', 'John', 'US', 34);");

I have two questions regarding the above code:

  1. How do I disallow duplicate records? I want to check incoming data at the insert time. How can I achieve that? Should I use IF NOT EXISTS?

  2. How can I check whether that database is available or not? So far, without any success, I've tried:

    private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/myDBName";
    private static String DB_NAME = "myDBName";
    
    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        try {
            checkDB = SQLiteDatabase.openDatabase(DB_PATH, null,
            SQLiteDatabase.OPEN_READONLY);
            checkDB.close();
        } catch (SQLiteException e) {
            // database doesn't exist yet.
        }
        return checkDB != null ? true : false;
    }
    

Any suggestions on how to achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怀中猫帐中妖 2024-12-10 17:56:08

为了防止重复,在该表上创建一个唯一索引。

在运行时,您至少有两个选择:

  1. 如果您尝试重复,让索引给您一个异常,然后捕获该异常并执行其他操作,或者

  2. 主动查询表以查看新记录是否存在,如果找到,则知道存在重复,因此执行其他操作。

to prevent duplicates create a UNIQUE INDEX on that table.

At runtime, you have at least two options:

  1. let the index give you an exception if you attempt a duplicate, then catch that exception and do something else, or

  2. Query the table pro-actively to see if the new record exists, and if you find it you know there is a duplicate, so do something else.

南渊 2024-12-10 17:56:08

以下是一些建议:

  1. 创建表时,将要防止重复的列定义为 UNIQUE。
  2. 你的 checkDataBase() 方法有点奇怪。您是否考虑过在实现中使用 SQLiteOpenHelper 类来简化事情?

http://developer.android.com/reference/android/database/sqlite /SQLiteOpenHelper.html

Here are a few suggestions:

  1. When creating your tables, define the columns that you want to prevent duplicates as UNIQUE.
  2. Your checkDataBase() method is a bit strange. Have you considered using the SQLiteOpenHelper class in your implementation to simplify things?

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文