Sqlite 数据库 BUG 记录
- 打印错误信息
- 1. QSqlError("", "", "")
- 2.QSqlError("1", "Unable to execute statement", "table TIME_SLICE has no column named UCFIIsChecked")
- 3.QSqlError("", "Parameter count mismatch", "")
- 4. QSqlQuery::prepare: database not open QSqlError("", "", "")
- 5. QSqlError("", "Unable to fetch row", "No query")
- 6. 浮点数存储精度问题
- 7. 数据库DB文件还在 里面的表全没了
- 8.QSqlError("1", "Unable to execute statement", "near \" \": syntax error")
- 9.truncate table 表名 失败(QSqlError("", "Unable to fetch row", "No query"))
- QSqlDatabasePrivate::database: unable to open database: "out of memory Error opening database"
打印错误信息
QSqlError lastError = query.lastError();
qDebug() << "Error:"<<lastError;
1. QSqlError(“”, “”, “”)
原因:可能是数据类型不对,
sql语句错误,导致建表的时候,数据类型是这样的,就会造成这种莫名错误.
2.QSqlError(“1”, “Unable to execute statement”, “table TIME_SLICE has no column named UCFIIsChecked”)
原因:无法执行的sql语句,在表中,没有这个字段,可以看一下是不是字段名错误,或者是字符串换行没有用 **“逗号”**隔开.
3.QSqlError(“”, “Parameter count mismatch”, “”)
原因:参数数量不匹配,一般是因为关键字因为换行没隔开 .
比如: 以下的set和字段1中间没有被隔开,就会出现这种错误.
"UPDATE TABLE SET"
"字段1 = ?,字段2 = ?...."
4. QSqlQuery::prepare: database not open QSqlError(“”, “”, “”)
原因:在数据库操作途中,被关闭,会有这种题型,并且也会提示出**QSqlError(“”, “”, “”)**这种错误.
5. QSqlError(“”, “Unable to fetch row”, “No query”)
无法获取行
原因 1:字段信息不同一,一般是表内没有sql语句内的字段名,检查下sql与表是否同一.
原因 2:success = query.exec(strSql );查询的时候 没有把sql传参使用,也会提醒这个错误.
6. 浮点数存储精度问题
浮点数存储在数据库,会出现精度异常,比如1.00存储的是1.0000000000032215或者是0.9999999999999999999999
这样的值,与实际值不符;
尝试了FLOAT/DECIMAL(10,3) 长度和小数位,但是并不如意,
所以只好用笨办法,存储的时候存储VARCHAR类型,查询的时候再根据对应类型转换,这样可以避免精度异常.
7. 数据库DB文件还在 里面的表全没了
原因没找到
添加补救方法:查询表在不在 不在重新建表 并且补上缺省值
这条sql的返回值是 1 | 0;
这里的 ‘table’ ‘tableName’ 必须使用单引号引起来 否则会sql错误:
syntax error 语法错误
no such column:tableName
QString sql = tr("SELECT COUNT(*) FROM sqlite_master where type ='table' and name = '%1'").arg(tableName);
8.QSqlError(“1”, “Unable to execute statement”, "near " “: syntax error”)
原因:还是语法错误 这次是在最后少了后括号
"near " " 这里确实不好找 不过还好 逐步排查 还是找到了
9.truncate table 表名 失败(QSqlError(“”, “Unable to fetch row”, “No query”))
原因:SQLite 没有truncate语法
使用delete也可以清空表
delete from Table_Name
QSqlDatabasePrivate::database: unable to open database: “out of memory Error opening database”
原因:
先说网络上查的结果吧:
1 路径问题,动态路径(日期 时间)或者是 命名出错误
我的现象及原因
2 内存不足
我是开了八个线层在做别的通讯,在通讯失败的时候就会一直通讯,线程在sleep,或者是在一直发消息,影响了数据库的操作.我关闭了通讯的操作,就不会有这个错误出现,所以暂时原因定位在这里.
解决:1 永远保持通讯,就不会出现这种阻塞,导致数据库的作业
解决:2 得尝试数据库的作业也是新的线程作业,互不耽误,会不会解决.