當前位置:首頁 » 編程軟體 » sqliteshell腳本

sqliteshell腳本

發布時間: 2022-06-12 09:02:47

❶ 在 linux shell下使用 sqlite3疑問

sqlite3 命令後面要指定資料庫文件的名字,若沒指定會創建內存資料庫;
但內存資料庫在命令退出後完成使命而消失,不保存任何內容在磁碟。

tim@tim-Vostro-200:~$ sqlite3 test.db
sqlite> create table a(id int primary key );
sqlite> .tables
a
sqlite> .quit
tim@tim-Vostro-200:~$ sqlite3 test.db
sqlite> .tables
a
sqlite> .quit
tim@tim-Vostro-200:~$ sqlite3
sqlite> attach 'test.db' as cc;
sqlite> create table cc.b(id int primary key );
sqlite> .quit
tim@tim-Vostro-200:~$ sqlite3 test.db
sqlite> .tables
a b
sqlite> .quit
$

❷ 如何編譯SQLite-How To Compile SQLite

SQLite是ANSI-C的源代碼。在使用之前必須要編譯成機器碼。這篇文章是用於各種編譯SQLite方法的指南。

這篇文章不包含編譯SQLite的每個步驟的反饋,那樣可能會困難因為每種開發場景都不同。所以這篇文章描述和闡述了編譯Sqlite的原則。典型的編譯命令已經作為例子提供了,以期望應用開發者能夠使用這些例子作為完成他們自己定製的編譯過程的的一個指南。換句話說,這篇文章提供了想法和見解,而不是交鑰匙的解決方法。

融合VS單獨源文件

Sqlite是由超過一百個c源碼文件以及眾多的目錄下的腳本構建的。Sqlite的實現是純粹的ANSI-C,但是許多c語言源代碼文件是由輔助的C程序生成或者轉換來的,並且AWK,SED和TCL腳本會融合到完成的sqlite庫中。對Sqlite構建需要的C程序和轉換和創建C語言源碼是一個復雜的過程。

為了簡化這些,sqlite也通過一個預打包的合並後的源碼文件:sqlite3.c。這個合並文件是一個ANSI-C源碼實現整個SQLite庫的唯一文件。合並後的文件更容易處理。所有的東西都包含在這一個文件里,所以很容易進入一個更大的C或者C++程序的源碼樹。所有的代碼生成和轉換步驟都已經實現了,因此沒有輔助的C程序需要去配置和變異,也沒有腳本需要去運行。並且,因此所有哭都包含在一個翻譯單元,編譯器可以做更多高級的優化從而提升5%到10%的性能。因為這些原因,融合後的源碼文件sqlite3.c對所有程序來講都是值得推薦的。

推薦所有的應用程序使用融合文件。

直接從單獨的源碼文件中構建sqlite當然可以,但是並不推薦。對一些特殊的應用程序,可能需要修改構建程序去處理使用那些從網站上下載的預構建的源碼文件不能完成的情況。對於這些情況,推薦構建和使用一個定製過的合並文件。換句話說,即使一個工程需要以單獨的源碼文件構建sqlite,仍然推薦使用一個融合後的源碼文件作為一個中間步驟。

編譯命令行介面(CLI)

構建命令行介面需要三個源碼文件:

sqlite3.c:Sqlite融合的源碼文件

sqlite3.h:匹配sqlite3.c以及定義sqlite的c語言介面的頭文件

shell.c:命令行介面程序本身。這個c源碼文件包含一個main()的常式和每輪循環的用戶輸入的提示符並將輸入傳給sqlite資料庫引擎用於處理。

所有的上述源碼的三個文件都被包含在下載頁面的amalgamation tarball中。

為了構建CLI,簡單的將這三個文件放置在相同的目錄下然後一起編譯他們。用MSVC:
cl shell.c sqlite3.c -Fesqlite3.exe

在unix系統上(或者在windows上用cygwin或者mingw+msys)典型的命令會有些像這樣:
gcc shell.c sqlite3.c -lpthread -ldl

為了SQLite線程安全,需要pthreads庫。但是因為CLI是一個單線程的,我們可以指示SQLite構建一個非線程安全的庫並因此護綠pthreads庫:
gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl

-ldl庫是在支持動態裝載時需要,例如sqlite3_load_extension() 介面和load_extension()
SQL function。如果這些特性都不要求,那麼我們也可以使用SQLITE_OMIT_LOAD_EXTENSION編譯時間選項忽略他們。
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c

