【发布时间】:2018-01-05 08:21:02
【问题描述】:
我一直在尝试将“一批”数据插入 Android 应用程序的 SQLITE 数据库中。我没有收到任何错误,但是稍后尝试从该表中进行选择时,没有返回任何数据。
该应用程序同时使用 SQL Server 和 SQLITE,因为设备不会始终连接到网络,因此无法始终访问 SQLServer,因此我正在运行查询以从 SQLServer 中进行选择,然后将该结果集传递给方法旨在将数据推送到 SQLITE DB
我所遵循的流程如下:
-
删除当前在 sqliteDB 中的所有内容
mDb = mDbHelper.getReadableDatabase(); mDb.execSQL("delete from TABLE_1"); -
从 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(); } -
将第 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(); } }
所以一切似乎都运行良好,但是当我稍后查询数据库并进行选择时,该表没有返回任何值, 我错过了什么或只是做错了吗? 谢谢
【问题讨论】:
-
getReadableDatabase= 想知道readable是什么意思?这是否意味着您可以删除? -
String error = ex.getMessage();实际打印这个错误怎么样? -
首先打印错误信息
-
将
mDb.insert("TABLE_1", null, values);更改为Log.d("INSERT","Return from insert is " + Long.toString(mDb.insert("TABLE_1", null, values)));。如果 log 中的值为 -1,则未插入行,如果为正,则这是插入行的 rowid,表明插入有效。如果 Log 中没有任何内容,则进入 while 循环。 -
@ScaryWombat getReadable 将按照创建和/或打开数据库的方式获取可写数据库。这将与 getWritableDatabase() 返回的对象相同,除非某些问题(例如磁盘已满)需要以只读方式打开数据库。在这种情况下,将返回一个只读数据库对象。 getReadableDatabase
标签: java android sqlite android-sqlite