1. 程式人生 > >sqlite資料庫中的sql語句大全

sqlite資料庫中的sql語句大全

2010年SQLite學習筆記之一

一. 如何獲取SQLite最新版本

即如下頁面下載

二.Windows下的SQLite的原始碼是哪個軟體壓縮包?

三.Window下的SQLite命令列工具

四.Window下的SQLite開發庫,即動態連結庫以及DEF檔案

五.SQLite最新版本是:3.6.22

六.b<=a && a <= c 的SQL語句如何寫

在SQLite中, 表示式"a BETWEEN b AND c"等於表示式 "a >= b AND a <= c",在比較表示式時,a可以是具有任何親和性

七.a的值是x,y,z其中一個值,SQL語句如何寫

SQLite把表示式 "a IN (x, y, z)" 和 "a = z OR a = y OR a = z"視為相等.

八.如何創建制定目錄的資料庫

sqlite3 D:/Project/SyncML/Lib/debug/atsync.db

九.建立資料的注意事項

如果不往資料庫裡面新增任何的表,這個資料庫等於沒有建立,不會在硬碟上產生任何檔案,如果資料庫已經存在,則會開啟這個資料庫

十.如何新增一張資料表

create table student(name varchar(10), age smallint);

十一.如何往資料表中新增資料

insert into student values('張三', 20);

十二.如何通過sqlite3.dll與sqlite3.def生成sqlite3.lib檔案

LIB /DEF:sqlite3.def /machine:IX86

十三.如何查詢SQLite工具的軟體版本

也就是sqlite3.exe應用程式小工具的版本號

方法一:進入sqlite3.exe所在目錄,在命令列執行如下命令

sqlite3 –version

方法二:

select sqlite_version();