有人可能想要提供其他的編譯時間選項(compile-time options),例如SQLITE_ENABLE_FTS3去全文本搜索或者SQLITE_ENABLE_RTREE用於R*樹搜索引擎擴展。而有人將正常指定一些編譯優化開關。(預編譯的CLI可以從選擇sqlite網站上使用「-Os」下載下來)有無數種可能的變數在這里。

關鍵點在這里:構建CLI需要編譯一起兩個C語言文件。shell.c文件包含入口的定義和用戶輸入的loop,而sqlite融合文件sqlite3.c包含完整的sqlite庫的實現。

編譯TCL介面

sqlite的tcl介面是一個小的模塊被添加到一般的融合文件中。結果是一個新的融合後的源碼文件,稱之為「tclsqlite3.c」。這個源碼文件是生成一個可以使用TCL

load命令去載入到一個標準的tclsh或者wish中,或者隨著sqlite構建成功生成一個單獨唯一的tclsh的共享庫所需要的。一個tcl的融合的副本被包含在下載頁的TEA
tarball中作為一個文件。

為了生成一個linux上的sqlite的TCL-loadable庫,下面的命令需要滿足:
gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl

不幸的是構建Mac OS X 和 Windows的共享庫並不是如此簡單。對於這些平台最好使用包含在TEA tarball中的configure腳本和makefile.

為了生成一個單獨的tclsh,可以用於sqlite靜態鏈接,使用如下的編譯器調用:
gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm

這里的技巧是-DTCLSH=1選項。sqlite的TCL介面模塊包含一個main的過程,用於初始化一個TCL解釋器並在以-DTCLSH=1編譯後進入到一個命令行loop。上述命令可以工作在Linux和Mac
OS X,雖然有時可能需要依賴於平台調整庫選項以及編譯的TCL的哪一個版本。

構建融合文件

下載頁提供的sqlite融合文件的版本對大多數用戶來說是足夠的。然而,一些工程可能想要或者需要構建他們自己的融合文件。一個常見的構建一個定製的融合文件的理由是為了使用特定的compile-time options來定製sqlite庫。回想sqlite融合文件中包含了許多C代碼由輔助程序和腳本生成。許多的編譯時間選項影響這一成聖代碼而且必須在融合文件組裝前提供給代碼生成器。這一系列必須傳給代碼生成器的編譯時間相關的選項會使得sqlite的發布版本各不相同,但是在寫這邊文章的時候,代碼生成器需要知道的這組選項包括:

SQLITE_ENABLE_UPDATE_DELETE_LIMIT
SQLITE_OMIT_ALTERTABLE
SQLITE_OMIT_ANALYZE
SQLITE_OMIT_ATTACH
SQLITE_OMIT_AUTOINCREMENT
SQLITE_OMIT_CAST
SQLITE_OMIT_COMPOUND_SELECT
SQLITE_OMIT_EXPLAIN
SQLITE_OMIT_FOREIGN_KEY
SQLITE_OMIT_PRAGMA
SQLITE_OMIT_REINDEX
SQLITE_OMIT_SUBQUERY
SQLITE_OMIT_TEMPDB
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_VACUUM
SQLITE_OMIT_VIEW
SQLITE_OMIT_VIRTUALTABLE

為了構建一個定製的融合文件,先下載原始的獨立源碼文件到一個unix或者類unix開發平台。確定獲取的原始源碼文件不是「預編譯過的源文件」。任何人都可以通過到下載頁或者直接從configuration management system.獲取完整的一套原始源碼文件。

假設sqlite源碼樹被存在一個名為「sqlite」的目錄下。計劃構建一個平行目錄下的名為「bld」的融合文件。首先通過運行sqlite源碼樹種的configure腳本運行或者通過製作一份源碼樹頂層的的makfile模板的一份,來構建一個合適的makefile.然後手動編輯這個Makfile去包含需要的編譯時間相關的選項。最終運行:
make sqlite3.c

在windows上使用MSVC:
nmake /f Makefile.msc sqlite3.c

sqlite3.c的make
target會自動構造一般的「sqlite3.c」合並的源碼文件,以及它的頭文件「sqlite3.h」,和包含TCL介面的融合源碼文件「tclsqlite3.c」。之後,需要的文件可以被拷貝到文件目錄下然後根據上述勾勒的過程編譯。

