数据库

Silk没有内置访问数据库的函数,可以通过调用C/C++开发的Dll扩展实现,Silk安装包里自带2个Dll(SilkSQLite64.dll,SilkMySQL64.dll)分别用来访问Sqlite数据库和MySql数据库。

CSqlite类
Silk安装包里有个封装了调用SilkSQLite64.dll的类CSqlite,方便用户调用Sqlite数据库。
#include "../include/sqlite.si"

func sqliteTest()
{
    //if SilkSQLite64.dll is not in current directory, you need to pass the path of dll here
    //db=CSqlite(sqliteDllPath);
    db=CSqlite();
    if(db.Open(db.get_curdir()+"admin.db"))
    {
        sql=sprintf("select * from user ");
        res=db.Query(sql);
        if(res)
        {
            nCount=db.RecordNum(res)+1;//the first record is field names
            nField=db.FieldNum(res);
            for(i=0;i<nCount;i++)
            {
                str="";
                for(j=0;j<nField;j++)
                {
                    value=db.GetByFieldNo(res,i,j);
                    str+=value+", ";
                }
                print(str);
            }
            db.Query_Free(res);
        }
        db.Close(); 
    }
}

CMySql类
Silk安装包里有个封装了调用SilkMySQL64.dll的类CMySql,方便用户调用MySql数据库。
#include "../include/mysql.si"

func mysqlTest()
{
    //if SilkMySQL64.dll is not in current directory, you need to pass the path of dll here
    //db=CMySql(mysqlDllPath);
    db=CMySql();
    //replace with your MySQL server ip/userid/pwd/db here
    if(db.Connect("127.0.0.1","root","myroot","test_db"))
    {
        //sql=sprintf("select * from person_like where name = 'wang'");
        sql=sprintf("select * from person_like");
        res=db.Query(sql);
        if(res)
        {
            nCount=db.RecordNum(res);
            nField=db.FieldNum(res);
            for(i=0;i<nCount;i++)
            {
                str="";
                for(j=0;j<nField;j++)
                {
                    value=db.GetByFieldNo(res,i,j);
                    str+=value+", ";
                }
                print(str);
            }
            db.Query_Free(res);
        }
        db.Close(); 
    }
    
}

具体请参考Silk安装包里的例子。