`
xfjt297857539
  • 浏览: 153152 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Linux下用到数据库sqlite3

 
阅读更多
最近在Linux下用到数据库sqlite3,于是开始了该方面的学习。

0. 引言

我们这篇文章主要讲述了如何在C/C++语言中调用 sqlite 的函数接口来实现对数据库的管理,
包括创建数据库、创建表格、插入数据、查询数据、删除数据等。

1. 说明

这里我们假设你已经编译好了sqlite的库文件 :
libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 pkgconfig
和可执行文件 : sqlite3

我们再假设你的sqlite3的安装目录在 /usr/local/sqlite3 目录下。
如果不是,我们可以这样做,将你的安装文件复制到 /usr/local/sqlite3 这个目录,
这样我们好在下面的操作中更加统一,从而减少出错的概率

例如:[root@localhost home]# cp -rf sqlite-3.3.8-ix86/ /usr/local/sqlite3
这里假设 /home/sqlite-3.3.8-ix86/ 是你的安装目录,也就是说你的sqlite原来就是安装在这里

这样之后,我们的sqlite3的库文件目录是:/usr/local/sqlite3/lib
可执行文件 sqlite3 的目录是: /usr/local/sqlite3/bin
头文件 sqlite3.h 的目录是: /usr/local/sqlite3/include

现在开始我们的Linux下sqlite3编程之旅。

2. 开始

这里我们现在进行一个测试。
现在我们来写个C/C++程序,调用 sqlite 的 API 接口函数。

下面是一个C程序的例子,显示怎么使用 sqlite 的 C/C++ 接口. 数据库的名字由第一个参数取得且第二个参数或更多的参数是 SQL 执行语句. 这个函数调用sqlite3_open() 在 16 行打开数据库,并且sqlite3_close() 在 25 行关闭数据库连接。

[root@localhost temp]# vi opendbsqlite.c
按下 i 键切换到输入模式,输入下列代码:


// name: opendbsqlite.c

// This prog is used to test C/C++ API for sqlite3.It is very simple,ha!

// Author : zieckey All rights reserved.

// data : 2006/11/13


#include <stdio.h>

#include <sqlite3.h>


int main( void )

{

sqlite3 *db=NULL;

char *zErrMsg = 0;

int rc;

//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件

rc = sqlite3_open("zieckey.db", &db);

if( rc )
{

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

sqlite3_close(db);

exit(1);

}

else printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^ \n");


sqlite3_close(db); //关闭数据库

return 0;

}


退出,保存。(代码输入完成后,按下 Esc 键,然后输入: :wq ,回车就好拉)

好拉,现在编译:[root@localhost temp]# gcc opendbsqlite.c -o db.out
或者遇到这样的问题:
[root@localhost temp]# gcc opendbsqlite.c -o db.out
opendbsqlite.c:11:21: sqlite3.h: 没有那个文件或目录
opendbsqlite.c: In function `main':
opendbsqlite.c:19: `sqlite3' undeclared (first use in this function)
opendbsqlite.c:19: (Each undeclared identifier is reported only once
opendbsqlite.c:19: for each function it appears in.)
opendbsqlite.c:19: `db' undeclared (first use in this function)

这是由于没有找到头文件的原因。


也许会碰到类似这样的问题:
[root@localhost temp]# gcc opendbsqlite.c -o db.out

/tmp/ccTkItnN.o(.text+0x2b): In function `main':

: undefined reference to `sqlite3_open'

/tmp/ccTkItnN.o(.text+0x45): In function `main':

: undefined reference to `sqlite3_errmsg'

/tmp/ccTkItnN.o(.text+0x67): In function `main':

: undefined reference to `sqlite3_close'

/tmp/ccTkItnN.o(.text+0x8f): In function `main':

: undefined reference to `sqlite3_close'

collect2: ld returned 1 exit status


这是个没有找到库文件的问题。


下面我们着手解决这些问题。


由于用到了用户自己的库文件,所用应该指明所用到的库,我们可以这样编译:


