我一直在尝试将“批量”数据插入到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();
}
}
所以它似乎运行正常,但是当我稍后查询数据库并选择一个select时,没有从该表返回任何值, 我错过了什么或只是做错了吗? 感谢
答案 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)));
然后用: -
写出输出如果(b)然后将mDb.insert
更改为mDb.insertOrThrow
,则会导致第一个异常被捕获,这应该表明问题。