十四.如何在字串中使用單引號(')?

SQL 標準規定,在字串中,單引號需要使用逃逸字元,即在一行中使用兩個單引號

十五.如果刪除了大量資料,而又想縮小資料庫檔案佔用的空間,執行 VACUUM 命令

vacuum;

十六.在SQLite中,如何在一個表上新增或刪除一列?

SQLite 有有限地 ALTER TABLE 支援。你可以使用它來在表的末尾增加一列,可更改表的名稱。 如果需要對錶結構做更復雜的改變,則必須重新建表。 重建時可以先將已存在的資料放到一個臨時表中,刪除原表, 建立新表,然後將資料從臨時表中複製回來。

如,假設有一個 t1 表,其中有 "a", "b", "c" 三列, 如果要刪除列 c ,以下過程描述如何做:

開始事物處理

BEGIN TRANSACTION;

建立臨時表格t1-backup

CREATE TEMPORARY TABLE t1_backup(a,b);

將資料庫表t1中的所有資料拷貝到表t1-backup中

INSERT INTO t1_backup SELECT a,b FROM t1;

刪除表格t1

DROP TABLE t1;

建立表格t1

CREATE TABLE t1(a,b);

將資料庫表t1-backup中的所有資料拷貝到表t1中

INSERT INTO t1 SELECT a,b FROM t1_backup;

刪除備份表格t1-backup

DROP TABLE t1_backup;

事物提交

COMMIT;

十七.如何查詢當前的編碼的編碼格式

pragma encoding;

十八.SQLite支援哪些資料型別些?

NULL 值為NULL
INTEGER 值為帶符號的整型,根據類別用1,2,3,4,6,8位元組儲存
REAL 值為浮點型,8位元組儲存
TEXT 值為text字串,使用資料庫編碼(UTF-8, UTF-16BE or UTF-16-LE)儲存
BLOB 值為二進位制資料,具體看實際輸入

但實際上,sqlite3也接受如下的資料型別:
smallint  16 位元的整數
interger  32 位元的整數
decimal(p,s)  p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值 ,s是指小數點後有幾位數。如果沒有特別指定,則系統會設為 p=5; s=0 。
float   32位元的實數。
double   64位元的實數。
char(n)   n 長度的字串,n不能超過 254。
varchar(n)  長度不固定且其最大長度為 n 的字串,n不能超過 4000。
graphic(n)  和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。 這個形態是為了支援兩個字元長度的字型,例如中文字。
vargraphic(n)  可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000。
date   包含了 年份、月份、日期。
time   包含了 小時、分鐘、秒。
timestamp  包含了 年、月、日、時、分、秒、千分之一秒。

十九.如果將某個欄位設定為INTEGER PRIMARY KEY屬性,有什麼特性?

如果將宣告表的一列設定為 INTEGER PRIMARY KEY,則具有:

1.每當你在該列上插入一NULL值時, NULL自動被轉換為一個比該列中最大值大1的一個整數;

2.如果表是空的, 將會是1;

注意該整數會比表中該列上的插入之前的最大值大1。 該鍵值在當前的表中是唯一的。但有可能與已從表中刪除的值重疊。要想建立在整個表的生命週期中唯一的鍵值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT宣告。那麼,新的鍵值將會比該表中曾能存在過的最大值大1。

二十.欄位宣告中有AUTOINCREMENT屬性,有什麼與眾不同的含義?

要想建立在整個表的生命週期中唯一的鍵值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT宣告。那麼,新的鍵值將會比該表中曾能存在過的最大值大1。

2010年SQLite學習筆記之二

一.建立資料庫

sqlite3.exe test.db

二.雙擊sqlite-3_6_16目錄下的程式sqlite3.exe,即可執行

三.退出

.exit

或者

.quit

四.SQLite支援如下5種資料型別

1.NULL:空值。
2.INTEGER:帶符號的整型,具體取決有存入數字的範圍大小。
3.REAL:浮點數字,儲存為8-byte IEEE浮點數。
4.TEXT:字串文字。
5.BLOB:二進位制物件。

五.聯絡人表格結構如下

create table contact(id integer primary key autoincrement,

lastname varchar(20),firstname varchar(20),

mobile varchar(30), telephone varchar(20),

email varchar(30), company varchar(50),

department varchar(16),address varchar(80),

id1 interger,id2 integer, updatetime datetime);

六.檢視資料庫有哪些資料表

命令是:.tables

七.如何插入一條記錄

insert into contact(lastname,firstname,mobile,telephone,updatetime) values('劉','暢','13910128132','010-81749136','2009-07-22');

八.檢視資料表的結構

針對整個資料庫

.schema

針對僅僅是contact聯絡人該表

.schema contact 注意沒有分號

九.如何開啟一個已經建立的資料庫

sqlite3 test.db

十.如何解決如下問題

SQL error: near "sqlite3": syntax error

SQL指令都是以分號(;)結尾的。如果遇到兩個減號(--)則代表註解,sqlite3會略過去

十一.如何建立索引

create index index_name on table_name(field_to_be_indexed);

十二.如何刪除一張資料表

drop table contact;

十三.檢視當前的資料庫

.database

十四.如何刪除一個數據表的資料

delete from contact;

十五.如何匯入一個檔案到某個表中

.import 檔案路徑 表名

注意這是非SQL語句,所以不加分號

十六.如何設定檔案欄位的分隔符

.separator “,”

.import e:/contact.txt contact

十七.如何檢視當前sqllite欄位的分隔符是什麼?

.show

十八.如何將查詢結果匯出到一個檔案

第一步:.output a.txt

第二步:執行要匯出的SQL語句

第三步:.output stdout

十九.SQL查詢語句

select * from film order by year limit 10;

select * from film order by year desc limit 10;

select count(*) from film;

select * from film where starring like 'Jodie%';

select * from film where starring='Jodie Foster';

select title, year from film order by year desc limit 10;

select columns from table_name where expression;

最常見的用法,當然是倒出所有資料庫的內容:

select * from film;

如果資料太多了,我們或許會想限制筆數:

select * from film limit 10;

或是照著電影年份來排列:

select * from film order by year limit 10;

或是年份比較近的電影先列出來:

select * from film order by year desc limit 10;

或是我們只想看電影名稱跟年份:

select title, year from film order by year desc limit 10;

查所有茱蒂佛斯特演過的電影:

select * from film where starring='Jodie Foster';

查所有演員名字開頭叫茱蒂的電影('%' 符號便是 SQL 的萬用字元):

select * from film where starring like 'Jodie%';

查所有演員名字以茱蒂開頭、年份晚於1985年、年份晚的優先列出、最多十筆,只列出電影名稱和年份:

select title, year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10;

有時候我們只想知道資料庫一共有多少筆資料:

select count(*) from film;

有時候我們只想知道1985年以後的電影有幾部:

select count(*) from film where year >= 1985;

(進一步的各種組合,要去看SQL專書,不過你大概已經知道SQL為什麼這麼流行了:這種語言允許你將各種查詢條件組合在一起──而我們還沒提到「跨資料庫的聯合查詢」呢!)

如何更改或刪除資料

瞭解select的用法非常重要,因為要在sqlite更改或刪除一筆資料,也是靠同樣的語法。

例如有一筆資料的名字打錯了:

update film set starring='Jodie Foster' where starring='Jodee Foster';

就會把主角欄位裡,被打成'Jodee Foster'的那筆(或多筆)資料,改回成Jodie Foster。

delete from film where year < 1970;

就會刪除所有年代早於1970年(不含)的電影了。

其他sqlite的特別用法

sqlite可以在shell底下直接執行命令:

sqlite3 film.db "select * from film;"

輸出 HTML 表格:

sqlite3 -html film.db "select * from film;"

將資料庫「倒出來」:

sqlite3 film.db ".dump" > output.sql

利用輸出的資料,建立一個一模一樣的資料庫(加上以上指令,就是標準的SQL資料庫備份了):

sqlite3 film.db < output.sql

在大量插入資料時,你可能會需要先打這個指令:

begin;

插入完資料後要記得打這個指令,資料才會寫進資料庫中:

commit;

建立資料庫檔案:
   >SQLite3 d:/test.db 回車
就生成了一個test.db在d盤。
這樣同時也SQLite3掛上了這個test.db
   2)
