Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在SQLite查询中用where条件插入或替换多行_Android_Android Sqlite_Bulkinsert - Fatal编程技术网

Android 在SQLite查询中用where条件插入或替换多行

Android 在SQLite查询中用where条件插入或替换多行,android,android-sqlite,bulkinsert,Android,Android Sqlite,Bulkinsert,我需要一个SQLite查询来插入或更新SQLite表 MyTable: Id(主键且不为空) 名称 电话号码 预期查询:如果Id不存在,则必须插入新行 如果更改了现有行值,则在插入多行时更新该行 编辑1: 我已经发布了我尝试过的插入查询。像这样,我尝试使用“插入或替换”。但它是与Firfox SQLite管理器一起工作,而不是与Android SQLite一起工作 我使用了sDataBase.execSQL(查询)来执行此查询。尝试以下操作: String sql = "INSERT OR R

我需要一个SQLite查询来插入或更新SQLite表

MyTable:

  • Id(主键且不为空)
  • 名称
  • 电话号码
  • 预期查询:如果Id不存在,则必须插入新行 如果更改了现有行值,则在插入多行时更新该行

    编辑1:

    我已经发布了我尝试过的插入查询。像这样,我尝试使用“插入或替换”。但它是
    与Firfox SQLite管理器一起工作,而不是与Android SQLite一起工作

    我使用了
    sDataBase.execSQL(查询)
    来执行此查询。

    尝试以下操作:

    String sql = "INSERT OR REPLACE INTO MyTable (Name, PhoneNumber) VALUES (?,?)";
    SQLiteStatement st = db.compileStatement(sql);
    
    并编写或更新:

        public void writeOrUpdateData(ArrayList<MyClass> data) {
        try {
    
            db.beginTransaction();
    
            for(int i = 0; i < data.size(); i++) {
    
                st.clearBindings();
                st.bindLong(1, data.get(i).getName());
                st.bindString(2, data.get(i).getPhoneNumber);
                st.executeInsert();
    
            }
    
            db.setTransactionSuccessful();
    
        } 
        catch(Exception e) {} 
        finally {
            db.endTransaction();
        }
    }
    
    public void writeOrUpdateData(ArrayList数据){
    试一试{
    db.beginTransaction();
    对于(int i=0;i

    通过这种方式,您可以获得批量插入/更新,这非常有效

    我只在Firefox SQLite管理器中创建了主键数据库。我在Android的SQLite数据库中错过了这个。现在我已经用主键创建了数据库,并且不为NULL现在工作正常

    多行将无法处理您的查询。我试过了@Ponmalar Emm,我希望您有一些自定义类对象,您希望在本地sqlite db中编写/更新这些对象。所以批量插入/更新就可以了。在ArrayList中传递多个对象感谢您的回复。我正在从webview发送查询。在WebView中,我将使用sDataBase.execSQL(query)执行查询;所以我只需要一个问题,一个可能对某人有帮助的便条。使用带有“插入或替换”的批处理命令(so..values(…)、(…)、(…)等等)是完全可以的。另一个可能对某人有所帮助的注意事项是:)有趣的是,性能测试表明,“插入或替换”比普通的“插入”慢一点(最差为5%)。