【问题标题】:Make a copy of a specific row using its serial in the same table in Sqlite without looping在 Sqlite 的同一个表中使用其序列号复制特定行而不循环
【发布时间】:2017-05-14 03:42:06
【问题描述】:

我有一个表,每行都包含一个序列号。我知道我可以遍历所有表以找到序列号,然后提取变量中的数据并重新插入它,但没有更有效的方法,因为我有一个大量数据,我只想复制该行,因为我知道它的序列号。

任何一个班轮都会让我开心:)。

【问题讨论】:

  • 该序列号是索引为唯一键还是主键?
  • 是的,每一行都有 INTEGER PRIMARY KEY AUTOINCREMENT。如果您有一个认为它不是唯一的解决方案,我会接受它作为答案。

标签: android sqlite android-studio


【解决方案1】:

您可以运行这样的查询(考虑到 serial_number 不是唯一的):

INSERT INTO table_name (column_1, column_2, serial_number....)
SELECT *
FROM table_name
WHERE serial_number = YOUR_SERIAL_NUMBER;

编辑:

在 Java 中,它会是这样的:

String sql = "SELECT *" +
                     " FROM " + TABLE_NAME +
                     " WHERE " + serial_number + " = " + serial_number + "";

    Cursor cursor = db.rawQuery(sql, null);

    if (cursor !=null) {
        cursor.moveToFirst();
    }

String value_1 = cursor.getString(cursor.getColumnIndex("COLUMN_NAME_1"));
String value_2 = cursor.getString(cursor.getColumnIndex("COLUMN_NAME_2"));
String value_3 = cursor.getString(cursor.getColumnIndex("COLUMN_NAME_3"));

cursor.close();

ContentValues cv = new ContentValues();

cv.put("COLUMN_NAME_1", value_1);
cv.put("COLUMN_NAME_2", value_2);
cv.put("COLUMN_NAME_3", value_3);

db.insert(TABLE_NAME, null, cv);

我假设您的序列号是整数。如果是字符串值,请将您的 serial_number 值用 '...' 括起来

" WHERE " + serial_number + " = '" + serial_number + "'";

【讨论】:

  • 正是我想这样做,但如果你注意到我正在使用 android studio 并且不知道如何在 java 中实现它。
  • 是的,我只想在 java 中查看您的代码,用于 ex db.insert(tablename,null,contentvalues);是我在表格中插入的方式
  • 他想要一种更高效的方式,即rawQuery
  • 如果可以,请发布答案。对我也有帮助。 :) @CL。
  • 这是一个好方法,所以我不必循环表,但正如我所说,我有很多数据,提取然后插入不是我想做的很多事情。
【解决方案2】:

INSERT statement 可以通过查询来指定要插入的数据。因此,您可以简单地使用该查询来获取所需的行。 请注意,序列号本身不可复制:

INSERT INTO MyTable(col2, col3, [...])
SELECT col2, col3, [...]
FROM MyTable
WHERE SerialNumber = ?;

在 Android 中,您可以使用 execSQL 执行此类语句:

db.execSQL("INSERT ... SELECT ...");

【讨论】:

  • 来自文档:execSQL(String sql) 执行单个 SQL 语句,该语句不是 SELECT 或任何其他返回数据的 SQL 语句。。真的会执行吗?我现在不能自己测试它。
  • INSERT 不返回数据。
  • 这看起来是一个非常有效的解决方案我试过了,但得到了一个 android.database.sqlite.SQLiteException: 。我尝试插入这样的列 "+database.col+" 但仍然是同样的错误
  • 这里编译的代码`db.execSQL("INSERT INTO "+data.Table+ "("+data.col1+","+data.col2+","+data.col3+","+ data.col4+")\n‌​" + "SELECT "+data.col1+","+data.col2+","+data.col3+","+data.col4+",\n" + "FROM "+data. Table+"\n" + "WHERE SerialNumber '"+serial+"'");'@CL
  • SQL 中没有换行(你可以使用空格代替),你必须正确使用逗号和=
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2021-10-23
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多