• 5184阅读
  • 2回复

[提问]求赐教:如何存放0x00124B00013FE77D [复制链接]

上一主题 下一主题
离线sapphirezzz
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-27
现在情况是:在串口会收到二进制数,如0x00124B00013FE77D,我会用QByteArray读取,之后和数据里面对比一下。

那我数据库里面的这个属性应该定义成什么类型呢?varchar(8)可以吗?

另外,我在插入数据库时,应该怎么把0x00124B00013FE77D存进去呢?

如果用QByteArray的话初始化很麻烦:
QByteArray ID1;
    ID1.resize(8);
    ID1[0]=0x00;
    ID1[1]=0x12;
    ID1[2]=0x4B;
    ID1[3]=0x00;
    ID1[4]=0x01;
    ID1[5]=0x3F;
    ID1[6]=0xE7;
    ID1[7]=0x7D;
如果这个的话不知有没有简便的方法~
离线XChinux

只看该作者 1楼 发表于: 2011-05-27
定义成 BLOB。
你不是已经将二进制数据读入到QByteArray中了么?那插入数据库的时候直接
q.prepare("insert into tablea(fielda) values(?)");
q.addBindValue(byteArray);
q.exec()
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sapphirezzz
只看该作者 2楼 发表于: 2011-05-27
那在创建表的时候,应该把那个字段的类型定义为什么呢?

另外当我执行下面程序会显示:"11111" "zzz",

很奇怪~我定义成char(0)居然也是同样的输出
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("zzz");
    db.setDatabaseName("user");
    db.setUserName("zzz");
    db.setPassword("zzlm0221");
    if(!db.open())
    {
        ui->textBrowser->setText("NO");
    }else{
        ui->textBrowser->setText("YES");
    }

    QSqlQuery query;
    query.exec("drop table user");
    query.exec("create table user (idnum char(4) primary key, name QString )");
    query.prepare("insert into user values('11111',:name1)");
    query.bindValue(":name1", tr("zzz"));
    query.exec();
    query.exec("select * from user");
    while(query.next())
        qDebug() << query.value(0).toString() << query.value(1).toString();
快速回复
限100 字节
 
上一个 下一个