批量插入不插入

时间:2018-01-05 08:21:02

标签: java android sqlite android-sqlite

我一直在尝试将“批量”数据插入到Android应用程序的SQLITE数据库中。我没有收到任何错误,但是当稍后尝试从该表中进行选择时,不会返回任何数据。

应用程序同时使用SQL Server和SQLITE,因为设备不会一直连接到网络,它无法一直访问SQLServer,因此我运行查询以从SQLServer中进行选择,然后将结果集传递给方法意味着将数据推送到SQLITE DB

我遵循的流程如下:

  1. 删除当前sqliteDB中的所有内容

     mDb = mDbHelper.getReadableDatabase();    
     mDb.execSQL("delete from TABLE_1"); 
    
  2. 从SQLserver获取数据

    Connection con = connectionClass.CONN();
    connect = con;
    
    
    try {
    
        PreparedStatement statement = connect.prepareStatement("Exec SelectAll '" + Param1+ "'");
        rs = statement.executeQuery();
    
        liteAdapter.insertIntoDbLite(rs);
    
        con.close();
    } catch (SQLException ex) {
    
        String error = ex.getMessage();
    
    }
    
  3. 将第2步的结果集传递给应该将数据批量插入sqlite的方法

    //Insert Records into Bale Table from SQL Server
    public void insertIntoDbLite(ResultSet rs)
     {
      mDb = mDbHelper.getWritableDatabase();
      mDb.beginTransaction();
      try {
    
        ContentValues values = new ContentValues();
        try {
            while (rs.next()) {
    
                //put value(Column_Name, record)
                values.put("COL1", rs.getString("Col1_Val"));
                values.put("COL2", rs.getString("Col2_Val"));
                values.put("COL3", rs.getString("Col3_Val"));
                values.put("COL4", rs.getString("Col4_Val"));
                values.put("COL5", rs.getString("Col5_Val"));
                values.put("COL6", rs.getString("Col6_Val"));
                values.put("COL7", rs.getString("Col7_Val"));
                values.put("COL8", rs.getString("Col8_Val"));
                values.put("COl9", rs.getString("Col9_Val"));
    
            }
            mDb.insert("TABLE_1", null, values);
        }
        catch (java.sql.SQLException e)
        {
            Log.e("Error in SQL",e.toString());
        }
    
        mDb.setTransactionSuccessful();
    }
    
    catch(Exception ex)
    {
        Log.e("Error in transaction",ex.toString());
    }
    finally
    {
        //End the transaction
        mDb.endTransaction();
    }
    
     }
    
  4. 所以它似乎运行正常,但是当我稍后查询数据库并选择一个select时,没有从该表返回任何值, 我错过了什么或只是做错了吗? 感谢

1 个答案:

答案 0 :(得分:1)

给定代码似乎没有任何明显错误。可能的情况是由于约束(诸如但不限于NOT NULL,UNIQUE之类的规则)更新未执行更新。另一种可能不太可能的情况是,没有输入while循环。

您可以通过更改

来区分
mDb.insert("TABLE_1", null, values);

Log.d("INSERT","Return from insert is " + Long.toString(mDb.insert("TABLE_1", null, values)));

然后用: -

写出输出
  • (a)没有输出到日志表示未输入while循环,因此 rs 为空。
  • (b)-1是返回的唯一值,表示由于约束而未进行更新。
  • (c)返回所有或一些正(> 0)值,这表明正在执行更新,并且问题很可能是用于稍后检查数据的方法。

如果(b)然后将mDb.insert更改为mDb.insertOrThrow,则会导致第一个异常被捕获,这应该表明问题。