Tag Archive for 'sqlite'

REST开发的粗浅心得

公司的team blog还没有完全弄好,一些东西就先写在这里。

1 Zend的REST功能还是很强的,像我目前这样简单的开发基本上没有什么问题。
2 做到目前的应用背后的事情还真是不少,很多环节也还没有连接好,比如目前使用的车型数据库lite版本是基于sqlite的,本身这个sqlite文件是从sql server中生成的,而这又涉及到公司本身的一个车型数据库重构的问题。因为sqlite是一个单独文件,open api调用中不涉及到数据库的写入,因此是否可以通过类似于cdn或者缓存的方式进行分布,进行简单的负载均衡,还要很多试验,
3 对于php,trac,svn,都是第一次正儿八经的用,很多小问题会困扰一整天。
4 textmate是一个不错的开发工具,因为没有ide,所以性能各方面都没有任何问题,检查错误,直接运行,多文件编辑之类,很多功能的确对开发者来说很贴心。同事建议可以使用zend studio试一下,感觉是一个很复杂庞大的软件,有空再说了。
5 php是一个很灵活的语言,很多地方也很先进,比如我现在用到较多的对象类型,数组类型,都很灵活和方便,相比较delphi而言。不过因为delphi的ide功能太过于强大了,所以很多时候感觉php过于随意了。(当然这只是我初学者的看法而已。)倒是很想试试看delphi for php来进行开发,现在已经出到2.0了,价钱还是太贵。

接下来开始做局域网的测试,一些功能会用在sns中的webgame的开发。之后等到appkey完成后,进行公网测试。还有13万张图片的数据库如何优化处理,基于车型数据库lite的一些项目重构等等,挑战刚刚开始。我也算七八十岁学吹打。

相关内容

Zend Framework编程心得

后来的事情没有想像中顺利,在数据库操作的环节上。

理论上来说,php现在提供了强大的PDO,效率提高,并可以做到基本上的数据库无关,insert一条记录简单的用zend framework提供的方法就行了,我连sql语句都不怎么需要了。

但是,在我的开发平台,OSX,Leopard,有个很致命的问题,预装了php5,很棒,但是没有编译mysql的PDO库,而在leopard上重新编译php,看了不少资料,还是一件很麻烦的事情。还好sqlite的PDO还是有的,于是切换到sqlite。应该说,php5默认支持sqlite还是有道理的,的确很方便,我对于sqlite印象一直很好,虽然开发的时间已经耽搁了整整1天。

sqlite没有很多第三方工具,我找到一个firefox下的插件,不错,可以浏览数据,创建表等等常规操作,叫做SQLite Manager。

mind3的初步试验,建立环境算是完成了,之后要开始正式的工作了。

相关内容

终于完成了sqlite在lazarus+freepascal下的使用

从昨晚到现在,终于弄好了。

太习惯于delphi下那种安装控件的方法了,而在lazarus下对于新手来说要麻烦很多。具体教程还是参考这里。 要注意以下几点:

1 原本中说的

Under Linux
/usr/local/lib/fpc/2.2.0/units/i386-linux/fcl-db

我没有找到,不要打那个local,找到了

2 教程中没有说到lazarus的控件目录下安装sqlite控件,而安装后自然要你重新编译ide,教程中说的如果使用lazarus需要重新编译的说法有些歧义。

相关内容

SQlite介绍

应该发在ni那里的, 不知道为什么从昨天晚上到现在只要post就是service error, 所以先发在这里了.

我想, mind3计划还是需要数据库的支持, 否则Item中数据的处理效率将非常成问题, 而
我又非常不愿意使用类似于mysql这样的数据库, 因为部署和同步将是一个非常复杂的问
题. 幸好有开源世界中最近越来越火的sqlite, 下面这些资料有助于帮助我们了解一
些sqlite的概貌. (其实我前面写了更多的文字, 可惜dh的server不知道出了什么问题,
wp也没有自动保存, 越发想问自己到底有没有可能有真正健壮的应用). 介绍来源.

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. Windows平台

下载windows下的文件,其实就是一个命令行程序,(下载地
址:http://www.sqlite.org/sqlite-3_2_2.zip),这个命令行程序用来包括生成数据库文
件、执行SQL查询、备份数据库等等功能。
下载后比如我们解压缩到 D:Downloadssqlitesqlite-3_2_2 这个目录下,那么我们进
入cmd,并且进入该目录:
cd D:Downloadssqlitesqlite-3_2_2
D:Downloadssqlitesqlite-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

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># 我们创建一个数据库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不支持修改表结构,如果要修改表结构,只有删除表重新再建立,所以建
立表的时候一定要考虑扩展性。估计以后这方面的功能会加强。

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数据库文件,我们对该文件进
行操作:

//打开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程序来完成创建一个数据库,
并且执行简单的建立数据表,插入数据和检索数据的功能。

首先我们来看代码:(代码比较长,但比较容易理解)

/**
* 文件: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] .”
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 = “[ Error ]
File: “. basename(FL) .”
Line: “. LN
.”
Mesg: “. $errmsg .”";
if (!$debug) {
($m = $errmsg);
}
return $m;
}

?>

如果你操作无误的话,那么程序最后输出:

ID: 1
Name: heiyeluren

相关内容