星期日, 四月 16, 2006

用Perl和SQLite做一个简单的Wiki

说到语言的精妙,我想到只有Perl。
说到数据库的小巧,我想到的只有SQlite。

如此美好的组合,再加上WIki这个奇思妙想的设计,就组成了我这个周末的一个活动:用Per语言作为CGI方式运行,以SQLite3作为数据库,建立一个小巧可人的Wiki服务器程序。到底做什么用途呢,我还真的没有想好,只是大体上实现了一些最最基本的功能。


默认的首页是名叫Welcome的页面。



像其他页面一样,你可以编辑它,然后保存。这样你的起始页面就改变了。




文章列表将分页显示数据库中所有的内容







搜索是按照标题进行Like方式检索得到的文章列表。











好像已经可以用了吧,而且代码非常的简单,主要就用了CGI和DBI::SQLite模块模块。
不过现在存在的问题在编码的处理上。我全部使用UTF-8编码来写作,可是在投递中文的时候就会在个别中文字符上出现问题。比如“程序”的“程”字,就会变成“?‹”。可能在Perl编码设置和运作方式上我还存在一些问题。不知到怎么办了。

星期四, 四月 06, 2006


My firstly finished Sudoku . Posted by Picasa

星期日, 四月 02, 2006

PostgrSQL 数据库C语言中嵌入SQL

/*
** PostgrSQL 数据库 C语言中 嵌入SQL
**
** 使用ECPG程序对此进行编译得到C语言文件,然后再用-lecpg编译连接
** 得到可执行程序。运行的时候需要libecpg.dll文件和libpq.dll等其他库。
** comerr32.dll, krb5_32.dll, libpgtypes.dll, pthreadGC2.dll
*/
#include
#include
EXEC SQL INCLUDE SQLCA;

#define TEST_NO_SQL_ERROR (sqlca.sqlstate[0]=='0' && sqlca.sqlstate[1]=='0' && sqlca.sqlstate[2]=='0' && sqlca.sqlstate[3]=='0' && sqlca.sqlstate[4]=='0')
#define TEST_SQL_ERROR (!TEST_NO_SQL_ERROR)

int main(){
/* 变量的声明 */
EXEC SQL BEGIN DECLARE SECTION;
int nAge;
varchar vcName[80];
EXEC SQL END DECLARE SECTION;

/* 连接数据库 */
EXEC SQL CONNECT TO mydb@localhost USER test;
if (TEST_SQL_ERROR){
puts("连接数据库: Failed!");
puts(sqlca.sqlerrm.sqlerrmc);
exit(-1);
}
puts("连接数据库:OK!");

/* 使用游标来读取多个数据 */
EXEC SQL BEGIN;
EXEC SQL DECLARE CURPP CURSOR FOR select name, age from tb_people;
EXEC SQL OPEN CURPP;
while(TEST_NO_SQL_ERROR){
EXEC SQL FETCH NEXT FROM CURPP INTO :vcName, :nAge;
if (TEST_NO_SQL_ERROR){
printf("%s is %d old.\n", vcName.arr, nAge);
}else{
puts(sqlca.sqlerrm.sqlerrmc);
break;
}
}
EXEC SQL CLOSE CURPP;
EXEC SQL COMMIT;

/* 断开连接 */
EXEC SQL DISCONNECT;

return 0;
}