用.help可以看看有什麼命令
   >.help 回車即可
   3)可以在這裡直接輸入SQL語句建立表格 用;結束 ,然後回車就可以看到了
   4)看看有建立了多少表
   >.tables
   5)看錶結構
   >.schema 表名
   6)看看目前的資料庫
   >.database
   7)如果要把查詢輸出到檔案
   >.output 檔名
   > 查詢語句;
查詢結果就輸出到了檔案c:/query.txt

把查詢結果用螢幕輸出
   >.output stdout

   8)把表結構輸出,同時索引也會輸出
     .dump 表名
   9)退出
   >.exit 或者.quit

2。從http://sqlite.phxsoftware.com/ 下載Ado.net驅動。
下載了安裝,在安裝目錄中存在System.Data.SQLite.dll
我們只需要拷貝這個檔案到引用目錄,並新增引用即可對SQLite資料庫操作了
所有的Ado.net物件都是以SQLite開頭的,比如SQLiteConnection
連線串只需要如下方式
   Data Source=d:/test.db 或者DataSource=test.db--應用在和應用程式或者.net能夠自動找到的目錄
剩下的就很簡單了~~

3。SQL語法
由於以前用SQLServer或者ISeries,所以DDL的語法很汗顏
   1)建立一個單個Primary Key的table
   CREATE TABLE  [Admin] (
[UserName] [nvarchar] (20)   PRIMARY KEY NOT NULL ,
[Password] [nvarchar] (50)   NOT NULL ,
[Rank] [smallint] NOT NULL ,
[MailServer] [nvarchar] (50)   NOT NULL ,
[MailUser] [nvarchar] (50)   NOT NULL ,
[MailPassword] [nvarchar] (50)   NOT NULL ,
[Mail] [nvarchar] (50)   NOT NULL
   ) ;
   2)建立一個多個Primary Key的table
   CREATE TABLE  [CodeDetail] (
[CdType] [nvarchar] (10)  NOT NULL ,
[CdCode] [nvarchar] (20)  NOT NULL ,
[CdString1] [ntext]   NOT NULL ,
[CdString2] [ntext]   NOT NULL ,
[CdString3] [ntext]   NOT NULL,
  PRIMARY KEY (CdType,CdCode)
   ) ;
   3)建立索引
   CREATE  INDEX [IX_Account] ON  [Account]([IsCheck], [UserName]);
還可以檢視等等。
4.還有很有用的SQL
  Select * from Sqlite_master
  Select datetime('now')
  Select date('now')
  Select time('now')

SQLite 內建函式表

算術函式

abs(X)

返回給定數字表達式的絕對值。

max(X,Y[,...])

返回表示式的最大值。

min(X,Y[,...])

返回表示式的最小值。

random(*)

返回隨機數。

round(X[,Y])

返回數字表達式並四捨五入為指定的長度或精度。

字元處理函式

length(X)

返回給定字串表示式的字元個數。

lower(X)

將大寫字元資料轉換為小寫字元資料後返回字元表示式。

upper(X)

返回將小寫字元資料轉換為大寫的字元表示式。

substr(X,Y,Z)

返回表示式的一部分。

randstr()

quote(A)

like(A,B)

確定給定的字串是否與指定的模式匹配。

glob(A,B)

條件判斷函式

coalesce(X,Y[,...])

ifnull(X,Y)

nullif(X,Y)

集合函式

avg(X)

返回組中值的平均值。

count(X)

返回組中專案的數量。

max(X)

返回組中值的最大值。

min(X)

返回組中值的最小值。

sum(X)

返回表示式中所有值的和。

其他函式

typeof(X)

返回資料的型別。

last_insert_rowid()

返回最後插入的資料的 ID 。

sqlite_version(*)

