Android重复值更新

标签 android database android-sqlite

我正在使用 SQLite。我成功地创建了一个数据库,我可以将一些值输入到数据库中。现在我想检查重复值。更多信息,比如我第一次输入:

Tittle: dev 
Description : job
Price :2

第二次我简单地输入了这个重复值,我只想更改价格值。我写了代码,但我不能改变重复值的价格

这是一个数据库助手 java 类:

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "MainStradaDB4";
private static final String TABLE_CONTACTS = "CardTable1";
public static final String KEY_ID = "id";
private static final String KEY_Tittle = "name";
private static final String KEY_Description = "description";
private static final String KEY_Price = "price";
private static final String KEY_Counter = "counter";
private static final String KEY_Image = "image";
private final ArrayList<Contact> contact_list = new ArrayList<Contact>();
public static SQLiteDatabase db;

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

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_Tittle + " TEXT,"

            + KEY_Description + " TEXT,"

            + KEY_Price + " TEXT,"

            + KEY_Counter + " TEXT,"

            + KEY_Image + " TEXT"

            + ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
    onCreate(db);
}

// Adding new contact
public void Add_Contact(Contact contact) {
    db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    if (!somethingExists(contact.getTitle())) {

        values.put(KEY_Tittle, contact.getTitle());
        values.put(KEY_Description, contact.getDescription());
        values.put(KEY_Price, contact.getPrice());

        values.put(KEY_Counter, contact.getCounter());
        values.put(KEY_Image, contact.getImage());


        db.insert(TABLE_CONTACTS, null, values);

        Log.e("Table Result isss", String.valueOf(values));
        db.close(); // Closing database connection

    }
    else
    {
        Update_Contact(contact);
    }


}

public void deleteUser(String userName) {
    db = this.getWritableDatabase();
    try {
        db.delete(TABLE_CONTACTS, "name = ?", new String[] { userName });

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        db.close();
    }
}



public int Update_Contact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_Counter, contact.getCounter());

    // updating row
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
}



// Getting single contact
Contact Get_Contact(int id) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_CONTACTS,
            new String[] { KEY_ID, KEY_Tittle, KEY_Description, KEY_Price,
                    KEY_Counter, KEY_Image }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();



    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2), cursor.getString(3),
            cursor.getString(4), cursor.getString(5));
    // return contact
    cursor.close();
    db.close();

    return contact;
}

public boolean somethingExists(String x) {
    Cursor cursor = db.rawQuery("select * from " + TABLE_CONTACTS
            + " where name like '%" + x + "%'", null);
    boolean exists = (cursor.getCount() > 0);

    Log.e("Databaseeeeeeeee", String.valueOf(cursor));
    cursor.close();
    return exists;
}

public ArrayList<Contact> Get_Contacts() {
    try {
        contact_list.clear();
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                Contact contact = new Contact();
                contact.setID(Integer.parseInt(cursor.getString(0)));
                contact.setTitle(cursor.getString(1));

                contact.setDescription(cursor.getString(2));

                contact.setPrice(cursor.getString(3));
                contact.setCounter(cursor.getString(4));

                contact.setImage(cursor.getString(5));

                contact_list.add(contact);
            } while (cursor.moveToNext());

        }

        cursor.close();
        db.close();
        return contact_list;
    } catch (Exception e) {

        Log.e("all_contact", "" + e);
    }

    return contact_list;
}

我是不是做错了?如果有人知道解决方案帮助我 谢谢

最佳答案

Try this one:-


  public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_HOUR + " TEXT NOT NULL, " +
                KEY_DAY + " TEXT NOT NULL, " +
                KEY_LOCATION + " TEXT NOT NULL, " +
                KEY_SUBJECT + " TEXT NOT NULL, " +
                KEY_START + " TEXT NOT NULL, " +
                KEY_END + " TEXT NOT NULL, " +
                "UNIQUE (" + KEY_DAY + ", " + KEY_HOUR + ") ON CONFLICT ROLLBACK);"
        );

关于Android重复值更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24625628/

相关文章:

android - 在其中添加数据后如何调整android webview的大小

android - Android WebView HTML 会影响键盘或键盘功能吗?

sql - 一个约束的数据库含义

php - MySQL JOIN 2个表并分别获取两个表的总和

java - SQLite onUpgrade() 挫败感

javascript - 如何在 React native run-android 中解决 'You need to have MainApplication in your project'

java - 多个 InfoWindows Android map V2

database - 如何使用 MS SQL 查找带括号的字符串的最后一部分

android - Sqlite 查询以获取匹配搜索关键字后的下一个可用字符列表

Android SQLite 插入或更新