【问题标题】:Update sqlite database with multiple columns使用多列更新 sqlite 数据库
【发布时间】:2014-10-24 09:05:46
【问题描述】:

我想通过检查 2 列来更新数据库。如果两列相同,则更新,否则作为新行插入。

        mydatabase.insertOrThrow(DATABASE_TABLE, null, records);
        } catch (SQLiteConstraintException e) {
            String where = KEY_ADDRESS +"=? and " + KEY_VALUE + "=?";
            String[] whereArgs = new String[] {String.valueOf(address), String.valueOf(value)};
            mydatabase.update(DATABASE_TABLE, records, where,whereArgs);
        }

地址和值是主键,地址是唯一的。

现在它只在开头插入。当我更改值时,它不会插入任何记录。

这是我的创建函数:

        String create = String.format("CREATE TABLE %s ( %s TEXT ,%s TEXT NOT NULL UNIQUE ,"
+" %s INTEGER, %s TEXT, %s TEXT, PRIMARY KEY(%s, %s) );",
 DATABASE_TABLE, KEY_NAME, KEY_ADDRESS, KEY_VALUE, KEY_ARRAY,
     KEY_TİME, KEY_ADDRESS, KEY_VALUE);

我认为问题在于插入功能。它以值开头插入,但在我更改值后它不会作为新行插入。当我改回旧值时,它会更新行。

很抱歉添加有关问题的新信息,但我无法提出新问题。

【问题讨论】:

  • 我解决了问题。我在 create 语句中写了 unique。

标签: android mysql sqlite


【解决方案1】:
public SQLiteDatabase db;

 db = openOrCreateDatabase("databasename.db", MODE_PRIVATE, null);
 String see = "create table if not exists tablename(id integer primary key autoincrement,address varchar(120) not null,address varchar(20) primary key, value varchar(20)unique)";
  db.execSQL(see);

  String selectQuery="select * from tablename";
 Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            String address =cursor.getString(1);
            String value=cursor.getString(2);
        } while (cursor.moveToNext());
    }

    // closing connection
    cursor.close();
    db.close();

String address1=String.valueOf(address);
String value1=String.valueOf(value)

if(address.equal(address1) && value.equal(value1))
{
try
{
db.insertOrThrow(DATABASE_TABLE, null, records);
   } catch (SQLiteConstraintException e) {
        String where = KEY_ADDRESS +"=? and " + KEY_VALUE + "=?";
        String[] whereArgs = new String[] {String.valueOf(address), String.valueOf(value)};
        db.update(DATABASE_TABLE, records, where,whereArgs);
    }
 }

使用此代码。

【讨论】:

  • 您要添加新列“参考”吗?这段代码不起作用。它说无法解析方法 openOrCreateDatabase。我也有更多的专栏。他们只保留记录。我使用地址列而不是引用,但它在 if 语句中给出了空指针异常。
  • 我是用的参考专栏。你可以替换该列。它是一种简单的数据库访问方式。如需更多参考,请使用此链接。 developer.android.com/reference/android/database/sqlite/…
  • 您在使用光标时进行分配。他们不只是保留最后的值吗?
猜你喜欢
  • 2021-04-07
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
相关资源
最近更新 更多