返回 SQLite 的版本。

change_count()

返回受上一語句影響的行數。

last_statement_change_count()

oh,還有就是看到有人說,好像成批插入的時候,啟動事務,比不啟動事務快n倍
還有就是儘量使用引數化的SQL,估計和商用DB一樣能夠自動Prepare.

===========

sqlite可以在shell/dos command底下直接執行命令:
sqlite3 film.db "select * from film;"
輸出 HTML 表格:
sqlite3 -html film.db "select * from film;"
將資料庫「倒出來」:

sqlite3 film.db ".dump" > output.sql
利用輸出的資料,建立一個一模一樣的資料庫(加上以上指令,就是標準的SQL資料庫備份了):
sqlite3 film.db < output.sql
在大量插入資料時,你可能會需要先打這個指令:
begin;
插入完資料後要記得打這個指令,資料才會寫進資料庫中:
commit;

SQLITE深入------常見問題

如何建立自動增長欄位?

簡短回答:宣告為 INTEGER PRIMARY KEY 的列將會自動增長

長一點的答案: 如果你宣告表的一列為 INTEGER PRIMARY KEY,那麼, 每當你在該列上插入一NULL值時, NULL自動被轉換為一個比該列中最大值大1的一個整數,如果表是空的, 將會是1。 (如果是最大可能的主鍵 9223372036854775807,那個,將鍵值將是隨機未使用的數。) 如,有下列表:

CREATE TABLE t1(
a INTEGER PRIMARY KEY,
b INTEGER
);
在該表上,下列語句

INSERT INTO t1 VALUES(NULL,123);
在邏輯上等價於:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123);
有一個新的API叫做 sqlite3_last_insert_rowid(), 它將返回最近插入的整數值。 注意該整數會比表中該列上的插入之前的最大值大1。 該鍵值在當前的表中是唯一的。但有可能與已從表中刪除的值重疊。要想建立在整個表的生命週期中唯一的鍵值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT宣告。那麼,新的鍵值將會比該表中曾能存在過的最大值大1。如果最大可能的整數值在資料表中曾經存在過,INSERT將會失敗, 並返回SQLITE_FULL錯誤程式碼。

多個應用程式或一個應用程式的多個例項可以同時訪問同一個資料庫檔案嗎?

多個程序可同時開啟同一個資料庫。多個程序可以同時進行SELECT 操作,但在任一時刻,只能有一個程序對資料庫進行更改。

SQLite使用讀、寫鎖控制對資料庫的訪問。(在Win95/98/ME等不支援讀、寫鎖的系統下,使用一個概率性的模擬來代替。)但使用時要注意: 如果資料庫檔案存放於一個NFS檔案系統上,這種鎖機制可能不能正常工作。 這是因為 fcntl() 檔案鎖在很多NFS上沒有正確的實現。 在可能有多個程序同時訪問資料庫的時候,應該避免將資料庫檔案放到NFS上。在Windows上,Microsoft的文件中說:如果使用 FAT 檔案系統而沒有執行 share.exe 守護程序,那麼鎖可能是不能正常使用的。那些在Windows上有很多經驗的人告訴我:對於網路檔案,檔案鎖的實現有好多Bug,是靠不住的。如果他們說的是對的,那麼在兩臺或多臺Windows機器間共享資料庫可能會引起不期望的問題。

我們意識到,沒有其它嵌入式的 SQL 資料庫引擎能象 SQLite 這樣處理如此多的併發。SQLite允許多個程序同時開啟一個數據庫,同時讀一個數據庫。當有任何程序想要寫時,它必須在更新過程中鎖住資料庫檔案。但那通常只是幾毫秒的時間。其它程序只需等待寫程序幹完活結束。典型地,其它嵌入式的SQL資料庫引擎同時只允許一個程序連線到資料庫。

但是,Client/Server資料庫引擎(如 PostgreSQL, MySQL, 或 Oracle)通常支援更高級別的併發,並且允許多個程序同時寫同一個資料庫。這種機制在Client/Server結構的資料庫上是可能的,因為總是有一個單一的伺服器程序很好地控制、協調對資料庫的訪問。如果你的應用程式需要很多的併發,那麼你應該考慮使用一個Client/Server 結構的資料庫。但經驗表明,很多應用程式需要的併發,往往比其設計者所想象的少得多。

當SQLite試圖訪問一個被其它程序鎖住的檔案時,預設的行為是返回 SQLITE_BUSY。 可以在C程式碼中使用 sqlite3_busy_handler() 或 sqlite3_busy_timeout() API 函式調整這一行為。

在SQLite資料庫中如何列出所有的表和索引?

