<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        sqlite數據庫中的sql語句

        來源:懂視網 責編:小采 時間:2020-11-09 08:12:09
        文檔

        sqlite數據庫中的sql語句

        sqlite數據庫中的sql語句:2010年SQLite學習筆記之一 一. 如何獲取SQLite最新版本 官方站點: http://www.sqlite.org/ 從 http://www.sqlite.org/ 網站的Download頁面獲取 即如下頁面下載 http://www.sqlite.org/download.html http://blog
        推薦度:
        導讀sqlite數據庫中的sql語句:2010年SQLite學習筆記之一 一. 如何獲取SQLite最新版本 官方站點: http://www.sqlite.org/ 從 http://www.sqlite.org/ 網站的Download頁面獲取 即如下頁面下載 http://www.sqlite.org/download.html http://blog

        2010年SQLite學習筆記之一 一. 如何獲取SQLite最新版本 官方站點: http://www.sqlite.org/ 從 http://www.sqlite.org/ 網站的Download頁面獲取 即如下頁面下載 http://www.sqlite.org/download.html http://blog.csdn.net/littletigerat 二.Windows下的SQ

        2010年SQLite學習筆記之一

        一. 如何獲取SQLite最新版本

        官方站點:http://www.sqlite.org/

        從http://www.sqlite.org/網站的Download頁面獲取

        即如下頁面下載

        http://www.sqlite.org/download.html

        http://blog.csdn.net/littletigerat

        二.Windows下的SQLite的源代碼是哪個軟件壓縮包?

        sqlite-amalgamation-3_6_22.zip是SQLite的windows下源碼文件

        三.Window下的SQLite命令行工具

        sqlite-3_6_22.zip

        四.Window下的SQLite開發庫,即動態鏈接庫以及DEF文件

        sqlitedll-3_6_22.zip

        五.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/sqlite-users@sqlite.org /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

        http://www.codeproject.com/KB/database/CppSQLite.aspx

        2.wxSQLite3

        http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/wxsqlite3-1.9.8.zip/download

        七.如何在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

        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

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

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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        sqlite數據庫中的sql語句

        sqlite數據庫中的sql語句:2010年SQLite學習筆記之一 一. 如何獲取SQLite最新版本 官方站點: http://www.sqlite.org/ 從 http://www.sqlite.org/ 網站的Download頁面獲取 即如下頁面下載 http://www.sqlite.org/download.html http://blog
        推薦度:
        標簽: 中的 數據 數據庫
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 无套内谢孕妇毛片免费看看 | 男女交性无遮挡免费视频| 91久久青青草原线免费| 亚洲av网址在线观看| a级毛片免费全部播放| 亚洲国产一二三精品无码| 久久精品成人免费网站| 亚洲欧洲第一a在线观看| 99热在线观看免费| 亚洲一卡二卡三卡| 色妞WWW精品免费视频| 亚洲AV无码资源在线观看| 日日夜夜精品免费视频| 美女隐私免费视频看| 亚洲中文字幕无码爆乳av中文| h视频在线观看免费| 久久精品国产亚洲AV网站| 97国产免费全部免费观看| 亚洲人成人无码.www石榴| 亚洲国产黄在线观看| 99免费精品视频| 亚洲成av人片不卡无码| 午夜时刻免费入口| 一级毛片免费观看不收费| 亚洲AV无码久久精品成人 | 亚洲情A成黄在线观看动漫软件| 国产一精品一AV一免费孕妇| 色噜噜狠狠色综合免费视频| 亚洲午夜国产精品无码 | 午夜免费福利在线观看| 一级黄色免费大片| 亚洲成a人片在线观| 免费一级毛片不卡不收费| 久久精品免费一区二区三区| 亚洲欧美一区二区三区日产| 亚洲欧洲自拍拍偷精品 美利坚| 日韩精品无码免费一区二区三区 | 亚洲天然素人无码专区| 中文字幕在线亚洲精品| 全免费毛片在线播放| 一级免费黄色大片|