跳到主要内容

dbi

简介

数据库访问接口

是P03中dbi的gs移植版本,接口基本保持一致,内部实现略有不同

允许使用者通过dbi.register_dbi接口通过登记具体的数据库接口处理对象进行扩展以支持更多类型的数据库

默认自带支持mysql和sqlite数据库:

mysql的数据库访问接口基于pkg.gsmysql实现,接口功能在对象dbi_mysql.gs中实现

sqlite的数据库访问接口基于pkg.gsqlite实现,接口功能在对象dbi_sqlite.gs中实现

组件接口

dbi.gs

函数原型函数作用
void register_dbi(string driver_name, string ob_name)登记数据库接口功能对象
object new_dbc(string driver_name)创建指定数据库驱动名称的数据库接口功能对象

dbi_basic.gs

数据库访问接口:基础类

本对象是数据库接口驱动的基础类,提供通用函数

函数原型函数作用
void bind_value(mixed value)在本对象上绑定一个关联值
mixed get_bind_value()获得跟本对象绑定的关联值
string range_condition(int start, int count)生成SQL语句中的限定范围的条件
string create_condition(mixed condition)根据映射的字段构造字符串类型的条件信息
string bind_parameters(string s, ...)为sql语句绑定参数(主要是转义)
string bind_parameters_arr(string s, array args)为sql语句绑定参数(主要是转义)

dbi_mysql.gs

实现mysql数据库接口的功能对象

本对象包含数据库接口基础组件dbi_basic,覆盖实现了dbi_basic上的所有接口

函数原型函数作用
handle dbi_basic.connect(map info)连接mysql数据库

dbi_sqlite.gs

实现sqlite数据库接口的功能对象

本对象包含数据库接口基础组件dbi_basic,除了视图相关的接口(query/step/finalize)外,覆盖实现了dbi_basic上的其他接口

函数原型函数作用
handle dbi_basic.connect(map connect_info)连接sqlite数据库

样例

#pragma parallel

import gs.lang.*;
import gs.util.*;

import pkg.dbi;

public void sample()
{
object ob = dbi.new_dbc("sqlite");
map connect_info = {
"db" : "/testdb"
};
ob.connect(connect_info);

// create table
string create_cmd = """p
CREATE TABLE test(
id integer,
content text,
primary key (id));
"""p;
ob.execute(create_cmd);

// insert data
for (int i = 1 upto 10)
{
map data = {
"id" : i,
"content" : sprintf("this is %d", i)
};
ob.insert("test", data);
}

// select
string sql_cmd = ob.bind_parameters(
"select * from test where id < ?",
5);
array result = ob.select(sql_cmd, dbi.get_max_count_each_select());
printf("result: %O\n", result);

// close db ob
ob.close();
}