无法从SQLite数据库读取

Mst137

我试图逐行读取数据库。我收到一条警告,指出所有包含sqlite3_column_text()函数的行都“在没有强制转换的情况下从指针赋值使整数成为整数[默认情况下启用”)。但是,尽管该行仍仅从数据库返回0,但在尝试获取整数的行上没有发生此类错误。

为了紧凑起见,已删除了rc处理。

    typedef struct {
   char InstrumentType[32];
   char Protocol[16];
   int RegNum;
   char RW[4];
   char RegisterType[32];
   char Signed[8];
   char Inverted[8];
   char DataType[16];
} Register;

typedef struct {
       char InstrumentType[32];
       int Bus;
       int Address;
       int Port;
       int Sampling;
       char Sync[2];
       Register Reg[];
       } Instrument;

int main(void) {
    sqlite3 *db;
    Register Register[8];
    sqlite3_stmt* SQL;
    char SQL2[128];
    int i;
    int MPTotalReg;

    int rc;

    rc = sqlite3_open("/root/BBBTest/Instruments.db", &db);

     for (i=0; i<4; i++){

     rc = sqlite3_prepare_v2(db, "SELECT * from instrumentsdefinition WHERE Type='Magprobe' AND Register=?;", -1, &SQL, 0);

     rc = sqlite3_bind_int(SQL, 1, i);

       *Register[i].InstrumentType=(const char*) sqlite3_column_text(SQL,2);
       *Register[i].Protocol=(const char*) sqlite3_column_text(SQL,3);
       Register[i].RegNum= sqlite3_column_int(SQL,5);
       *Register[i].RW=(const char*) sqlite3_column_text(SQL,5);
       *Register[i].RegisterType=(const char*) sqlite3_column_text(SQL,6);
       *Register[i].Signed=(const char*) sqlite3_column_text(SQL,7);
       *Register[i].Inverted=(const char*) sqlite3_column_text(SQL,8);
       *Register[i].DataType=(const char*) sqlite3_column_text(SQL,9);
       printf("Magprobe %d\n", i);
       printf("Instrument Type: ");
       printf("%s\n", Register[i].InstrumentType);
       printf("Protocol: ");
       printf("%s\n", Register[i].Protocol);
       printf("Register: ");
       printf("%d\n", Register[i].RegNum);
       printf("R/W?: ");
       printf("%s\n", Register[i].RW);
       printf("Register Type: ");
       printf("%s\n", Register[i].RegisterType);
       printf("Signed?: ");
       printf("%s\n", Register[i].Signed);
       printf("Inverted?: ");
       printf("%s\n", Register[i].Inverted);
       printf("Data Type: ");
       printf("%s\n", Register[i].DataType);
     }
       sqlite3_finalize(SQL);
       sqlite3_close(db);

    return EXIT_SUCCESS;
}

我知道该错误与char数组和char有关,但是我尝试了多种方法来解决此问题。同样,返回的int始终为0的事实使我相信我的prepare或bind语句也存在错误。

唱片

使用不能将一个数组分配给另一个数组,您必须将源数组内容复制到目标数组,例如使用strcpy

unsigned char *value = sqlite3_column_text(SQL,2);
if ((value != NULL) && (strlen(value) < sizeof(Register[i].InstrumentType)))
{       
    strcpy(Register[i].InstrumentType, value);
}

在您的特定情况下,您还可以使用指针来重构您的结构。

Register[i].InstrumentType=(const char*) sqlite3_column_text(SQL,2);
if (Register[i].InstrumentType != NULL)
{
   //...
}

我写了您的特定情况是由于您立即调用sqlite3_finalizesqlite3_column_text的返回值就无效了。


另一件事是查询执行,绑定后必须调用

rc = sqlite3_step(stmt);

检索查询执行的结果。您应该循环直到返回的值是== SQLITE_ROW

 for (i=0; i<4; i++)
 {
    rc = sqlite3_prepare_v2(db, "SELECT * from instrumentsdefinition WHERE Type='Magprobe' AND Register=?;", -1, &SQL, 0);

    rc = sqlite3_bind_int(SQL, 1, i);

    rc = sqlite3_step(stmt);

    if (rc == SQLITE_ROW)
    {
       // QUERY retrieve a record from DB
    }

最后一件事,最好更改数组的名称。没有与定义的结构类型相同的名称。就像是Register registers[8];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

读取sqlite数据库

来自分类Dev

Zeoslib无法从sqlite数据库读取LargeInt字段

来自分类Dev

Jar文件无法读取sqlite数据库文件

来自分类Dev

无法从Firebase数据库读取数据

来自分类Dev

无法从数据库读取值

来自分类Dev

无法读取数据库架构

来自分类Dev

无法读取数据库或对象只读

来自分类Dev

无法从Sqlite数据库的游标窗口中读取第0行,第-1列

来自分类Dev

iPhone作为Xcode模拟器无法从sqlite数据库读取

来自分类Dev

无法从Sqlite数据库的游标窗口中读取第0行,第-1列

来自分类Dev

无法从Spark访问sqlite数据库

来自分类Dev

无法删除sqlite数据库

来自分类Dev

无法打开数据库android Sqlite

来自分类Dev

无法查询Android SQLite数据库

来自分类Dev

数据库sqlite无法运行,

来自分类Dev

sqlite无法打开数据库

来自分类Dev

无法创建本地数据库SQLite

来自分类Dev

SQLite数据库无法正常工作

来自分类Dev

PDO SQLite无法打开数据库

来自分类Dev

SQLIte数据库无法删除条目

来自分类Dev

Laravel Sqlite 数据库无法连接

来自分类Dev

Expo SQLite 无法查询数据库

来自分类Dev

Android 无法创建 SQLite 数据库

来自分类Dev

Android中的SqLite数据库始终处于初始化状态/为空,无法读取数据

来自分类Dev

从sqlite3远程数据库读取

来自分类Dev

如何使用cursorloader读取Android中的SQLite数据库?

来自分类Dev

使用sql.js从磁盘读取SQLite数据库

来自分类Dev

从SQLite数据库中读取Google Map Marker的值

来自分类Dev

PhoneGap-读取预打包的sqlite数据库