我在向SQLite数据库发送查询时遇到了一个问题。
问题是数据库(源自excel表)的空单元格中应该有值,这些值是从上面的单元格给出的,在同一列中。
换句话说,如果值没有改变,excel表的制作者将同一列中的单元格留空。我实际上需要那些单元格中的值!
由于工作表/数据库的大小,我不能手动执行此操作,有没有办法以编程方式执行此操作?
我真的更喜欢sql-query方式,如果有的话!
祝福, TOR
答案 0 :(得分:2)
你可以在excel中做到这一点。我在这里回答了类似的问题:
Blank Values in Excel File From CSV (not just rows)
您也可以在excel中完全执行此操作:
选择列(或您正在使用的任何范围),然后转到 编辑>转到(Ctrl + G)并单击特殊。检查空白&单击确定。这个 将仅选择列表中的空单元格。现在输入=键, 然后向上箭头并按住Ctrl键进入。
这将在每个空白单元格中放置一个公式,使其等于上面的单元格 它。然后你可以复制^粘贴值只是为了摆脱 公式。
答案 1 :(得分:0)
您查询整个数据库,保留原始排序顺序,然后遍历每一行。如果某些东西是空的,请用上面的值更新它。
编辑:你可能会在这里做类似的事情:
SQLiteDatabase db = SQLiteDatabase.openDatabase("myDb.db", null, SQLiteDatabase.OPEN_READWRITE);
Cursor c = db.query("table", null, null, null, null, null, "the column that defines the sort order");
if (c != null) {
int columnCount = c.getColumnCount();
String[] lastValues = new String[columnCount];
while (c.moveToNext()) {
ContentValues cv = new ContentValues();
for (int i = 0; i < columnCount; i++) {
String value = c.getString(i);
if (TextUtils.isEmpty(value)) {
// if that happens on first column you are screwed anyways.
cv.put(c.getColumnName(i), lastValues[i]);
} else {
lastValues[i] = value;
}
// we need to save some id here
}
if (cv.size() > 0) {
// use the id here
db.update("table", cv, "column=?", new String[] { "id" });
}
}
c.close();
}
但我建议您使用Excel修复数据库。这更容易,您不需要理解上面的代码。
答案 2 :(得分:0)
与@maneesha提出的方法类似的方法是用空白单元格过滤,然后写入“等于上单元格”公式,然后清除过滤器。
但我认为@maneeshas的解决方案更酷。