1. 程式人生 > >vc編譯sqlite資料庫

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. 點那個

command-line shell 連結,進去http://www.sqlite.org/sqlite.html頁面,是個對shell command的簡短的manual,從頭到尾邊看邊練習,可以建表,感覺挺好的(呵呵,廢話)。

下面就該呼叫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