如果你執行 sqlite3 命令列來訪問你的資料庫,可以鍵入 “.tables”來獲得所有表的列表。或者,你可以輸入 “.schema” 來看整個資料庫模式,包括所有的表的索引。輸入這些命令,後面跟一個LIKE模式匹配可以限制顯示的表。

在一個 C/C++ 程式中(或者指令碼語言使用 Tcl/Ruby/Perl/Python 等) 你可以在一個特殊的名叫 SQLITE_MASTER 上執行一個SELECT查詢以獲得所有 表的索引。每一個 SQLite 資料庫都有一個叫 SQLITE_MASTER 的表, 它定義資料庫的模式。 SQLITE_MASTER 表看起來如下:

CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT
);
對於表來說,type 欄位永遠是 'table',name 欄位永遠是表的名字。所以,要獲得資料庫中所有表的列表,使用下列SELECT語句:

SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;
對於索引,type 等於 'index', name 則是索引的名字,tbl_name 是該索引所屬的表的名字。不管是表還是索引,sql 欄位是原先用 CREATE TABLE 或 CREATE INDEX 語句建立它們時的命令文字。對於自動建立的索引(用來實現 PRIMARY KEY 或 UNIQUE 約束),sql欄位為NULL。

SQLITE_MASTER 表是隻讀的。不能對它使用 UPDATE、INSERT 或 DELETE。 它會被 CREATE TABLE、CREATE INDEX、DROP TABLE 和 DROP INDEX 命令自動更新。

臨時表不會出現在 SQLITE_MASTER 表中。臨時表及其索引和觸發器存放在另外一個叫 SQLITE_TEMP_MASTER 的表中。SQLITE_TEMP_MASTER 跟 SQLITE_MASTER 差不多,但它只是對於建立那些臨時表的應用可見。如果要獲得所有表的列表, 不管是永久的還是臨時的,可以使用類似下面的命令:

SELECT name FROM
   (SELECT * FROM sqlite_master UNION ALL
    SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name

在SQLite中,VARCHAR欄位最長是多少?

SQLite 不強制 VARCHAR 的長度。 你可以在 SQLITE 中宣告一個 VARCHAR(10),SQLite還是可以很高興地允許你放入500個字元。 並且這500個字元是原封不動的,它永遠不會被截斷。

SQLite支援二進位制大物件嗎?

SQLite 3.0 及以後版本允許你在任何列中儲存 BLOB 資料。 即使該列被宣告為其它型別也可以。

在SQLite中,如何在一個表上新增或刪除一列?

SQLite 有有限地 ALTER TABLE 支援。你可以使用它來在表的末尾增加一列,可更改表的名稱。 如果需要對錶結構做更復雜的改變,則必須重新建表。重建時可以先將已存在的資料放到一個臨時表中,刪除原表, 建立新表,然後將資料從臨時表中複製回來。

如,假設有一個 t1 表,其中有 "a", "b", "c" 三列, 如果要刪除列 c ,以下過程描述如何做:

BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,b);
INSERT INTO t1_backup SELECT a,b FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b);
INSERT INTO t1 SELECT a,b FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;

在資料庫中刪除了很多資料,但資料庫檔案沒有變小,是Bug嗎?

不是。當你從SQLite資料庫中刪除資料時, 未用的磁碟空間將會加入一個內部的“自由列表”中。 當你下次插入資料時,這部分空間可以重用。磁碟空間不會丟失,但也不會返還給作業系統。

如果刪除了大量資料,而又想縮小資料庫檔案佔用的空間,執行 VACUUM 命令。 VACUUM 將會從頭重新組織資料庫。這將會使用資料庫有一個空的“自由連結串列”, 資料庫檔案也會最小。但要注意的是,VACUUM 的執行會需要一些時間(在SQLite開發時,在Linux上,大約每M位元組需要半秒種),並且, 執行過程中需要原資料庫檔案至多兩倍的臨時磁碟空間。

對於 SQLite 3.1版本,一個 auto-vacumm 模式可以替代 VACUUM 命令。 可以使用 auto_vacuum pragma 開啟。

SQLITE_SCHEMA error是什麼錯誤?為什麼會出現該錯誤?

當一個準備好的(prepared)SQL語句不再有效或者無法執行時, 將返回一個 SQLITE_SCHEMA 錯誤。發生該錯誤時,SQL語句必須使用 sqlite3_prepare() API來重新編譯. 在 SQLite 3 中, 一個 SQLITE_SCHEMA 錯誤只會發生在用 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 執行 SQL 時。而不會發生在使用 sqlite3_exec()時。 在版本2中不是這樣。