構建一個windows的動態鏈接庫DLL

為了在windows構建一個sqlite的dll使用,首先獲取對應的融合過的源碼文件,sqlit3.c和sqlite.h。這些可以從SQLite website上下載或者和上述告知的一樣去定製生成。

使用工作目錄下的源碼文件,一個dll可以在msvc中使用如下命令生成:
cl sqlite3.c -link -dll -out:sqlite3.dll

上述命令需要運行在msvc的MSVC Native Tools Command
Prompt.如何你已經在機器上安裝了msvc,你可能有多個版本的這種命令提示符,針對於x86和x64的自帶構建的,或者交叉編譯到ARM的。依賴要求的DLL去使用對應合適的命令提示符工具。

如果使用MinGW編譯器,命令是這樣的:
gcc -shared sqlite3.c -o sqlite3.dll

注意MinGW只生成32位的dll。另有一個分開的MinGW64工程可以用來生成64位的dll。可以推斷其命令行語法是類似的。需要注意的是最近的MSVC的版本生成的DLLs可能不能工作到WinXP或者更早版本的windows上。因此為了最大限度的兼容你的生成的dll,推薦MinGW。一個好的經驗法則是使用MinGW去生成32位的dlls,使用msvc去生成64位的dlls。

❸ sqlite的常用方法有哪些

Sqlite中判斷表、欄位是否存在。

SQLite庫包含一個名字叫做sqlite3的命令行,它可以讓用戶手工輸入並執行面向SQLite資料庫的SQL命令。

❹ 如何把sqlite3指令寫到linux shell腳本語言中

man sqlite3
-init file
Read and execute commands from file , which can contain a mix of SQL statements and meta-commands.
只能把sqlite3指令寫到一個文件中,然後用sqlite3 -init file這樣去調了

❺ android shell sqlite怎麼使用

Android中使用SQLite資料庫時,需要用adb來輔助調試,如果想在windows下的cmd命令行中使用adb,必須先配置環境變數,我這里是配的用戶環境變數path: C:\Program Files\android-sdk\platform-tools;
配置好環境變數後,在cmd中輸入adb shell進入linux shell環境前,需要把android模擬器打開(本文都是針對模擬器而言,並非真機)。如果啟動好了模擬器,且輸入adb shell命令後出現error: device not found錯誤提示,則可以殺掉adb進程然後重新啟動該進程,在cmd中輸入如下命令:
adb kill-server
adb start-server
如果要在android中使用SQLite,一般需要重新寫一個類,而該類繼承一個android提供訪問該資料庫的助手類SQLiteOpenHelper。 本次實驗中我們在src文件夾下新建一個類,類名為DatabaseHelper,該類繼承SQLiteOpenHelper類,而繼承SQLiteOpenHelper類的類必須有自己的構造函數,因此按照mars老師的代碼,在程序中寫了3個構造函數,這3個函數的區別是參數個數的不同,參數個數少的函數是因為另外一些參數已經被固定了,且它們都是顯示或隱式調用了父類的構造函數,下面是SQLiteOpenHelper的構造函數。

❻ android系統sqlite資料庫文件怎麼打開

工具/原料

SQLite Expert Professional
方法/步驟

安裝SQLite Expert Professional 可以在網上下載,我下載的是試用版,沒有找注冊碼,但是試用不影響使用,反正用幾次查看到資料庫操作沒有錯誤就不用這個工具了。當然也可以使用Eclipse插件DDMS來查看,也可以使用Android工具包中的adb工具來查看。android項目中的sqlite資料庫位於/data/data/項目包/databases中。先介紹使用DDMS導出sqlite資料庫的操作和使用adb工具訪問sqlite資料庫。
首先打開android項目的調試模式,然後找到顯示DDMS

切換到DDMS,顯示File Explorer窗口,找到/data/data/ 如下圖1 ,
然後找到程序包的文件夾,打開databases,就能看到sqlite資料庫文件了。選擇將其導出。如下圖2.
這樣就把sqlite資料庫文件以文件的方式導出來了,然後使用sqlite界面管理工具如SQLite Expert Professional可以打開該資料庫了。其他 sqlite界面管理工具如sqlite administrator、sqlite man或者firefox插件sqlite manager也可以打開該資料庫。

