找回密码
 立即注册
收起左侧

QT 中无法将QString数据写入到QSQLite中

14
回复
6783
查看
[复制链接]
累计签到:4 天
连续签到:1 天
来源: 2015-6-16 17:41:53 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
QSqlQuery query;     
query.prepare("INSERT INTO BorrowL(id,code,name,author,borrow,re) " "VALUES (?,?,?,?,?,?)");         query.addBindValue(stuID);        
query.addBindValue( code);         
query.addBindValue( name);         
query.addBindValue( a);         
query.addBindValue( btime);         
query.addBindValue( rtime);        
query.exec();
qdebug发现并没有将数据写进去
其中stuID,code,name,a,btime,rtime都是QString类型变量,如果不这样写应该怎样写呢
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-6-16 17:54:52 显示全部楼层
顺便贴一下“QSqlQuery query; ”   之前的代码

  1.     //前几行是从tableview中获取数据,测试过了数据获取成功
  2.     int curRow=ui->searchTableView->currentIndex().row();
  3.      QAbstractItemModel *modessl = ui->searchTableView->model();
  4.      QModelIndex indextemp = modessl->index(curRow,0);
  5.       QVariant datatemp = modessl->data(indextemp);
  6.       QString code = datatemp.toString();
  7.       qDebug()<<code;
  8.       QModelIndex indextemp2 = modessl->index(curRow,1);
  9.        QVariant datatemp2 = modessl->data(indextemp2);
  10.       QString name = datatemp2.toString();
  11.        qDebug()<<name;

  12.        QModelIndex indextemp3 = modessl->index(curRow,2);
  13.         QVariant datatemp3 = modessl->data(indextemp3);
  14.        QString a = datatemp3.toString();
  15. qDebug()<<a;

  16.      QDate date = QDate::currentDate();
  17.      QDate date2 = date.addDays(30);



  18.      QString btime = date.toString("yyyy-MM-dd");
  19.      QString rtime = date2.toString("yyyy-MM-dd");
复制代码
回复 支持 反对

使用道具 举报

尚未签到

2015-6-16 19:59:44 显示全部楼层
让query输出一下是什么sql错误?

我自己也是这样用的哦,多半是你哪里写错了
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-6-16 20:14:27 显示全部楼层
Joey_Chan 发表于 2015-6-16 19:59
让query输出一下是什么sql错误?

我自己也是这样用的哦,多半是你哪里写错了 ...

请问是怎样输出错误呢,用query.lastError();语句吗,
我加入后并没有输出什么信息
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-6-16 20:27:09 显示全部楼层
Joey_Chan 发表于 2015-6-16 19:59
让query输出一下是什么sql错误?

我自己也是这样用的哦,多半是你哪里写错了 ...

输出了错误信息QSqlError(1, "Unable to execute statement", "no such table: BorrowL")
但我的表BorrowL已经在创建数据库的函数中创建了
query.exec("create table BorrowL(id varchar,code varchar,name varchar,author varchar,borrow varchar,re varchar");
回复 支持 反对

使用道具 举报

尚未签到

2015-6-16 20:44:18 显示全部楼层
Q小麦 发表于 2015-6-16 20:27
输出了错误信息QSqlError(1, "Unable to execute statement", "no such table: BorrowL")
但我的表Borro ...

我印象中sql是不分大小写的,你试试全小写
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-6-16 20:53:51 显示全部楼层
Joey_Chan 发表于 2015-6-16 20:44
我印象中sql是不分大小写的,你试试全小写

请问是哪里的代码全小写
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-6-16 21:08:34 显示全部楼层
Joey_Chan 发表于 2015-6-16 20:44
我印象中sql是不分大小写的,你试试全小写

修改后重新运行了下,
if(!query.prepare("insert into borrow(id,code,name,author,bor,re) "
                       "values (?,?,?,?,?,?)"))
          qDebug()<<query.lastError();

依然是之前的错误信息
回复 支持 反对

使用道具 举报

尚未签到

2015-6-16 21:08:50 显示全部楼层
Q小麦 发表于 2015-6-16 20:53
请问是哪里的代码全小写

sql语言啊

另外你创建后可以用别的sqlite客户端打开你的数据库文件看看是不是真的有这个table
回复 支持 反对

使用道具 举报

尚未签到

2015-6-16 21:10:05 显示全部楼层
Q小麦 发表于 2015-6-16 21:08
修改后重新运行了下,
if(!query.prepare("insert into borrow(id,code,name,author,bor,re) "
         ...

为什么你前面写的是borrowL, 后面写borrow
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-6-16 21:16:25 显示全部楼层
Joey_Chan 发表于 2015-6-16 21:10
为什么你前面写的是borrowL, 后面写borrow

我重新创建了一个borrow表,还是不行
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-6-16 21:23:20 显示全部楼层
Joey_Chan 发表于 2015-6-16 21:10
为什么你前面写的是borrowL, 后面写borrow

在db文件里并没有找到borrow这个表,是我创建表格时错误了吗,还是列数太多了,把代码贴给你看
  1. static bool connect ()
  2. {

  3. //连接数据库,如果不存在则新建一个
  4.     bool ok=QFile::exists("library.db");
  5.     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  6.     db.setDatabaseName("library.db");
  7.     if(!db.open())
  8.     {
  9.         QMessageBox::warning(0,"title","打开数据库失败");
  10.         return false;
  11.     }

  12.     QSqlQuery query;

  13.     query.exec("create table student(id varchar(40) PRIMARY KEY,password varchar(40));");
  14.     query.exec("create table borrow(id varchar(40) PRIMARY KEY,code varchar(40),name varchar(40),author varchar(40),bor varchar,re varchar");

  15.     query.exec("create table manager(id varchar(40) PRIMARY KEY,password varchar(40));");
  16.     query.exec("create table allbook(code varchar(40) PRIMARY KEY,name varchar(40),author varchar(30),amount varchar(5));");
  17.     query.exec("insert into borrow(id,code,name,author,bor,re)values('liuxin','201','wings','Jane','2015-06-16','2015-07-16')");
  18.     query.exec("select * from borrow");
  19.     while(query.next())
  20.     {
  21.         QString a=query.value(0).toString();
  22.         QString b=query.value(1).toString();
  23.         QString c=query.value(2).toString();
  24.         QString d=query.value(4).toString();
  25.         qDebug()<<a<<b<<c<<d;

  26.     }


  27.     return true;
  28. }
复制代码
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-6-16 22:22:09 显示全部楼层
Joey_Chan 发表于 2015-6-16 21:10
为什么你前面写的是borrowL, 后面写borrow

解决了,谢谢,其实是我创建表时地语句写错了
回复 支持 反对

使用道具 举报

尚未签到

2015-6-16 22:22:41 显示全部楼层
你一行行来输出sql的错误信息嘛,总有地方是错的。

比如创建表我一般是这么写的: create table if not exist XXX (..........)     ,  而且sqlite不支持varchar,直接text就行了
回复 支持 反对

使用道具 举报

尚未签到

2015-6-16 22:23:11 显示全部楼层
Q小麦 发表于 2015-6-16 22:22
解决了,谢谢,其实是我创建表时地语句写错了

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了