java - 批量插入不插入

标签 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();
    }
    
     }
    

所以一切似乎都运行良好,但是当我稍后查询数据库并进行选择时,该表没有返回任何值, 我错过了什么还是只是做错了? 谢谢

最佳答案

给定的代码似乎没有什么明显的错误。可能的情况是更新由于约束(诸如但不限于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 应该会导致捕获第一个异常,这应该表明问题。

关于java - 批量插入不插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48109706/

相关文章:

android - 安卓手机休眠时的网络访问

sqlite - SharedPreferences 保存在 EditText 中输入的文本并将其显示在另一个事件的 TextView 中

android - 选择同一组的多个相关行 onlongclick ListView

java - 如何创建在每个元音后面添加破折号的方法?

java - 如何在 Jar 中加载与其加载的类无关的文件

Android AdMob 导致内存泄漏?

android - Firebase 实时数据库现在无法正常工作?

java - 如何在 LibGDX 中通过路径绘制自定义形状?

java - 每次跳过该方法时都使用 TestNG 符号,例如 @parameters 或 @dataprovider...

iphone - SQLite 表名无效字符