使用adb工具訪問sqlite資料庫
Android Debug Bridge(ADB)是Android的一個通用調試工具,它可以更新設備或模擬器中的代碼,可以管理預定埠,可以在設備上運行shell命令,我們 知道android是基於Linux內核,它的內部文件結構也是採用linux文件組織方式,因此訪問它的文件結構需要使用shell。這次我們就會用 shell來訪問android應用中的sqlite資料庫文件。
1、運行cmd,切換到android-sdk目錄,運行adb.exe,加上參數shell,出現#號就代表進入了shell命令模式,注意adb要在Android模擬器運行時才能進入shell:如下圖

進入資料庫所在目錄:
shell命令記住兩個基本命令ls和cd,類似windows命令提示行中的dir和cd,代表列出當前目錄下文件列表和進入到指定目錄。了解這兩個命令之後,就可以找到data/data/項目包名/databases 如下圖1, 找到資料庫文件如下圖2。

使用sqlite管理工具來進行資料庫操作
鍵入sqlite3 資料庫名就進入了sqlite管理模式了。
如下圖

設置sqlite環境變數:
在android的sdk中自帶了sqlite3.exe,這是sqlite的官方管理工具,它是一個命令行工具。為了使用方便,將其路徑注冊到系 統環境變數path中,即將;%Android_Home%加在Path中,這樣只樣運行sqlite3,就能直接打開sqlite管理工具了。
如下圖:

使用sqlite管理資料庫:
sqlite命令行工具默認是以;結束語句的。所以如果只是一行語句,要在末尾加;,或者在下一行中鍵入;,這樣sqlite命令才會被執行。
sqlite常用命令:
.tables--查看資料庫的表列表
.exit--退出sqlite命令行
其他命令可隨時.help查看幫助。sql命令可直接在此命令行上執行即可:
如下圖:

❼ shell腳本中如何連接sqlite,原先的腳本是將數據傳送到syslog伺服器里,現在想改成記錄到sqlite資料庫中,

不需要像其他的資料庫那麼復雜,在Linux系統中,sqlite編譯好就是一個可執行程序了,你建一個資料庫,直接就可以操作,比如:在/usr/config下建一個資料庫test.db,然後,直接這樣:
sqlite3 /usr/config/test.db "select * from test;" 跟上SQL語句就行了!

❽ 求高手編寫Shell腳本,實現調用Linux下的SQLITE,導入CSV文件的功能

O(∩_∩)O~
呵呵,哥們兒,還是原來的問題哦。
看樣子問題還是沒有解決哦,其實完全可以在原來的問題那裡追問嘛~~
因為沒有你的運行環境,當時翻譯成shell腳本完全是照著原來bat文件的格式按字面意思來的。
可以提供你要導入的文件和資料庫嗎?不方便的話提供個例子也可以(主要為了說明格式)。
盡管我對sqlite不是很熟悉,但是應該可以盡量幫幫幫忙吧。

❾ 如何用sqlite3

sqlite的安裝
1. 首先是下載sqlite,可以該頁面下載:http://www.sqlite.org/download.html
當前的最新版本為:sqlite-shell-win32-x86-3070701.zip這個是windows下sqlite的命令行管理工具,用它可以管理sqlite資料庫文件

同時最好把文檔也下載下來,裡麵包含了詳細的sqlite的使用說明:sqlite-doc-3070701.zip

2.
sqlite無需任何配置和安裝,只要將下載下來的shell文件解壓到任何你覺得合適的地方,然後將其加入到path環境變數就可以了(加入path環
境變數是為了直接在命令行使用sqlite3,不加的話需要詳細的指定sqlite3的路徑,如d:/sqlite/sqlite3)。

3. 驗證一下是否安裝成功。

要想掌握一個軟體的使用,最好的方式是使用軟體自帶的幫助和文檔,而不是一直利用google。文檔和幫助一般包含了該軟體所有的用法,畢竟那是有軟體的開發者所寫的,他對軟體是最了解的。

首先來看一下sqlite的幫助:
win + r輸入cmd,進入命令行,並輸入sqlite3,進入sqlite的命令行管理工具。
然後輸入.help,則可以看到sqlite3的管理工具的所有用法了:

為了照顧e文不好的朋友,這里將所有的命令解釋一遍,並給出相應的示例:
首先創建一個資料庫test.db,並在該資料庫中創建一張表user

