vc編譯sqlite資料庫
領導說下一個階段有可能要我做一個數據庫的測試小程式,問我懂這方面不?我說以前接觸過,現在拾一拾應該沒問題。
聽說有一個嵌入式的資料庫,叫sqlite,不需要安裝資料庫伺服器,可以作為程式的一個dll,使用時會將資料儲存成資料庫檔案。
最重要的是,這是個開源的資料庫!
到谷歌上搜sqlite,第一項便是官方網站:www.sqlite.org。進去後,先了解一下大體,感覺還不錯。
進入Document頁面,大標題SQLite Programming Interfaces下有一些小標題,進入第一個標題SQLite In 5 Minutes Or Less,看到有一段簡短而完整的c語言操作資料庫的程式,感覺稍稍有些excited,心想,一會兒就跑這個鳥兒!接著又在document這兒逛了下···
進入下載頁面,瀏覽了一個下載項,找我想要的windows版本的相關東東。看到大標題有一項:Precompiled Binaries For Windows,第一項是個shell command,讓我聯想起了MySql的那個command視窗(嘻嘻,我沒怎麼用過MySql,這是在學校學習的時候弱弱的玩過一下)。我想,這個應該是通往資料庫的大門吧,下下來,執行,提示.help命令會顯示幫助,顯示出來不是特友好,在回到下載頁面,看到對該下載項的描述:A command-line shell for accessing and modifying SQLite databases. This program is compatible with all versions of SQLite through 3.7.6 and beyond. 點那個
下面就該呼叫sqlite的庫,寫個程式了。
把原始碼下下來(第一項便是),上面有這麼一句話:This ZIP archive contains all C source code for SQLite 3.7.6.2 combined into a single source file (the amalgamation). 真扯!點了那個 amalgamation,似乎說是將n多個.c和.h檔案用makefile整成了一個檔案.c檔案。不知道高人為啥這麼做,反正給研究原始碼增加了難度。好了,無論怎樣,原始碼還是有的,下下來,有四個檔案shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h。那個shell.c就是shell command的原始碼了,暫時不用,那個sqlite3ext.h我也不想包含進來,所以就拷貝了sqlite3.c,sqlite3.h到一個新建的dll工程下面,將檔案新增到工程中,編譯,就知道會出錯,錯誤是:fatal error C1853: 'Debug/sqlite.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)。看樣子時跟預編譯標頭檔案有關係,在sqlite.c中包含以下"stdafx.h",也不好使。
網上查了下,大體說是這個檔案時.c檔案,預編譯是對.cpp檔案的,可以把該.c的預編譯標頭檔案設成No,步驟是:
右擊該檔案:Properties-->C/C++-->Precompiled Headers,將選項Create/Use Precompiled Header設為:Not Using Precompiled Headers即可。再編譯,通過了。
至於預編譯標頭檔案是怎麼一回事兒,這裡就不多談了,超出了本部落格範圍(其實本人還沒徹底研究過,一般寫書都這麼說的,呵呵)。
有用資訊如下:
SQLite官方下載只提供給我們一個sqlite3.dll跟一個sqlite3.def檔案,並沒有提供用於VC++6.0的lib檔案,可以利用sqlite3.def檔案生成,步驟如下:
1.將sqlite3.h(可從原始碼目錄獲得)拷貝到C:/Program Files/Microsoft Visual Studio/VC98/Include目錄下,這時編譯可通過,但連結錯誤,因為沒有LIB檔案
2.啟動一個命令列程式,進入VC的安裝目錄C:/Program Files/Microsoft Visual Studio/VC98/Bin,在這個目錄下面有一個LIB.exe檔案,使用它就能生成sqlite3.lib檔案,將sqlite3.def檔案放到相同目錄,或者絕對路徑也可以, 然後在命令列輸入如下命令:
LIB /MACHINE:IX86 /DEF:sqlite3.def
該命令生成兩個檔案:sqlite3.lib和sqlite3.exp
執行該命令時,如果提示找不到MSPDB60.DLL檔案,可從其它目錄拷貝至Bin目錄下
3.將生成的sqlite3.lib拷貝到Lib目錄下,將sqlite3.dll拷貝到C:/WINNT/system32目錄下
5.將sqlite3.lib加入到工程連結中,Project->Settings,Link選項卡,Object/library modules最後添入sqlite3.lib這時以下程式便可通過編譯連結並執行。
不過這個是教給如何用dll和def檔案生成lib檔案的,看來download頁面還有一個下載這兩個檔案的選項,那就是Precompiled Binaries For Windows大標題下的第二項,下下來,解壓,果然就有sqlite3.dll和sqlite3.def兩個檔案。可是,我想編譯原始碼來生成dl啊!
開啟sqlite3.h一看,所有函式都不是匯出函式,沒有匯出函式,就沒有lib檔案了。再仔細一看,所有函式前面加了個巨集定義SQLITE_API,檢視該巨集,是個空,哈哈,將其定義為__declspec(dllexport),編譯,還是沒有.lib檔案。原因是什麼呢,前面說到sqlite.c是個用makefile生成的包含了所有原始檔的檔案,那就是說sqlite3.h根本沒用到,檢視sqlite.c,發現其開始出也有SQLITE_API的巨集定義,
如下:
#ifndef SQLITE_API
# define SQLITE_API
#endif
將其改為:
#ifndef SQLITE_API
# define SQLITE_API __declspec(dllexport)
#endif
再編譯,lib檔案終於生成了!
下面該寫一個test工程了,新建一個控制檯工程,為了簡單起見,將sqlite.dll,sqlite.lib,sqlite3.h都拷貝到test工程下面,在main()函式上面加上下面兩行:
#include "sqlite3.h"
#pragma comment(lib, "sqlite.lib")
然後,就抄那個上面說到讓我excited的程式,編譯通過。執行的時候要用到之前讀command shell manual的時候,按照上面建立的那個資料庫,把ex1資料庫拷貝到Debug目錄下,在命令列下,執行:
test ex1 "select * from tbll"
結果顯示:
one = hello!
two = 10
one = googdbye
two = 20
嘿嘿,至此,所有工作搞定!
週末,正好有時間,用部落格記錄下來,該去吃飯了!
哦,對了,我想高人把把多個檔案弄成一個的好處就是編譯sqlite原始碼的時候,我們只需要用到sqlite3.c即可,而使用sqlite類庫的時候,我們就用到sqlite3.h就可以了... 呵呵,還是有點暈。。。
相關推薦
vc編譯sqlite資料庫
領導說下一個階段有可能要我做一個數據庫的測試小程式,問我懂這方面不?我說以前接觸過,現在拾一拾應該沒問題。 聽說有一個嵌入式的資料庫,叫sqlite,不需要安裝資料庫伺服器,可以作為程式的一個dll,使用時會將資料儲存成資料庫檔案。 最重要的是,這是個開源的資料庫! 到谷歌上
vc編譯Sqlite原始碼小記
主要參考了下面的文章: 講講按上面方法編譯時,碰到的問題和解決辦法: 1,模組定義檔案 原文是在模組定義檔案裡直接寫上sqlite3.def,但我在編譯的時候會報 錯: error LNK1104: 無法開啟檔案“sqlite3.def“ 但在使用絕對路徑後,這個錯誤就沒
vc連線sqlite資料庫
以下是sqlite3.exe sqlite3.h sqlite.lib sqlite3.dll的免費下載地址:http://download.csdn.net/detail/lp310018931/7
C++編譯SQLite資料庫以及如何使用加密資料庫SQLCipher
一、前言最近在倒騰東西的時候無意中需要在PC端解密某社交工具的資料庫,移動裝置中的加密資料庫資訊
VC編譯連接選項詳解
處理器 指向 with 搜索 alignment macro 調用程序 types 同步 VC編譯連接選項詳解 大家可能一直在用VC開發軟件,但是對於這個編譯器卻未必很了解。原因是多方面的。大多數情況下,我們只停留在“使用”它,而不會想去“了解”它。因為它只是一個工具,
VC++編譯lua庫 無法解析lua符號問題
dsm div number blog reg gist html name dpa VC編譯lua庫 出現錯誤: 錯誤 36 error LNK1120: 21 個無法解析的外部命令 C:\Users\luozhuang\Desktop\onscripter
Windows 編譯libcurl(openssl+zlib)(使用VC編譯)
org tar 處理器 verify easy 控制臺應用程序 默認安裝 1.0 tps libcurl主要功能就是用不同的協議連接和溝通不同的服務器,如果使用HTTPS,需要OpenSSL libcurl https://curl.haxx.se/downl
windows下vc編譯和debug nginx
topic 命令行 zlib err pack its fd_set figure htm 總體來說,各個步驟以及版本參考官方文檔http://nginx.org/en/docs/howto_build_on_win32.html一點沒錯,有些細節沒說清楚。 To buil
Atitit hibernste5 註解方式開發總結 目錄 1. 映入hb5的jar 建立專案 1 1.1. 建表tab1 ,這裡使用了sqlite資料庫 1 1.2. 建立對映實體類tab1
Atitit hibernste5 註解方式開發總結 目錄 1. 映入hb5的jar 建立專案 1 1.1. 建表tab1 ,這裡使用了sqlite資料庫 1 1.2. 建立對映實體類tab1  
VS配置、編譯sqlite失敗的解決方法
在VS上有需要使用到資料庫,選擇的資料庫是輕量級的資料庫—sqlite。這個資料庫的特點就是呼叫方便,且支援視覺化工具進行資料庫的編輯。但是,在VS2012上對sqlite進行配置的時候,一直無法除錯成功。  
Sqlite資料庫對時間進行比較SQL語句
開發工作,在於不斷積累,總結經驗,持續學習。 最近專案中有這樣的需求: 1、刪除當前月份前三個月訊息(如本月是10月刪除7、8、9三個月的訊息只儲存本月訊息)。 2、更新非本月訊息為已讀訊息(如本月為10月,1為已讀狀態,0為未讀狀態,10月的所有訊息狀態不變,非本月訊息狀態都為1)。
Qt實現把時間插入Sqlite資料庫並查詢
1.問題 Sqlite沒有時間型別,一般用vchar來實現 插入給time欄位插入資料 QString dataTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");//獲取當前
delphi使用sqlite資料庫時的中文路徑問題
https://blog.csdn.net/yuehaiyang/article/details/4184198 如果資料庫所在的路徑是中文路徑的話,根本執行不起來,會報錯,因為sqlite用的是utf8編碼。 解決辦法:AnsiToUtf8() 例如: DBPa
Android 資料儲存之 SQLite資料庫儲存
轉載自:https://www.cnblogs.com/woider/p/5136734.html ----------------------------------------SQLite資料庫---------------------------------------------- SQLite是一
Android核心技術-day03-01-建立SQLite資料庫
MyDBOpenHelper.java package com.gaozewen.createdb; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.
Navicat for Premium破解通用MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 資料庫
Navicat for Premium破解通用MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 資料庫 Navicat for MariaDB為例 Navicat Premium 是一套資料庫開發工具,讓你從單一應用程
Android SQLite資料庫demo
demo連結:https://download.csdn.net/download/meixi_android/10710400 建立資料庫版本v.1 /** * 作者:created by meixi * 郵箱:[email protected] * 日期
sqlite3- SQLite資料庫的DB-API 2.0介面
sqlite3- SQLite資料庫的DB-API 2.0介面 SQLite是一個C庫,它提供了一個基於磁碟的輕量級資料庫,它不需要單獨的伺服器程序,並允許使用SQL查詢語言的非標準變體訪問資料庫。某些應用程式可以使用SQLite進行內部資料儲存。也可以使用SQLite對應用程式進行原型
SQLite資料庫、ListView控制元件的使用
android下資料庫的建立(重點) 在Android平臺上,集成了一個輕量級嵌入式關係型資料庫—SQLite,SQLite3支援 NULL、INTEGER、REAL(浮點數字)、TEXT(字串文字)和BLOB(二進位制物件)資料型別,也接受varchar(n)、char(n)、deci
Qt操作SQLite資料庫
資料庫連線由任意字串標識。在沒有指定連線的情況下,QSqlDatabase可以提供預設連線供Qt其他的SQL類使用。建立一條資料庫連線的程式碼如下: //以QSQLITE為資料庫型別,在本程序地址控制元件建立一個SQLite資料庫 QSqlDatabase db = QSqlDatabas