簡體   English   中英

如何通過C-API運行SQLite3'PRAGMA'命令?

[英]How to run SQLite3 'PRAGMA' commands via C-API?

在我的C程序中,我需要運行以下pragma命令:

  const char *sql = "PRAGMA table_info(family)"; /* 'family' is the table name */

但是,無論我嘗試通過sqlite3_exec()例程還是sqlite3_prepare_v2()例程運行此sql,我的程序都將在Windows命令提示符下停止響應/工作(這是c語言中的簡單“控制台程序”)。

有趣的是,當我通過運行sqlite3.exe本身在命令提示符下正常運行相同的pragma sql時,它運行得很好,並給出以下輸出:

    sqlite> pragma table_info(family);
cid         name        type        notnull     dflt_value  pk
----------  ----------  ----------  ----------  ----------  ----------
0           id          INTEGER     0                       1
1           name        TEXT        1                       0
2           nickname    TEXT        1                       0
3           dob         TEXT        1           CURRENT_TI  0

但是在我自己的C程序中卻沒有。 我對此問題做了一些研究。 Googling和SQLite文檔在官方文檔中指向此頁面 但不幸的是,那里的給定信息不足以使我解決問題。 我們如何通過C-API成功運行SQLite3'PRAGMA'命令?

編輯:這是代碼的實際問題行。 MCVE

我已經找到了我的程序失敗的原因,並進行了修復(由Murphy的回答提供線索和線索。但是對於那些對重現該問題感興趣的人,這里是導致程序“崩潰”的實際代碼行。我的sqlite3_exec()例程的回調函數,我有這段代碼(for-loop)用於在列名稱下打印'----------'字符,以模仿“ .headers on .mode column “&” .headers on “在sqlite3控制台中的輸出樣式。

      int h;    
      for(h=0; h <= (strlen(col_value[i])+5); h++)
          printf("-");

問題是由strlen()在打印PRAGMA sql結果列dflt_valueheaders ”時引起的,該列對於表中的前三dflt_value空。 如果我停止在dflt_value上運行strlen() 該程序運行正常。 同樣,在sqlite3_prepare_v2()例程中,問題是由以下幾行引起的:

      int h;    
      for(h=0; h <= (strlen(sqlite3_column_text(stmt, 4))+5); h++)
          printf("-");  

如果我刪除或注釋這些行,則盡管它們沒有“ .headers on ”樣式,但它們都能很好地運行。

sqlite3_exec()應該確實是執行編譯指示的方法。 您沒有給出MCVE (可恥!),但我懷疑您要么忽略了處理錯誤值,要么代碼有其他問題。 您應該嘗試調試它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM