sql lite表是否存在一些行限制? 我的应用程序在该表有超过6000行时给出错误“没有这样的表x ...”。 低于6000行,不要给出任何错误。
谢谢。
这是查询。
db = (new DatabaseHelper(this)).getWritableDatabase();
cursor = db.rawQuery("SELECT continentes._id, continentes.ContinenteID, continentes.Continente"
+ " FROM continentes"
+ " WHERE continentes.Continente LIKE ?"
+ " GROUP BY continentes.ContinenteID, continentes.Continente ORDER BY continentes.Continente",
new String[]{"%" + searchText.getText().toString() + "%"});
这是我创建表格的地方
@Override
public void onCreate(SQLiteDatabase db) {
String s;
try {
Toast.makeText(context, "Creating Database", 2000).show();
InputStream in = context.getResources().openRawResource(R.raw.continentes);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(in, null);
NodeList statements = doc.getElementsByTagName("statement");
for (int i=0; i<statements.getLength(); i++) {
s = statements.item(i).getChildNodes().item(0).getNodeValue();
db.execSQL(s);
}
} catch (Throwable t) {
Toast.makeText(context, t.toString(), 50000).show();
解决了!!!我只是想知道为什么我遇到这个问题。因为我使用Data创建和填充sql数据库的文件,不能超过1.2mb。所以,我把他们分开了,没有更多的问题。谢谢大家。
答案 0 :(得分:7)
您可以获得limits of SQLite的标准信息,但这不会导致您的问题,因为限制实际上非常高。 (2到64的力量!)
您的问题很可能与您的应用程序插入记录和/或插入的记录类型有关。
您是否可以发布应用程序的一些代码以及它如何处理插入?阅读完毕后,我可以修改我的答案。
作为补充提示,请确保已设置:
Cursor myCursor = db.rawQuery("PRAGMA synchronous=OFF", null);
myCursor.close();
因为这可能是improve the performance更大的批量插页。
答案 1 :(得分:6)
表中的最大行数
表中理论上的最大行数是2 ^ 64(18446744073709551616或大约1.8e + 19)。此限制无法访问,因为将首先达到14 TB的最大数据库大小。一个14 TB的数据库可以容纳不超过大约1e + 13行,然后只有在没有索引且每行包含非常少的数据的情况下。
答案 2 :(得分:1)
没有这样的限制,见下文:
它说:
表格中的最大行数
表中的理论最大行数为264 (18446744073709551616或约1.8e + 19)。此限制无法访问 因为将首先达到最大数据库大小为14太字节。 一个14TB的数据库可以容纳不超过大约1e + 13 行,然后仅当没有索引且每行包含时 数据非常少。
答案 3 :(得分:0)
最大行数为2 ^ 64。