[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3


我用用 -lsqlite3 选项就可以了(前面我们生成的库文件是 libsqlite3.so.0.8.6 等,

去掉前面的lib和后面的版本标志,就剩下 sqlite3 了所以是 -lsqlite3 )。

如果我们在编译安装的时候,选择了安装路径,例如这样的话:


.......

# ../sqlite/configure --prefix=/usr/local/sqlite3
# make

.......


这样编译安装时,sqlite的库文件将会生成在 /usr/local/sqlite3/lib 目录下
sqlite的头文件将会生成在 /usr/local/sqlite3/include 目录下

这时编译还要指定库文件路径,因为系统默认的路径没有包含 /usr/local/sqlite3/lib


[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3 -L/usr/local/sqlite3/lib


如果还不行的话,可能还需要指定头文件 sqlite3.h 的路径,如下:


[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include


这样编译应该就可以了 ,运行:

[root@localhost temp]# ./db.out
./db.out: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory


运行是也许会出现类似上面的错误。

这个问题因为刚刚编译的时候没有选择静态编译,那么按照默认的编译就动态编译的。
动态编译后,由于可执行文件在运行时要调用系统库文件,
那么沿着系统默认的库文件搜索路径搜索,就可能找不到我们现在所需的库文件。
致使出现 "error while loading shared libraries" 等错误。

我们可以这样解决:
方法一:静态编译
在编译时加上 -static 参数,例如
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include -static
[root@localhost temp]# ll
总用量 1584
-rwxr-xr-x 1 root root 1596988 11月 13 10:50 db.out
-rw-r--r-- 1 root root 614 11月 13 10:31 opendbsqlite.c
可以看到输出文件 db.out ,其大小为: 1596988k
运行,好了,没有出现错误
[root@localhost temp]# ./db.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^

方法二:重新配置系统环境变量 LD_LIBRARY_PATH
这时需要指定 libsqlite3.so.0 库文件的路径,也就是配置系统环境变量 LD_LIBRARY_PATH ,
使系统能够找到 libsqlite3.so.0 。

去掉 -static ,在编译:
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
[root@localhost temp]# ll
总用量 36
-rwxr-xr-x 1 root root 12716 11月 13 10:56 db.out
-rw-r--r-- 1 root root 614 11月 13 10:31 opendbsqlite.c
[root@localhost temp]#
可以看到输出文件 db.out ,其大小为: 12716k,比刚才的静态编译要小得多。
所以我们推荐使用动态编译的方法。
好了,现在我们来指定系统环境变量 LD_LIBRARY_PATH 的值
在shell下输入:

[root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH

再运行

[root@localhost temp]# ./db.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^


是不是很有成就感阿 ,呵呵,这个上手还是很快的。


3. 插入:insert

刚刚我们知道了怎么调用 sqlite3 的C/C++的API函数接口,下面我们看看怎么在C语言中向数据库插入数据。

好的,我们现编辑一段c代码,取名为 insert.c


// name: insert.c
// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !
// Author : zieckey All rights reserved.
// data : 2006/11/18

#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_

int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;

rc = sqlite3_open("zieckey.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^ \n");


//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
char *sql = " CREATE TABLE SensorData(ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,Time VARCHAR(12),SensorParameter REAL);" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

#ifdef _DEBUG_
printf("%s\n",zErrMsg);
#endif

//插入数据
sql = "INSERT INTO \"SensorData\" VALUES( NULL , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

sql = "INSERT INTO \"SensorData\" VALUES( NULL , 1 , 1 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );


sqlite3_close(db); //关闭数据库
return 0;
}


好的,将上述代码写入一个文件,并将其命名为 insert.c 。
解释:

sqlite3_exec的函数原型说明如下:
int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be executed */
sqlite_callback, /* Callback function */
void *, /* 1st argument to callback function */
char **errmsg /* Error msg written here */
);


编译:
[root@localhost temp]# gcc insert.c -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
insert.c:28:21: warning: multi-line string literals are deprecated
[root@localhost temp]#
执行
[root@localhost temp]# ./a.out
./a.out: error while loading shared libraries: libsqlite3.so.0: cannot open shared object file: No such file or directory
[root@localhost temp]#
同样的情况,如上文处理方法:
[root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
[root@localhost temp]# ./a.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
(null)
(null)
(null)
[root@localhost temp]#
运行成功了,好了,现在我们来看看是否插入了数据
[root@localhost temp]# /usr/local/sqlite3/bin/sqlite3 zieckey.db
SQLite version 3.3.8
Enter ".help" for instructions
sqlite> select * from SensorData;
1|1|1|200605011206|18.9
2|1|1|200605011306|16.4
sqlite>

哈哈,已经插入进去了,不是吗?
很简单是不?

4. 查询: SELETE

好了,我们知道了怎么调用 sqlite3 的C/C++的API函数接口去创建数据库、创建表格、并插入数据,
下面我们看看怎么在C语言中查询数据库中的数据。

好的,我们现编辑一段c代码,取名为 query.c

// name: query.c
// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !
// Author : zieckey All rights reserved.
// data : 2006/11/18

#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_

int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;

int rc;

rc = sqlite3_open("zieckey.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^ \n");


//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
char *sql = " CREATE TABLE SensorData( ID INTEGER PRIMARY KEY, SensorID INTEGER, SiteNum INTEGER, Time VARCHAR(12), SensorParameter REAL );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

#ifdef _DEBUG_
printf("zErrMsg = %s \n", zErrMsg);
#endif

//插入数据
sql = "INSERT INTO \"SensorData\" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

sql = "INSERT INTO \"SensorData\" VALUES(NULL , 1 , 1 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );


int nrow = 0, ncolumn = 0;
char **azResult; //二维数组存放结果

//查询数据
/*
int sqlite3_get_table(sqlite3*, const char *sql,char***result , int *nrow , int *ncolumn ,char **errmsg );
result中是以数组的形式存放你所查询的数据,首先是表名,再是数据。
nrow ,ncolumn分别为查询语句返回的结果集的行数,列数,没有查到结果时返回0
*/
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );

int i = 0 ;
printf( "row:%d column=%d \n" , nrow , ncolumn );
printf( "\nThe result of querying is : \n" );

for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s\n", i , azResult[i] );

//释放掉 azResult 的内存空间
sqlite3_free_table( azResult );

#ifdef _DEBUG_
printf("zErrMsg = %s \n", zErrMsg);
#endif

sqlite3_close(db); //关闭数据库
return 0;

}


我们这里用到了一个查询的语句是 "SELECT * FROM SensorData " ,
在C语言中对应的函数接口是 sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
这个函数接口的解释在程序中已经注释。
下面我们编译运行下看看,

[root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
[root@localhost temp]# gcc query.c -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
query.c:29:21: warning: multi-line string literals are deprecated
[root@localhost temp]# ./a.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
zErrMsg = (null)
row:2 column=5

The result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 1
azResult[6] = 1
azResult[7] = 1
azResult[8] = 200605011206
azResult[9] = 18.9
azResult[10] = 2
azResult[11] = 1
azResult[12] = 1
azResult[13] = 200605011306



azResult[14] = 16.4
zErrMsg = (null)

这里我们可以看到,azResult 的前面 5 个数据正好是我们的表 SensorData 的列属性,
之后才是我们要查询的数据。所以我们的程序中才有 i<( nrow + 1 ) * ncolumn 的判断条件:
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s\n", i , azResult[i] );






输出中有 zErrMsg = (null) 这样的字句,这是 zErrMsg 保留的错误信息,
正如你所看到的,zErrMsg 为空,表明在执行过程中没有错误信息。





SQLite3.3.6在ARM2410上的移植

要将SQLite3.3.6移植到ARM2410开发板上,除了要有底层操作系统的支持外,还必须要有相应的交叉编译工具链。由于ARM2410开发板采用的是ARM-Linux作为底层操作系统,因此需要首先安装ARM-Linux工具链。
1.交叉编译环境建立:
拷贝cross-2.95.3.tar.bz2到/usr/local目录下并解压缩。
cp cross-2.95.3.tar.bz2 /usr/local/arm
tar –jxvf cross-2.95.3.tar.bz2

2.编译SQLite-3.3.6
(1)在/root下建立目录sqlite,拷贝sqlite-3.3.6.tar.gz到该目录同时解压缩。
tar –zxvf sqlite-3.3.6.tar.gz
(2)新建目录:
cd /sqlite-3.3.6
mkdir build
(3)修改配置文件
vi configure
修改以下几个部分:
# if
test "$cross_compiling" = "yes"; then
# { { echo "$as_me:$LINENO: error: unable to find a compiler for building build tools" >&5
#echo "$as_me: error: unable to find a compiler for building build tools" >&2;}
# { (exit 1); exit 1; }; }
# fi

#else
# test "$cross_compiling" = yes &&
# { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
# { (exit 1); exit 1; }; }

#else
# test "$cross_compiling" = yes &&
# { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
# { (exit 1); exit 1; }; }

进入目录build:
cd build
../ configure --disable-tcl --host=arm-linux
这样在build目录中就将生成Makefile和一个libtool脚本
(4)修改Makefile文件:
cd build
vi Makefile
将下面的这行
BCC = arm-linux-gcc -g -O2
改成:
BCC = gcc -g -O2
将下面的这行:
sqlite3$(TEXE): $(TOP)/src/shell.c .libs/libsqlite3.la sqlite3.h
改成:
sqlite3$(TEXE): $(TOP)/src/shell.c .libs/libsqlite3.a sqlite3.h
我们都是将sqlite放到arm-linux的硬件板子上运行,所以我们一般将其编译成静态链接的形式。
保存Makefile文件后退出。
(5)编译:
执行make命令即可完成编译。
编译完成后,在build目录下生成许多.o和.lo文件。但最重要的时文件sqlite3。
file sqlite3
sqlite3: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped
由此可知,此时生成的sqlite文件是还未strip过的。执行命令arm-linux-strip, 去掉其中的调试信息,这样文件将减少很多。
arm-linux-strip sqlite3

再次用file命令查看sqlite3的信息:
file sqlite3
sqlite3: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), stripped
这就是在开发板上可以直接运行的可执行文件。
通过nfs将这些文件下载到开发板上。
需要注意:
拷贝是需要加上 –arf选项,因为libsqlite3.so,libsqlite3.so.0是链接到libsqlite3.so.0.8.6的。
cp –arf libsqlite3.so libsqlite3.so.0. libsqlite3.so.0.8.6 /usr/lib
cp sqlite3 /mnt/nfs
(6)测试结果:
chmod 777 sqlite3
编辑测试程序:test.c
编译:arm-linux-gcc test.c -L.libs -lsqlite3 –static
arm-linux-strip a.out
将其下载到开发板上:
执行:a.out ex "select * from tbl"

来自: http://hi.baidu.com/lq1836/blog/item/5763d7254b013322d40742fe.html
分享到:
评论

相关推荐

    数据库sqlite 小型数据库

    `sqlite3_analyzer-3.7.1-win32.zip`是SQLite分析工具,用于分析数据库的内部结构,帮助优化数据库性能。它可以提供关于表、索引、B树结构等的详细信息。 `sqlite-3_7_2.zip`和`sqlitedll-3_7_2.zip`可能是SQLite的...

    SQLite 数据库查看器

    在当今数字化时代,数据已成为一种核心资源,无论是...对于任何需要用到数据库的场合,它都是一个值得推荐的选择。随着技术的发展,未来SQLite数据库查看器还将不断优化和升级,以适应更加多样化和复杂的数据管理需求。

    C++ Qt 基于数据库SQLite 的餐馆信息管理系统.zip

    本文将深入探讨如何利用C++编程语言与Qt框架,结合开源数据库SQLite,构建一个实用的餐馆信息管理系统。这个系统旨在帮助餐馆进行客户管理、菜品管理、订单处理等日常运营工作。 Qt是一个跨平台的应用程序开发框架...

    操作sqlite3函数

    它可能定义了数据库操作中用到的数据结构,比如`struct sqlite3`来表示SQLite3的数据库句柄,或者`struct ResultSet`来存储查询结果。同时,这里也会声明如上所述的`open_database`、`execute_query`等函数的原型。 ...

    java中使用sqlite数据库

    3. **建立连接**:通过JDBC的`DriverManager.getConnection()`方法建立与SQLite数据库的连接: ```java Connection conn = DriverManager.getConnection("jdbc:sqlite:/path/to/your/database.db"); ``` 这里的...

    sqlite3编程实例,VS编写

    SQLite3是一种轻量级、开源的嵌入式数据库引擎,广泛应用于移动设备、桌面系统以及服务器,无需单独的服务器进程,可以直接在应用程序中使用。它支持SQL标准,并且具有高度移植性和可配置性,适用于多种操作系统,...

    linux C 聊天室

    linux下用C,TCP 、socket写的一个网络聊天室的项目,客户端在client文件夹、服务器在server目录下,用到了数据库sqlite3。 makefile文件没有写好,有问题,写了两个shell。run1、run2分别编译客户端和服务器,run_...

    初识SQLITE3数据库

    在Linux环境下,SQLite3尤其适用,因为很多小型项目或测试环境不需要大型数据库系统的复杂性和资源需求。 关系数据模型是SQLite3等数据库系统的基础,它基于数据的结构(如表格)、数据操作(如查询、更新、删除)...

    SQLite LabVIEW库文件

    5. **跨平台兼容**:SQLite与多种操作系统兼容,包括Windows、Linux、macOS等,这使得基于SQLite的LabVIEW应用具有良好的移植性。 6. **安全性**:SQLite提供了事务处理机制,确保数据的一致性和完整性,即使在系统...

    SQLITE使用教程

    SQLite 支持标准的关系型数据库特性,如 SQL 语言、事务处理等,并且具有高度的可移植性,可以在多种操作系统和硬件平台上运行,包括 Windows、Linux、Mac OS X 以及移动设备如 Android 和 iOS。 2. SQLITE 使用 ...

    数据库课程大作业:基于Qt+sqlite 可视化简易航班查询数据库系统.zip

    3. **SQLite**: SQLite是一个嵌入式的关系型数据库,它无需单独的服务器进程,可以直接在应用程序中使用。SQLite轻量级、稳定且易于集成,适合小型应用或作为原型系统使用。在本项目中,SQLite作为航班数据的存储,...

    SQLite管理系统

    SQLite是一款轻量级的、开源的、自包含的SQL数据库引擎,它不需要单独的服务器进程,可以直接嵌入到各种应用程序中。Qt则是一个跨平台的C++库,提供了丰富的图形用户界面工具,支持多种操作系统,如Windows、Linux、...

    sqlite 绿色文件

    1. **创建数据库**:通过API调用打开或创建数据库文件,如`sqlite3_open("mydatabase.db", &db)`。 2. **执行SQL语句**:使用`sqlite3_exec()`函数执行INSERT、UPDATE、DELETE、SELECT等SQL命令。 3. **获取查询结果...

    员工管理系统源码QT版.zip

    ·中文输入会有乱码问题,非必要得话不想解决了。 一定要解决可以上CSDN找资料...在文件里用执行make,系统要安装sqlite3数据库 ·该模型基于linux 主要用到的库 sqlite3 socket 应付一些课程设计完全OK了

    基于qt,数据库使用的是SQLite的一个酒店管理系统.zip

    3. **SQLite数据库**:SQL语句的编写,用于数据的增删改查;事务处理保证数据一致性;使用QSQLiteDriver进行数据库操作。 4. **GUI设计**:利用Qt Designer工具进行界面布局,然后通过UI文件生成C++代码。 5. **...

    c语言程序设计学生学籍管理,数据库,SQL

    在学生学籍管理系统中,我们可以选择关系型数据库如MySQL或SQLite,因为它们支持SQL(结构化查询语言),能方便地进行数据的增删查改操作。SQL语言分为DQL(查询)、DML(数据操纵)、DDL(数据定义)和DCL(数据...

    linux下实现简单功能的电子词典

    6. **编程语言与框架**:虽然题目中没有明确指出,但实现这样的电子词典可能需要用到像Python这样的编程语言,因为它有丰富的网络库(如socket)和数据库接口(如sqlite3)。同时,可能会使用到Web框架,如Flask或...

    linux svn安装软件,依赖包及教程

    7. **sqlite-tools-linux-x86-3200000.zip**:这个文件包含SQLite的命令行工具,可能用于对Subversion使用的SQLite数据库进行管理,如查看、备份和修复。 总结来说,安装Linux SVN服务需要理解版本控制的基本概念,...

Global site tag (gtag.js) - Google Analytics