A. sqlite3 執行 sql 語句的佔位符
使用 execute 方法執行一條SQL語句,如果帶有參數可以使用佔位符來傳遞參數。使用佔位符已經考慮到轉碼的問題,不需要自己單獨處理。不用去姿弊管 SQL 注入的問題。不過佔位符只是針對value,不能用於設置表名,欄位等。
SQLite3支持兩種佔位符: 問號佔位符 和啟枝 命名佔位符 。
採用問號作為佔位符,參悄冊敏數為元組形式。例如:
採用冒號加 key 的形式作為佔位符,參數為字典形式。例如:
一般來話,第一種方式比較方便,也比較常見。但是如果在執行sql語句需要同一個參數多次使用時,採用第二種方式就比較合適
B. sqlite 如何查看執行sql語句的時間
寫程序的人,往往需要分析所寫的SQL語句是否已經優化過了,伺服器的響應時間有多快,這個時候就需要用到SQL的STATISTICS狀態值來查看了。
通過設置STATISTICS我們可以查看執行SQL時的系統情況。選項有PROFILE,IO ,TIME。介紹如下:
SET STATISTICS PROFILE ON:顯示分析、編譯和執行查詢所需的時間(以毫秒為單位)。
SET STATISTICS IO ON:報告與語句內引用的每個表的掃描數、邏輯讀取數(在高速緩存中訪問的頁數)和物理讀取數(訪問磁碟的次數)有關的信息。
SET STATISTICS TIME ON:顯示每個查詢執行後的結果集,代表查詢執行的配置文件。
使用方法:打開SQL SERVER 查詢分析器,輸入以下語句:
SET STATISTICS PROFILE ON
SET STATISTICS IO ON
SET STATISTICS TIME ON
GO /*--你的SQL腳本開始*/
SELECT [TestCase] FROM [TestCaseSelect]
GO /*--你的SQL腳本結束*/
SET STATISTICS PROFILE OFF
SET STATISTICS IO OFF
SET STATISTICS TIME OFF
另外,也可以通過手工添加語句,計算執行時間來查看執行語句花費了的時間,以判斷該條SQL語句的效率如何:
declare @d datetime
set @d=getdate()
/*你的SQL腳本開始*/
SELECT [TestCase] FROM [TestCaseSelect]
/*你的SQL腳本結束*/
select [語句執行花費時間(毫秒)]=datediff(ms,@d,getdate())
C. SQLite 怎樣導入sql 文件
導出
實現方式: 將輸出重定向至文件.
命令: .output
sqlite> .output a.txt
然後輸入sql語句, 查詢出要導的數據. 查詢後,數據不會顯示在屏幕上,而直接寫入文件.
結束後,輸入
sqlite> .output stdout
將輸出重定向至屏幕.
舉例2:
將 tab_xx 中的數據導出到文件a.txt
sqlite> .output a.txt
sqlite> select * from tab_xx;
sqlite> .output stdout
導出完畢.
D. sqlite的幾個常用方法
SQLite庫包含一個名字叫做sqlite3的命令行,它可以讓用戶手工輸入並執行面向SQLite資料庫的SQL命令。本文檔提供一個樣使用sqlite3的簡要說明。
開始
啟動sqlite3程序,僅僅需要敲入帶有SQLite資料庫名字的"sqlite3"命令即可。如果文件不存粗笑在,則創建一個新的(資料庫)文件。然後 sqlite3程序將提示你輸入SQL。敲入SQL語句(以分號「;」結束),敲回車鍵之後,SQL語句就會執行。
例如,創建一個包含一個表"tb11"名字為"ex1"的SQLite資料庫,你可以這樣做:
$sqlite3 ex1
SQLite version 3.3.17
Enter ".help" for instructions
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!', 10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>
你可以通過敲你所用系統的文件結束符(通常是Ctrl + D)或者中斷字元(通常是Ctrl + C)。來終止sqlite3程序。確定你在每個SQL語句結冊笑束敲入分號!sqlite3程序通過查找分號來決定一個SQL語句的結束。如果你省略分號,sqlite3將給你一個連續的命令提示符並等你給當前的SQL命令添加更多的文字。這個特點讓你輸入多行的多個SQL語句,例如:
sqlite> create table tbl2(
...> f1 varchar(30) primary key,
...> f2 text,
...> f3 real
...> );
sqlite>
題外話:查詢岩姿含SQLITE_MASTER表
SQLite資料庫的框架被保存在一個名叫"sqlite_master"的特殊的表中。你可以像查詢其它表一樣通過執行「SELECT」查詢這個特殊的表。例如:
$ sqlite3 ex1
SQlite vresion 3.3.10
Enter ".help" for instructions
sqlite> select * from sqlite_master;
type = table
name = tbl1
tbl_name = tbl1
rootpage = 3
sql = create table tbl1(one varchar(10), two smallint)
sqlite>
但你不能在sqlite_master表中執行諸如DROP TABLE, UPDATE, INSERT 或者DELETE命令。sqlite_master表在你創建、刪除和索引資料庫時自動更新這個表。你不能手工更改sqlite_master表。
TEMPORARY表的結構沒有存儲在"sqlite_master"表中,由於TEMPORARY表對應用是不可見的,而不是應用程序創建這個表。 TEMPORARY表結構被存儲在另外一個名叫"sqlite_temp_master"的特定的表中。"sqlite_temp_master"表是臨時表自身。
sqlite3的特殊命令
大多數候,sqlite3讀入輸入行,並把它們傳遞到SQLite庫中去運行。但是如果輸入行以一個點(「.」)開始,那麼這行將被sqlite3程序自己截取並解釋。這些「點命令」通常被用來改變查詢輸出的格式,或者執行鞭個預封包(預定義prepackaged)的查詢語句。
你可以在任何時候輸入「.help」,列出可用的點命令。例如
sqlite> .help
.l ON|OFF Stop after hitting an error. Default OFF
.databases List names and files of attached databases
.mp ?TABLE? ... Dump the database in an SQL text format
.echo ON|OFF Turn command echo on or off
.exit Exit this program
.explain ON|OFF Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF Turn display of headers on or off
.help Show this message
.import FILE TABLE Import data from FILE into TABLE
.indices TABLE Show names of all indices on TABLE
.load FILE ?ENTRY? Load an extension library
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML <table> code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.prompt MAIN CONTINUE Replace the standard prompts
.quit Exit this program
.read FILENAME Execute SQL in FILENAME
.schema ?TABLE? Show the CREATE statements
.separator STRING Change separator used by output mode and .import
.show Show the current values for various settings
.tables ?PATTERN? List names of tables matching a LIKE pattern
.timeout MS Try opening locked tables for MS milliseconds
.width NUM NUM ... Set column widths for "column" mode
sqlite>
改變輸出格式
sqlite3程序可以以八種不同的格式顯示一個查詢的結果:"csv", "列", "html", "插入", "行", "製表"和"tcl"。你可以用".mode"點命令在這些輸出格式之間切換。
默認的輸出格式是「列表」。在列表模式下,每條查詢結果記錄被寫在一行中並且每列之間以一個字元串分割符隔開。默認的分隔符是一個管道符號(「|」)。列表符號在當你輸出查詢結果到另外一個符加處理的程序(如AWK)中去是尤為有用。
sqlite> .mode list
sqlite> select * from tbl1;
hello|10
goodbye|20
sqlite>
你可以用「.separator」點命令來改變分界符。例如,為了把分割符改為一個逗號和一個空格,你可以這樣做:
sqlite> .separator ", "
sqlite> select * from tbl1;
hello, 10
goodbye, 20
sqlite>
在「line"模式下,每一個位於條記錄中的列在它自己那行顯示。每行由列名、一個等號和列數據組成。下一條記錄以一個空行隔開。這是一個行模式輸出的例子:
sqlite> .mode line
sqlite> select * from tbl1;
one = hello
two = 10
one = goodbye
two = 20
sqlite>
在列模式下,每條記錄在一個單獨的行中以數據列對齊的方式顯示。列如:
sqlite> .mode column
sqlite> select * from tbl1;
one two
---------- ----------
hello 10
goodbye 20
sqlite>
在默認的情況下,每列至少10個字元寬。太寬的數據將被截取。你可以用「.width」命令來調整列寬。如下所示:
sqlite> .width 12 6
sqlite> select * from tbl1;
one two
------------ ------
hello 10
goodbye 20
sqlite>
上面例子中".width"命令設置第一列寬為12第二列寬為6。其它的列寬不變。你可以指定與你查詢結果需要的列數一樣多的「.width」參數。
如果你指定一列寬為0,那麼這個列寬將自動以下面三個數字中的最大值做為列寬:10、表頭寬度和最寬的數據列的寬度。這可以讓列自動調整寬度。每列的默認設置為自動調整的0值。
出現在輸出開頭兩行的列標示可以用".header"點命令關閉。在上面的例子中,列標示是打開的。可以用下面的方法關閉列標示:
sqlite> .header off
sqlite> select * from tbl1;
hello 10
goodbye 20
sqlite>
另外一個有用的輸出模式是"insert"。在插入模式下,被子格式化為看起來像SQL INSERT語句的樣式。你可以用插入模式來產生文件(便於)以後用於不同資料庫的輸入。
當指定插入模式時,你必須給定一個特定參數就是要插入的表名。例如:
sqlite> .mode insert new_table
sqlite> select * from tbl1;
INSERT INTO 'new_table' VALUES('hello',10);
INSERT INTO 'new_table' VALUES('goodbye',20);
sqlite>
最新的輸出格式是「html」。在這種模式下,sqlite3把查詢的結果寫做XHTML表。開始的<TABLE>和結束的</TABLE>(標記)沒有寫出,但有<TR>、<TH>和<TD>等分界符。html輸出對 CGI來說是相當有用地。
把結果寫到文件中
默認情況下,sqlte3把結送到標准輸出。你可以用「.output」命令改變它。只須把輸出文件名做為.output命令的輸出參數然後所有後續查詢結果將被寫到那個文件中。用「.output stdout」再一次改為標准輸出。例如:
sqlite> .mode list
sqlite> .separator |
sqlite> .output test_file_1.txt
sqlite> select * from tbl1;
sqlite> .exit
$ cat test_file_1.txt
hello|10
goodbye|20
$
查詢資料庫結構
sqlite3程序提供幾個有用的用於查詢資料庫結構的快捷命令。這些不是不可以用別的方式來實現。這些命令僅僅是一個快捷方式而已。
例如,為了查看資料庫的表列表,你可以敲入「.tables」。
sqlite> .tables
tbl1
tbl2
sqlite>
「.tables」命令相似於設置列表模式然後執行接下來的查詢:
SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1事實上,你可以查看sqlite3的源代碼(可以在源文件樹的src/shell.c中),你可找到上面的具體的查詢。「.indices」命令作用類似的方式是列出特定表的所有的索引。「.indics」命令須一個參數即所要索引表的表名。最後,但不是至少,是「.schema」命令。不帶任何參數,「.schema」命令顯示原始的用於創建當前資料庫的CREATE TABLE和CREATE INDEX語句。如果你給".schema"命令一個表名,它顯示原始的創建該表和它所有索引的CREATE語句。我們可以:sqlite> .schemacreate table tbl1(one varchar(10), two smallint)CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real)sqlite> .schema tbl2CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real)sqlite> ".schema"命令可以用設置列表然後執行以下查詢來實現:
SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type!='meta'
ORDER BY tbl_name, type DESC, name
.databases 列出資料庫文件名
.tables ?PATTERN? 列出?PATTERN?匹配的表名
.import FILE TABLE 將文件中的數據導入的文件中
.mp ?TABLE? 生成形成資料庫表的SQL腳本
.output FILENAME 將輸出導入到指定的文件中
.output stdout 將輸出列印到屏幕
.mode MODE ?TABLE? 設置數據輸出模式(csv,html,tcl…
.nullvalue STRING 用指定的串代替輸出的NULL串
.read FILENAME 執行指定文件中的SQL語句
.schema ?TABLE? 列印創建資料庫表的SQL語句
.separator STRING 用指定的字元串代替欄位分隔符
.show 列印所有SQLite環境變數的設置
.quit 退出命令行介面
E. adb shell sqlite3 執行sql語句的問題
你可以分開來運行。
打開命令行窗口,
首先運行(保證android sdk已經安裝,手機連上電腦或者開了模擬器):
adb shell
然後運行
sqlite3 /data/data/com.android.providers.settings/databases/settings.db
會答鏈有個sqlite>辯舉橘提示符
接著運攜團行
select * from secure;
就可以看結果
F. android 可否執行sql腳本
SQLite是輕量級的資料庫,目前不支持。
你可以這樣變通,自己編寫一個函數讀取sql腳本文件(最好每行保存一條SQL語句),
每讀取一行執行一次:db.execSQL(strSQL);
G. 易語言sqlite資料庫 一個查詢的sql語句 該怎麼寫
你好:
利用Navicat創建SQLite資料庫
步驟一、打開Navicat,點擊文件,選擇新建連接,選擇SQLite,彈出界面,在連接名輸入連接名稱,類型根絕需要選擇,若選現有的資料庫文件,則需要在資料庫文件選項中,找到相應的SQLite資料庫文件,若選其他類型,則會新建一個資料庫連接,需要在資料庫文件選項,選擇保存位置(SQLite與SQLite3兩個版本)。下文連接名為SQLiteOperate,類型為SQLite3,資料庫名為test.db,默認有一個資料庫main。高級、HTTP中的用法自行研究或者查找資料。
步驟二、打開連接,右鍵附加資料庫,選擇剛才創建的資料庫文件,然後打開,附加成功會在SQLiteOperate連接中出現一個新的資料庫test,然後打開資料庫test,到此,資料庫創建完成。
步驟三、創建數據表
選中test資料庫,點擊右上欄的查詢選項、新建查詢、輸入sql語句:create table if not exists user(_id integer primary key not null,name text not null,age integer not null,sex text not null)。創建表user,創建時判斷該表是否存在,注意SQLite里只有null、integer、real(浮點數)、blob、text字元串。輸入後點擊運行按鈕,此時會提示彈出窗口要求輸入該查詢的名字,例如create_SQL,運行後,打開test資料庫,發現沒有user表。不要怕,你可以再次運行SQL語句,會提示user表已經存在。是不是很詫異?不要怕,斷開SQLiteOperate連接,然後再次打開連接,打開test資料庫,你會發現SQLite就在那裡。
步驟四、插入數據
新建查詢,同步驟三中操作,輸入插入數據的語句:insert into user(name,sex,age) values ('張三,'女',18),其中的_id為自增,省略即可,然後運行,打開數據表user,會發現數據插入成功,若運行前user表已打開,建議先關閉user表,再次打開。
步驟五、查詢數據
同四,輸入查詢sql語句:查詢所有內容:select * from user,查詢指定條件所有內容:例如:select * from user where name='張三',查詢指定條件的指定內容:例如:select name from user where age=18
步驟六、更新數據
同四新建查詢,輸入更新sql語句:更新某列所有值:例如:update user set age=18 ,更新指定條件的值:例如:update user set name='趙四' where name='張三'
步驟七、刪除數據
同四新建查詢,輸入刪除sql語句:例如:delete from stu where name='張三'
H. linux下怎樣能執行sqlite3多條SQL語句,比如一個txt文檔里存放多條語句怎樣來執行
只能循環讀出來執行,還要看 是不是帶參數,
下面是個讀sql 語句的函數
int db_order(sqlite3 *db,char *sql)
{
va_list ap;
int ret = 0;
ret = sqlite3_exec(db, sql, NULL, NULL, NULL);
sqlite3_free(sql);
if(ret != SQLITE_OK) {
fputs("insert error\n",stderr);
}
return ret;
}
int main(void)
{
sqlite3 *db;
char *sql=NULL;
sql = sqlite3_mprintf("select * from datebase;");
db_order(db,sql);
}
你把sqlite3_mprintf()里的語句換做讀出來的字元串
I. 如何逐條讀出文件中的sql語句並且在sqlite3中批量執行 c、C++都可以
sql是一個文本文件,用文本文件方式打開答緩,讀派譽取一條語句清羨模後作為字元串;然後用system 函數執行sqlite3 命令,sql文件的內容要作為它的參數。
J. sqlite 資料庫能執行多條sql語句嗎
為了減少資料庫連接的I/O開銷,一般會把多條數據插入放在一條SQL語句中一次執行。
以前用Mysql做開發一直是這樣用的:
INSERT
INTO
TABLE(col1,
col2)
VALUES(val11,
val12),
(val21,
val22)
;
最近用SQLite才發現這個語法並非標准歲梁SQL,故而SQLite並不支持含耐。經過一番查找,發現如下方法可以替代:
INSERT
INTO
TABLE(col1,
col2)
SELECT
val11,
val12
UNION
ALL
SELECT
val21,
val22
;
這樣的寫法是屬於復合SQL語句,表示先把兩個SELECT的結果集進行無刪減乎老運的聯合,再把聯合結果插入到TABLE中。