aardio 文档

aardio 范例: sqlie 数据库示例 - 遍历与显示查询结果

//sqlite 库 - 遍历与显示
import win.ui;
/*DSG{{*/
var winform = win.form(text="sqlie 数据库示例 - 遍历与显示查询结果";right=1031;bottom=712)
winform.add(
edit={cls="edit";left=25;top=584;right=997;bottom=693;db=1;dl=1;dr=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=2};
listview={cls="listview";left=24;top=27;right=996;bottom=555;db=1;dl=1;dr=1;dt=1;edge=1;z=1}
)
/*}}*/

//创建测试数据库
import sqlite;
var db = sqlite("/test-sqlite.db"); 
if( not db.existsTable("each-tab") ){ 
    db.exec( "CREATE TABLE [each-tab](text, number);"); 
}  

//添加测试数据
var cmd = db.prepare("INSERT INTO [each-tab] VALUES (@text, @number );")
for(i=1;5;1){ cmd.step(number = i;text = "测试数据" + i ) }

//创建迭代器遍历查询结果
for rowid,number,text in db.each("SELECT rowid,number,text FROM [each-tab]") {
    /*
    for 语句的第一个返回值如果为 null 就会退出循环,
    如果数据库返回的第一个字段可能为空,那么可以把 SQLite 默认就有的索引字段 rowid 放在最前面
    */
    winform.edit.print( rowid,number,text ) 
}

//也可以用 getTable 一次取出所有的数据
var dataTable = db.getTable("SELECT rowid,number,text FROM [each-tab]")

/*
result 是包含0到多条数据的数组,
但也包含 fields 字段用于声明所有列名,
不要 for(k,v in dataTable) { } 这样写,这样会不必要地遍历到 fields
*/
for i,v in table.eachIndex(dataTable){
    //应当使用专门用于遍历数组的 table.eachIndex 创建迭代器
    winform.edit.print(v.rowid,v.number,v.text)
}

import win.ui.grid;
var grid = win.ui.grid(winform.listview);//创建数据视图
grid.setTable( dataTable ) //直接显示数据库的查询结果,视图控件通过 dataTable.fields 获取所有字段名

//删除测试表 
db.exec("DROP TABLE [each-tab]" ); 

winform.show(true);
win.loopMessage();
Markdown 格式