準備好的語句失效的最通常原因是:在語句準備好後, 資料庫的模式又被修改了。另外的原因會發生在:

資料庫離線:DETACHed.
資料庫被 VACUUMed
一個使用者儲存過程定義被刪除或改變。
一個 collation 序列定義被刪除或改變。
認證函式被改變。
在所有情況下,解決方法是重新編譯並執行該SQL語句。 因為一個已準備好的語句可以由於其它程序改變資料庫模式而失效,所有使用 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 的程式碼都應準備處理 SQLITE_SCHEMA 錯誤。下面給出一個例子:

    int rc;
    sqlite3_stmt *pStmt;
    char zSql[] = "SELECT .....";

    do {
      /* Compile the statement from SQL. Assume success. */
      sqlite3_prepare(pDb, zSql, -1, &pStmt, 0);

      while( SQLITE_ROW==sqlite3_step(pStmt) ){
        /* Do something with the row of available data */
      }

      /* Finalize the statement. If an SQLITE_SCHEMA error has
      ** occured, then the above call to sqlite3_step() will have
      ** returned SQLITE_ERROR. sqlite3_finalize() will return
      ** SQLITE_SCHEMA. In this case the loop will execute again.
      */
      rc = sqlite3_finalize(pStmt);
    } while( rc==SQLITE_SCHEMA );

