意思是说,还有某查询引用默认数据库连接"qt_sql_default_connection"。
如果忽略该警告,Qt官方文档里也写了,可能会出现内存泄漏:
Warning: There should be no open queries on the database connection when this function is called,
otherwise a resource leak will occur
还是不出现这个警告的好。怎么把它弄没了呢?我把一切外围的对象都排除了:仅建立一个连接,打开它,然后关闭连接,调用removeDatabase()。居然还有警告!问题已经锁定在我关闭连接的语句上:
QSqlDatabase::removeDatabase(QSqlDatabase::database()connectionName());
默认连接的名字也是默认的,需要通过connectionName()函数获得。这样写貌似没什么问题,后来调试发现,QSqlDatabase::database()静态函数实际上使默认连接的引用计数+1。上述句子相当于:
QSqlDatabase db = QSqlDatabase::database();//获得实例。
QString name = dbconnectionName();//获得默认连接名。
QSqlDatabase::removeDatabase(name);//删除默认连接。
这样,问题就清晰了,db获得了一个引用,此时引用计数为2。在调用removeDatabase()时,db对象并没有被删除,默认连接的引用计数仍为2,于是报告警告信息。
我们只需将其改为:
QString name;
{
name = QSqlDatabase::database()connectionName();
}//超出作用域,隐含对象QSqlDatabase::database()被删除。
QSqlDatabase::removeDatabase(name);
问题就解决了!
如果直接打默认连接名的话,代码就简单多了,不过名字不太好打(再说了,万一Qt把默认连接名改了呢!):
QSqlDatabase::removeDatabase("qt_sql_default_connection");//不推荐。
是的。
自建代码管理系统从软件到硬件可能会遇到以下的问题:1、需要对GitLab搭建非常熟悉的人,专门负责维护;2、需要采购单独服务器,费用不菲来说,还得在复杂的市场上费力挑选,更要处理各种可能发生的硬件和网络故障;3、需要独立的互联网线路以方便公司外的员工访问代码,不太适合有异地或者外包团队的企业;
4、需要随时关注代码管理软件的各种漏洞和Bug并即刻更新;5、难以应对来自公司内部对代码仓库的恶意破坏,可能发生删库跑路事件。
40℃。
苹果手机安全使用范围:
1、尽量在0摄氏度至35摄氏度之间的环境温度内使用iPhone。
2、低温或高温环境可能会暂时缩短电池寿命或导致设备暂时停止正常工作。
3、冬天尽量避免在室外长时间使用iPhone。
4、夏天在长时间使用iPhone时,尽量不要加装保护壳,让iPhone尽可能的散热。
采用将项目中的sqlite文件拷到android内存卡上的固定位置,先判断位置上是否存在sqlite文件,不存在则复制文件。 sqlite可放在res的raw目录下,亦可放在assets下,放在assets下,可新建其他层次目录,本例选择assets
1首先,添加sdcard权限在AndroidManifestxml
<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE" />
在activity中有如下代码
2Java代码
button2setOnClickListener(new ButtonOnClickListener() {
@Override
publicvoid onClick(View arg0) {
try{
String DATABASE_PATH = androidosEnvironmentgetExternalStorageDirectory()getAbsolutePath()
+ "/testdb"; //将要存放于的文件夹
String DATABASE_FILENAME = "testDatabasedb"; //文件名
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
// 如果/sdcard/testdb目录中存在,创建这个目录
if (!direxists())
dirmkdir();
// 如果在/sdcard/testdb目录中不存在
// testdb文件,则从asset\db目录中复制这个文件到
// SD卡的目录(/sdcard/testdb)
if (!(new File(databaseFilename))exists()) {
// 获得封装testDatabasedb文件的InputStream对象
AssetManager asset=getAssets();
InputStream is=assetopen("db/testDatabasedb");
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = newbyte[8192];
int count = 0;
// 开始复制testDatabasedb文件
while ((count = isread(buffer)) > 0) {
foswrite(buffer, 0, count);
}
fosclose();
isclose();
assetclose();
}
SQLiteDatabase mSQLiteDatabase=openOrCreateDatabase(databaseFilename, ActivityMODE_PRIVATE, null);//有则打开,没有创建
Cursor cur=mSQLiteDatabaserawQuery("select from table1", null);
if(cur!=null){
if(curmoveToFirst()){
do{
int idColumnIndex=curgetColumnIndex("id");
int numColumnIndex=curgetColumnIndex("num");
int dataColumnIndex=curgetColumnIndex("data");
int id=curgetInt(idColumnIndex);
int num=curgetInt(numColumnIndex);
String data=curgetString(dataColumnIndex);
Systemoutprintln("id:"+id+";num:"+num+";data:"+data);
}while(curmoveToNext());
curclose();
}
}
mSQLiteDatabaseclose();//关闭数据库连接
}catch(Exception e){
eprintStackTrace();
}
//deleteDatabase("testDatabasedb");//删除数据库
}
});
1、打开sqlserver的企业管理器或者是SQL server Management Studio
2、服务器类型选择:数据库引擎
3、服务器名称输入:localhost或是本机ip
4、身份验证选择:如果没开混合验证,选windows身份验证;如果开了混合验证,可以用windows身份登录,也可选选择SQL server身份验证。
5、选了SQLserver身份认证需要输入SQL已经定义的用户名和密码。
#include <QtGui/QApplication>
#include <QSqlDatabase>
#include <QtSql>
#include <QSQLiteDriver>
int main(int argc, char argv[])
{
QApplication app(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase(new QSQLiteDriver(),"QSQLITE");
dbsetDatabaseName("testdb");
//testdb是通过SQLite程序创建的数据库文件,当前文件夹下
if ( !dbopen())
{
return 0;
}
return appexec();
}
这是打开 后面的 *** 作跟其他的数据库 *** 作一样。还不明白可以追问。望采纳 谢谢
以上就是关于QT访问MYSQL数据库为什么一打开子窗口访问数据库就出问题全部的内容,包括:QT访问MYSQL数据库为什么一打开子窗口访问数据库就出问题、macbook发布的qt程序可以访问数据库但不能更改数据库、QT访问MYSQL数据库为什么一打开子窗口访问数据库就出问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)