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 格式