SQLite - UNIQUE约束失败:(操作系统错误 - 2:没有这样的文件或目录)

时间:2017-05-21 20:51:54

标签: android mysql database sqlite

我知道这个问题之前已经被问过并回答了,但我找不到任何解决方案。

我正在尝试在我的Android应用上创建一个SQLite数据库。我正在解析我的值,看起来很好,但是当我尝试在SQLite中插入值时,我在UNIQUE constraint failed: (OS error - 2:No such file or directory)行中出现insertOrThrow错误。这是我的代码

public class SQLiteHandler extends SQLiteOpenHelper {

    private static final String TAG = SQLiteHandler.class.getSimpleName();

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "user_DB";

    // Login table name
    private static final String TABLE_USER = "user";

    // Login Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_SURNAME = "surname";
    private static final String KEY_COUNTRY = "country";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_PASSWORD = "password";
    private static final String KEY_TELEPHONE = "telephone";

    public SQLiteHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_USER + "(" + KEY_ID + " TEXT PRIMARY KEY,"
                + KEY_NAME + " TEXT," + KEY_SURNAME + " TEXT," + KEY_COUNTRY + " TEXT,"
                + KEY_EMAIL + " TEXT UNIQUE," + KEY_PASSWORD + " TEXT,"
                + KEY_TELEPHONE + " TEXT" + ")";
        db.execSQL(CREATE_LOGIN_TABLE);

        Log.d(TAG, "Database tables created");
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER);

        // Create tables again
        onCreate(db);
    }

    /**
     * Storing user details in database
     * */
    public void addUser(String id, String name, String surname, String country, String email, String password, String telephone) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_ID, id); // Id
        values.put(KEY_NAME, name); // Name
        values.put(KEY_SURNAME, surname); // Surname
        values.put(KEY_COUNTRY, country); // Country
        values.put(KEY_EMAIL, email); // Email
        values.put(KEY_PASSWORD, password); // Password
        values.put(KEY_TELEPHONE, telephone); // Telephone

        // Inserting Row
        long ide = db.insertOrThrow(TABLE_USER, null, values);
        db.close(); // Closing database connection

        Log.d(TAG, "New user inserted into sqlite: " + ide);
    }


    public String getData(String a){
        SQLiteDatabase db = this.getReadableDatabase();
        String s;
        Cursor c = db.rawQuery("SELECT * FROM " + TABLE_USER, null);
        c.moveToFirst();
        s=c.getString(c.getColumnIndex(a));
        db.close();

        return s;
    }

    /**
     * Re crate database Delete all tables and create them again
     * */
    public void deleteUsers() {
        SQLiteDatabase db = this.getWritableDatabase();
        // Delete All Rows
        db.delete(TABLE_USER, null, null);
        db.close();

        Log.d(TAG, "Deleted all user info from sqlite");
    }

}

我在获取值的服务器中使用的MySQL数据库中的id是AUTOINCREMENT。我只想将它们插入应用程序中的SQLite数据库中。虽然我得到了例外

  

android.database.sqlite.SQLiteConstraintException:UNIQUE约束失败:user.id(Sqlite代码1555),(操作系统错误 - 2:没有这样的文件或目录)

No such file or directory的含义是什么?

0 个答案:

没有答案