如何在字串中使用單引號(')?

SQL 標準規定,在字串中,單引號需要使用逃逸字元,即在一行中使用兩個單引號。在這方面 SQL 用起來類似 Pascal 語言。 SQLite 尊循標準。如:

    INSERT INTO xyz VALUES('5 O''clock');

Sqlite中如何返回本地化當前時間?
在做ClinicOS的時候遇到一個問題,在儲存病歷登記時間時,我使用了“CURRENT_TIMESTAMP”,但這有個問題,它返回的是UTC Time,這對我們中國人沒啥用,一直希望能想辦法將它轉為localtime。今天剛好有空,所以去查了查Sqlite的Mail List,果然也有人遇到了這個問題,我從一篇名為《translate time comparison statement》(http://www.mail-archive.com/[email protected] /msg12350.html)中看到這樣的回覆:

二十.如何更新表中資料

update contact set lastname=’江南七怪’where id = 1028

update contact set lastname='江南七怪', mobile='13912345678' where id=1028;

二十一.如何一次插入多個數據

Insert into SAMPLE(PRJNUM, PRJNAME, EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE)
values(100001, 'TPMS', 200001, 'Johnson', 'A', 2000), (100001, 'TPMS', 200002,
'Christine', 'B', 3000), (100001, 'TPMS', 200003, 'Kevin', 'C', 4000), (100002,
'TCT', 200001, 'Johnson', 'A', 2000), (100002, 'TCT', 200004, 'Apple', 'B',
3000);

2010年SQLite學習筆記之三

一.如何備份資料庫

先開啟資料庫test.db

E:/sqlite/tool/sqlite-3_6_22>sqlite3 D:/Test/debug/test.db

sqlite> .backup D://Test//debug//test.bak

注意:一定要用//雙斜槓

二.如何恢復資料庫

先開啟資料庫test.db

E:/sqlite/tool/sqlite-3_6_22>sqlite3 D:/Test/debug/test.db

sqlite> .restore D://Test//debug//test.bak

注意:一定要用//雙斜槓

三.先判斷表如果不存在,則再建立表

SQL可以如下寫,供參考:

create table if not exists student(id integer primary key autoincrement,/

age smallint ,anchor smallint);

四.如何查詢SQLite3小工具或者SQLite3.dll動態連結庫的版本

執行 select sqlite_version();命令即可

五.SQLite3的最新版本是(截止日期2010年2月22日)

3.6.22

六.針對SQLite3,兩大優秀C++封裝庫

1.CppSQLite3

2.wxSQLite3

七.如何在Windows下編譯SQLite3

1.先從官網獲取sqlite-amalgamation-3_6_22.zip;

2.接著從官網獲取sqlitedll-3_6_22.zip

下載編譯好的DLL,這裡有我們需要的sqlite3.def該檔案

3.開啟VC新建一個“Win32 Dynamic-Link Library”工程,命名為:sqlite3;

4.在接下來的對話方塊中選擇"An empty DLL project",點 FINISH->OK;

5.將sqlite-amalgamation-3_6_22資料夾下的sqlite3.h以及sqlite3.c兩個檔案複製到工程資料夾下;

將sqlitedll-3_6_22資料夾下的sqlite3.def該檔案複製到工程資料夾下;

6.在工程的Source Files中新增sqlite3.c檔案;

7.在工程的Include Files中新增sqlite3.h檔案;

8.在工程的Resource Files中新增sqlite3.def檔案;

9.針對如下問題:

sqlite3.def : error LNK2001: unresolved external symbol sqlite3_column_database_name

sqlite3.def : error LNK2001: unresolved external symbol sqlite3_column_database_name16

sqlite3.def : error LNK2001: unresolved external symbol sqlite3_column_origin_name

sqlite3.def : error LNK2001: unresolved external symbol sqlite3_column_origin_name16

sqlite3.def : error LNK2001: unresolved external symbol sqlite3_column_table_name

sqlite3.def : error LNK2001: unresolved external symbol sqlite3_column_table_name16

sqlite3.def : error LNK2001: unresolved external symbol sqlite3_table_column_metadata

Debug/sqlite3.lib : fatal error LNK1120: 7 unresolved externals

在選單【Project】-【Settings…】-【C/C++】標籤下的Category【General】下

Preprocessor definitions下:

新增2個編譯選項,分別是:

THREADSAFE

SQLITE_ENABLE_COLUMN_METADATA

10.往工程中新增sqlite3.def檔案就是為生成sqlite3.lib檔案;

sqlite3.lib是與sqlite3.dll動態連結庫檔案一起提供給軟體開發者的;

八.如何解決Windows下的編譯警告

e:/sqlite/code/sqlite3/sqlite3.c(15385) : warning C4047: 'function' : 'void ** ' differs in levels of indirection from 'long *'

e:/sqlite/code/sqlite3/sqlite3.c(15385) : warning C4022: 'InterlockedCompareExchange' : pointer mismatch for actual parameter 1

e:/sqlite/code/sqlite3/sqlite3.c(15385) : warning C4022: 'InterlockedCompareExchange' : pointer mismatch for actual parameter 2

e:/sqlite/code/sqlite3/sqlite3.c(15403) : warning C4047: 'function' : 'void ** ' differs in levels of indirection from 'long *'

e:/sqlite/code/sqlite3/sqlite3.c(15403) : warning C4022: 'InterlockedCompareExchange' : pointer mismatch for actual parameter 1

e:/sqlite/code/sqlite3/sqlite3.c(15403) : warning C4022: 'InterlockedCompareExchange' : pointer mismatch for actual parameter 3

e:/sqlite/code/sqlite3/sqlite3.c(15403) : warning C4047: '==' : 'void *' differs in levels of indirection from 'const int '

e:/sqlite/code/sqlite3/sqlite3.c(65536) : warning C4049: compiler limit : terminating line number emission

warning C4761: integral size mismatch in argument; conversion supplied

warning C4761: integral size mismatch in argument; conversion supplied

warning C4761: integral size mismatch in argument; conversion supplied

目前,還不想直接遮蔽警告錯誤。沒有想到更好的方法。待定。

有知道的朋友,還請指點。我將不甚感激。

相關推薦

資料庫基本----SQL語句大全

資料庫基本 ---- SQL語句大全一、基礎     1 、說明:建立資料庫    Create DATABASE database - name   &nb

MySql 資料庫sql語句取一段時間的每一天的最後一條

使用場景: 使用者每天都有上報資料,後臺需要檢視某個使用者近期一段時間內每天的資料走勢。於是需要查詢該使用者在這段時間內每天最後上報的那條資料。 程式碼如下: SELECT * FR

sqlite資料庫sql語句大全

2010年SQLite學習筆記之一 一. 如何獲取SQLite最新版本 即如下頁面下載 二.Windows下的SQLite的原始碼是哪個軟體壓縮包? 三.Window下的SQLite命令列工具 四.Window下的SQLite開發庫,即動態連結庫以及DEF檔案 五.SQLite最新版本是:

PHP連線資料庫sql語句的執行

在PHP中連線資料庫的方式主要有:mysql(面向過程)、mysqli(面向物件、面向過程)、PDO 但是,最常用的方式就是:mysqli的面向物件,實現的方法就是將mysqli封裝成一個類。 構造方法: —construct([string $host [,string $userna

MySqlSQL語句與其他資料庫不一樣的地方

目前發現的mysql與其他資料庫如SqlServer、Oracle不同的地方 mysql中的註釋(--)後要多加一個空格才生效 mysql中查詢條件的字串可以是雙引號 mysql中查詢條件的字串不區分大小寫 mysql中不能按拼音排序,要將資料庫的字符集由UTF-8修改為GBK mysql中有更簡單的分頁方法

Hibernatesession.flush()會不會去資料庫執行SQL語句

首先可以確定的是,如果不提交事務的話,雖然會生成SQL語句,但資料庫中的資料並不會改變 測試程式碼如下: 首先我的資料庫中有這些條資料,實體物件為UserModel 程式碼如下 Session session = HibernateUtil.getSessi

各種資料庫分頁查詢sql語句大全

在顯示記錄條目時往往要用到分頁,一種常用的辦法是利用各種資料庫自帶的定位介面對原始查詢語句進行改寫,從而只取出特定範圍的某些記錄。不同的資料庫,查詢定位介面是不一樣的,下面做一彙總:  資料庫  分頁查詢語句  說明  MySQL    "QUERY_SQL

Sql Server】經典SQL語句大全

left 提高 status 需要 minute etime 路徑 求和 組合 一、基礎 1、說明:創建數據庫 CREATE DATABASE database-name 2、說明:刪除數據庫 drop database dbname 3、說明:備份sql

pythonsql語句的占位符

type per mysq nbsp dem pre html 引號 字符 報錯信息:"File"/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 151, inexecute query = query % db

五、mysqlsql語句分類及常用操作

所表 desc 直接 常用操作 文件 ble div alter .cn 1.sql語句分類: DQL語句  數據查詢語言  select DML語句  數據操作語言  insert delete update DDL語句  數據定義語言  create drop

Oracle sql語句的取前n條數據

沒有 blog tab 註意 sql table bsp num 數據 取得薪水最高的前五名員工 sql: select * from ( select empno,ename,sal from emp order by sal desc) where rownum&l

SQL語句大全

大於等於 算術 特定 per 字符 ger 選擇 小年 外連接 SQL語句實例 表操作 例 1 對於表的教學管理數據庫中的表 STUDENTS ,可以定義如下: CREATE TABLE STUDENTS (SNO NUMERIC

phpsql語句

Mysql進入mysql; 在cmd中 net start mysql;//啟動mysql服務 net stop mysql;//關閉mysql服務mysql -uroot -hlocalhost -p;//進入mysqlcreate database 數據庫名字;//創建數據庫show databases;

mybatissql語句查詢操作

java 拼接 tca 指定 lose pan 添加 fill test 動態sql where if where可以自動處理第一個and。   <!-- 根據id查詢用戶信息 --> <!-- public User findUse

sql一個表的數據插入到另一個表sql語句怎麽寫?謝謝!

另一個 來電 一個 保留 生日 ongl 讓我 短信 都是 <p>  有了朋友,她不再感到孤獨,不再覺得無,助,不再產生自殘,她笑了,發自內心的真正的笑。她決定把心中的一切毫無保留地向他傾訴,她與他約好了時間。 但他太忙了,太忙了。於是,她在QQ上留言,在手機上

VB6基本資料庫應用(三):連線資料庫SQL語句的Select語句初步

資料庫我們已經建好了,重提一下上一章的結果,我們最後建立了一張Student的表,其中有StudentID(數字的雙精度型別)和StudentName(文字型別。補充一下,2013中有【長文字】和【短文字】,人名不會很長,根據上一章選擇儘量小的資料型別的規則,這裡就選【短文字】就可以了)。儘

vsSQL語句排版問題

在net開發中經常編寫sql語句,我一般是在VS之外使用其他的工具寫sql,測試完成之後將sql拷貝到VS中,拷貝到VS中的sql,經常將一些製表符和多餘的空格拷貝到VS中。 最近看VS的選單,發現可以將製表符替換成空格,並且將水平空白刪除,這樣就可以多餘的空白刪除,只保留一個空白(注意:刪除水

Python-資料庫 基本SQL語句

1.什麼是資料庫 ***** 存放資料的倉庫 資料庫中包含所有內容: 欄位(列) 一行中的某個資料 記錄 一行資料 表 檔案 庫 資料夾 DBMS 資料庫管理系統 socket軟體 資料庫伺服器 計算機 一個庫可以包含多個表 一個表可以包含

Python連線MySQL資料庫執行sql語句時的引數問題

由於工作需要,今天寫了一個Python小指令碼,其中需要連線MySQL資料庫,在執行sql命令時需要傳遞引數,結果出問題了。在網上查了一下,發現有以下幾種方式傳遞引數: 一.直接把sql查詢語句完整寫入字串 try: connection = MySQLdb.connect(user

sqlserver資料庫sql的使用

1. 分組排序更新 將分組記錄中的第一條資料的某個欄位更新到第二條資料上的欄位; --把序號為2的結束時間 更新為 序號為1的開始時間 WITH t2 as ( SELECT * FROM( SELECT ROW_NUMBER() OVER ( pa