1.因為之前進入了sqlite3了,先用.quit退出sqlite
2.再用sqlite3 test.db載入或創建指定資料庫
3.然後用sql語句創建一個一張表user(關於sql語句,可以去看些sql入門的書籍,在sqlite文檔中也有對應的sql的介紹,不過
感覺那個不適合入門,因為畢竟很多資料庫的基本知識裡面都沒有講到)(同時還需要注意的是sqlite是可以不指定列的類型的,這也是sqlite的一個
特色,它的列類型是動態的)
4.然後又用到了一個顯示當前資料庫中存在的數據表的命令.tables(.help中倒數第三個)
5.最後向數據表中插入了一條數據(sql語句,不是.help中的命令)

接下來從上到下介紹所有命令的使用:
.backup ?DB? FILE
將資料庫文件備份到指定的文件中,默認(在不指定資料庫名時)會備份main資料庫)

備份生成的文件打開後

.l ON|OFF
設置在遇到錯誤時就停止sqlite工具的執行,默認時是OFF的。

.databases
列出(當前資料庫文件中)附加的所有資料庫的名字和文件

.mp ?TABLE1? ?TABLE2? ...
將資料庫列印為sql文本格式。如果?TABLE1?指定了,就只列印出名字中包含了TABLE1的數據表。

.echo ON|OFF
在顯示的結果前是否顯示輸入的命令
注意:這個是以column模式顯示了,後面會講到如何將顯示方式設置為column

.exit
不解釋,退出程序

.explain ?ON|OFF?
開啟或關閉適合於的輸出模式。不指定ON或OFF時,默認為ON。

.genfkey ?OPTIONS?
OPTIONS有如下幾個值:
--no-drop:不刪除舊的外鍵觸發器
--ignore-error:忽略表的外鍵錯誤
--exec:立即執行生成的sql語句
這個應該是設置在違反外鍵約束時,sqlite如何做。具體的沒嘗試。

.headers ON|OFF
是否顯示表頭
.mode MODE ?TABLE?
設置輸出模式,當?TABLE?指定時,就是該輸出模式只應該在該表的輸出上

.header on時的各輸出模式

.header off時的各輸出模式

.help
顯示幫助

.import FILE TABLE
讀取文件中的數據插入到指定表中
注意這里的分隔符.separator是\t,所以data.txt中是以tab分隔的,默認的是,(此時就是2,yuan2,2)

indices ?TABLE?
顯示指定表的所有索引。表沒指定時,顯示所有索引。

.load FILE ?ENTRY?
載入一個外部庫文件

.log FILE|off
開啟或關閉日誌功能。
關閉:.log off
開啟,並將日誌輸出到標准輸出流:.log stdout
開啟,並將日誌輸出到標准錯誤六:.log stderr
開啟,並將日誌輸出到指定文件:.log d:/sqlite3/log.txt

nullvalue STRING
值為NULL時,顯示的字元串。默認為""

.output FILENAME
將所有的輸出都輸出到指定文件

.output stdout
將所有的輸出都輸出到標准輸出流(默認就是),就是輸出到控制台上

.prompt MAIN CONTINUE
替換標準的提示。未嘗試

.quit
不解釋,同.exit,退出程序。

.read FILENAME
執行指定文件中的sql語句

.restore ?DB? FILE
從備份文件中還原資料庫。默認是還原main資料庫。

1. 首先我們先備份的main資料庫
2. 然後將數據刪除
3. 然後在還原main資料庫,看數據是否還原成功

.schema ?TABLE?
顯示指定表的創建語句。表未指定時,顯示所有表的創建語句。

因為之前創建了索引,所以包含索引創建語句。

.separator STRING
設置輸出模式.mode和導入數據.import的分隔符。

.show
顯示當前的設置。

.tables ?TABLE?
列出所有表名。

.timeout MS
只在指定的毫秒內嘗試打開鎖定的表,而不是一直嘗試打開。

.width NUM1 NUM2 ...
設置.mode column中每個列的寬度。每個列默認的寬度是10個字元,過長時會被截斷。

第一列設為1個字元,第二列設為0表示保持不變,第三類不設置也是保持不變

.timer ON|OFF
是否開啟cpu耗時度量。

❿ 如何打開python自帶sqlite shell

sqlite3資料庫里表的信息存儲在了一個名為sqlite_master的表中
因此可以通過這條語句來查看資料庫中所有表的名稱
SELECT name FROM sqlite_master WHERE type='table';
下面是Python的用法

con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
print(cursor.fetchall())

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:645
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:936
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:632
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:821
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:731
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1066
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:299
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:160
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:850
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:763