|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
完成一个功能齐全的动态站点数据|数据库 SQLite是一款轻型的数据库,它的设计方针是嵌入式的,并且今朝已在良多嵌入式产物中利用了它,它占用资本十分的低,在嵌入式装备中,能够只需求几百K的内存就够了。它可以撑持Windows/Linux/Unix等等主流的操作体系,同时可以跟良多法式言语相联合,好比Tcl、PHP、Java等,还有ODBC接口,一样比起Mysql、PostgreSQL这两款开源世界有名的数据库办理体系来说,它的处置速度比他们都快。
SQLite固然很玲珑,然而撑持的SQL语句不会减色于其他开源数据库,它撑持的SQL包含:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
同时它还撑持事务处置功效等等。也有人说它象Microsoft的Access,有时分真的感觉有点象,然而现实上它们区分很大。好比SQLite撑持跨平台,操作复杂,可以利用良多言语直接创立数据库,而不象Access一样需求Office的撑持。假如你是个很小型的使用,或你想做嵌入式开辟,没有适合的数据库体系,那末如今你可以思索利用SQLite。今朝它的最新版本是 3.2.2,它的官方网站是:http://www.sqlite.org,能在下面取得源代码和文档。同时由于数据库布局复杂,体系源代码也不是良多,也合适想研讨数据库体系开辟的专业人士。
如今咱们入手下手复杂的引见,次要我是想讲清晰几个成绩,一是若何装置利用,二是若何跟PHP联合开辟。
1、装置
1. Windows平台
下载windows下的文件,其实就是一个号令行法式,(下载地址:http://www.sqlite.org/sqlite-3_2_2.zip),这个号令行法式用来包含生成数据库文件、履行SQL查询、备份数据库等等功效。
下载后好比咱们解紧缩到 D:\Downloads\sqlite\sqlite-3_2_2 这个目次下,那末咱们进入cmd,而且进入该目次:
cd D:\Downloads\sqlite\sqlite-3_2_2
D:\Downloads\sqlite\sqlite-3_2_2>sqlite3 test.db
# 假如test.db不存在,那末就发生一个数据库文件,假如存在就直接利用该数据库文件,相当于mysql中的use
SQLite version 3.2.2
Enter ".help" for instructions
sqlite>
# SQLite的提醒符,假如想检查号令匡助输出 .help,在sqlite中一切体系号令都是 . 开首的:
sqlite> .help
.databases List names and files of attached databases
.dump ?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
.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 WordStr 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>
# 咱们创立一个数据库catlog
sqlite> create table catalog(
...> id integer primarykey,
...> pid integer,
...> name varchar(10) UNIQUE
...> );
sqlite>
# 假如表存在就会提醒:
SQL error: table catalog already exists
# 咱们创立索引信息
create index catalog_idx on catalog (id asc);
# 咱们检查表的信息,看有几何个表
sqlite> .table
aa catalog
# 检查表的布局:
sqlite> .schema catalog
CREATE TABLE catalog(
id integer primary key,
pid integer,
name varchar(10) UNIQUE
);
CREATE INDEX catalog_idx on catalog(id asc);
# 给数据表拔出一笔记录
sqlite> insert into catalog (ppid,name) values ('001','heiyeluren');
# 胜利无任何提醒,假如表达式毛病提醒毛病信息:
SQL error: near "set": syntax error
# 检索有几何笔记录
sqlite> select count(*) from catalog;
1
# 检索搜刮纪录
sqlite> select * from catalog;
1|1|heiyeluren
归正利用尺度的SQL来操作就没有成绩,不清晰可以去官方网站上检查匡助信息。别的还要申明的是SQLite不撑持修正表布局,假如要修正表布局,只要删除表从头再创立,所以创立表的时分必定要思索扩大性。估量今后这方面的功效会增强。
2. Linux/Unix 平台
error: 今朝还没装过,呵呵,不外估量跟Windows差不多,改天把这局部内容补上。
2、PHP对SQLite的开辟
PHP 5入手下手不再默许撑持Mysql,而是默许撑持SQLite,可见它的影响力何等大,所以假如你想做SQLite的PHP开辟,建议你利用PHP 5.0.0以上版本,我今朝利用的是 PHP 5.0.4版本,直接撑持SQLite扩大,这里我就不细心讲若何装置PHP扩大,假如不清晰可以检查PHP相干文档。
这里我次要是讲针对SQLite的开辟。今朝PHP的主流DB类都撑持SQLite的驱动,包含PEAR::DB类、ADOdb类都撑持,所以利用DB来来做开辟也是个好的选择。
(以下操作为了简捷,都是再Windows xp平台停止的)
1. 利用PHP操作已创立好的sqlite数据库
假如你有一个已经由过程sqlite.exe创立好了的数据库和表布局,那末你就可以够直接对它停止操作。php中针对sqlite的处置函数对照多,你可以检查PHP手册取得具体信息。
咱们利用sqlite_open()函数来翻开一个sqlite数据库,它胜利前往一个操作资本,掉败前往false,那末今后的一切操作都是在这个资本长进行的,履行一个sql查询利用sqlite_query函数。
上面我假定你在以后PHP法式目次下有一个abc.db的sqlite数据库文件,咱们对该文件停止操作:
<?php
//翻开sqlite数据库
$db = @sqlite_open("abc.db");
//异常处置
if (!$db) die("Connection Sqlite failed.\n");
//添加一个叫做foo的数据库
@sqlite_query($db, "CREATE TABLE foo (bar varchar(10))");
//拔出一笔记录
@sqlite_query($db, "INSERT INTO foo VALUES ('fnord')");
//检索一切纪录
$result = @sqlite_query($db, 'select bar from foo');
//打印获得的了局
print_r(sqlite_fetch_array($result));
?>
咱们看到的输入了局是:
Array
(
[0] => fnord
[bar] => fnord
)
证实咱们代码履行胜利,没有输出请反省法式,或你的数据库文件是不是存在。
那末有了这个根基操作,你就可以够思索利用更庞杂的操作和SQL来操作它,让它帮你办理信息,你可以做一个留言本,或做一个CMS体系,我想都是没有成绩的。
2. 利用PHP创立数据库而且操作
假如你没有任何sqlite.exe之类的东西,那末你也可以经由过程php来创立一个sqlite数据库,而且对它停止办理。
其实经由过程sqlite.exe法式创立的数据库,内容是空的,其实只要后来等创立表,添加数据今后,数据库文件才有,那末咱们是否是可以手工添加一个文件,好比一个空的 test.db 文件,而且对它停止操作。这是完整可以,上面咱们就利用PHP法式来完成创立一个数据库,而且履行复杂的创立数据表,拔出数据和检索数据的功效。
起首咱们来看代码:(代码对照长,但对照轻易了解)
<?php
/**
* 文件:sqlite.php
* 功效:对sqlite数据库的处置
* 作者:heiyeluren
* 工夫:2005-8-5
*/
define("LN", __LINE__);//行号
define("FL", __FILE__);//以后文件
define("DEBUG", 0);//调试开关
$db_name = "heiyeluren.db";
//创立数据库文件,文件内容为空
if (!file_exists($db_name)) {
if (!($fp = fopen($db_name, "w+"))) {
exit(error_code(-1, LN));
}
fclose($fp);
}
//翻开数据库文件
if (!($db = sqlite_open($db_name))) {
exit(error_code(-2, LN));
}
//发生数据表布局
if (!sqlite_query($db, "DROP TABLE test")) {
exit(error_code(-3, LN));
}
if (!sqlite_query($db, "CREATE TABLE test (id integer primary key,pid integer,name varchar(10) UNIQUE)")) {
exit(error_code(-3, LN));
}
//拔出一条数据
if (!sqlite_query($db, " INSERT INTO test (name) VALUES ('heiyeluren') ")) {
exit(error_code(-4, LN));
}
//把数据检索出来
if (!($result = sqlite_query($db, "SELECT * FROM test"))) {
exit(error_code(-5, LN));
}
//获得检索数据并显示
while ($array = sqlite_fetch_array($result)) {
echo "ID: ". $array[id] ."<br>Name: ". $array[name] ;
}
/* 毛病信息代码函数 */
function error_code($code, $line_num, $debug=DEBUG)
{
if ($code<-6 || $code>-1) {
return false;
}
switch($code) {
case -1: $errmsg = "Create database file error.";
break;
case -2: $errmsg = "Open sqlite database file failed.";
break;
case -3: $errmsg = "Create table failed, table already exist.";
break;
case -4: $errmsg = "Insert data failed.";
break;
case -5: $errmsg = "Query database data failed.";
break;
case -6: $errmsg = "Fetch data failed.";
break;
case -7: $errmsg = "";
break;
default: $errmsg = "Unknown error.";
}
$m = "<b>[ Error ]</b><br>File: ". basename(FL) ." <br>Line: ". LN ."<br>Mesg: ". $errmsg ."";
if (!$debug) {
($m = $errmsg);
}
return $m;
}
?>
假如你操作无误的话,那末法式最初输入:
ID: 1
Name: heiyeluren
咱们以上的法式包含了对照完全的功效,有调试、异常处置、存取数据库等功效,算是一个复杂使用。假如你有乐趣也能够停止扩大。
* 停止:
咱们根基的操作就讲到这里,今后有空我会把内容补全。假如人人有乐趣可以去研讨一下,或许你的团体主页就需求如许的小型数据库来匡助你。
* 参考文档:
http://www.donews.net/limodou/archive/2004/03/21/7997.aspx
http://www.linuxsir.org/bbs/showthread.php?p=1213668#post1213668
* SQLite资本
官方网站:http://www.sqlite.org
SQL语法: http://www.sqlite.org/lang.html
开辟文档:http://www.sqlite.org/docs.html
罕见成绩:http://www.sqlite.org/faq.html
下载地址:http://www.sqlite.org/download.html
Author: heiyeluren
Date: 2005-8-5
对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。 |
|