meta data for this page
  •  

📚 差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
scripting:world:sqlite [2025/05/02 20:13] – 移除 - 外部编辑 (Unknown date) 127.0.0.1scripting:world:sqlite [2025/05/02 20:13] (当前版本) bibiboxs
行 1: 行 1:
 +<markdown>
 +# World/SQLite
  
 +> SQLite类是开发阶段常用功能,可进行[本地数据库(SQLite)](https://www.sqlite.org/)的相关操作。
 +>
 +> **数据库操作需要掌握相关知识,适合复杂数据存储或有明确目的使用,如果只是希望实现简单游戏存档等功能,请考虑使用`Json`功能。**
 +
 +[note3]
 +读写目录:`Mod\Host`**。
 +[/note]
 +
 +**SQLite类仅支持增删查改以及部分扩展操作,若选用SQLite作为存储方式,建议使用Browser等相关工具自行可视化建库,然后使用引擎API进行操作,而不是100%通过引擎API方式。**
 +
 +
 +## Static Function
 +
 +### SQLite.Connect()
 +
 +> 连接指定路径的数据库文件(目录:`Mod\Host`)。
 +>
 +> **想要操作一个数据库,连接数据库是必须的。**
 +>
 +> **数据库的操作仅在当前场景生效。**
 +
 +```javascript
 +function SQLite.Connect( path: string ): SQLiteSource
 +```
 +
 +```javascript
 +let gameDB = SQLite.Connect("Database.db"); //Path: LocalMod\Host\Database.db
 +if(gameDB != null)
 +{
 + gameDB.Execute("sql"); //Todo
 +}
 +```
 +
 +
 +
 +### SQLite.EscapeString()
 +
 +> 格式化数据库字符串语句,确保目标字符串不包含SQL注入等危险。
 +
 +```javascript
 +function SQLite.EscapeString( text: string ): string
 +```
 +
 +```javascript
 +let sql = "SELECT * FROM Accounts WHERE Name = '" + SQLite.EscapeString("playerName") + "'";
 +```
 +
 +
 +
 +## Function
 +
 +### SQLiteSource.Disconnect()
 +
 +> 关闭当前数据库连接,停止使用(场景切换时会自动执行)。
 +
 +[note2]
 +注意:因为`SQLite`是基于文件流操作的,所以当数据库中途不再使用时,应该执行`Disconnect()`释放文件权限。
 +[/note]
 +
 +```javascript
 +function SQLiteSource.Disconnect()
 +```
 +
 +
 +
 +### SQLiteSource.Begin()
 +
 +> 开始数据库操作事务。
 +
 +```javascript
 +function SQLiteSource.Begin()
 +```
 +
 +
 +
 +### SQLiteSource.Commit()
 +
 +> 提交数据库操作事务。
 +
 +```javascript
 +function SQLiteSource.Commit()
 +```
 +
 +
 +
 +### SQLiteSource.Rollback()
 +
 +> 回退数据库操作事务。
 +
 +```javascript
 +function SQLiteSource.Rollback()
 +```
 +
 +
 +
 +### SQLiteSource.Execute()
 +
 +> 执行一段SQL指令,并可能返回目标结果(如果存在查询\执行结果,将返回`SQLiteSourceData`)。
 +>
 +> **==此指令扩展性很高,可进行执行、查询等多种用途,属于万能指令。==**
 +
 +```javascript
 +function SQLiteSource.Execute( sql: string ): SQLiteSourceData
 +```
 +
 +```javascript
 +let gameDB = SQLite.Connect("Database.db");
 +
 +//Only Execute
 +gameDB.Execute("sqlxxx");
 +
 +//QuerySQL
 +let sqlData = gameDB.Execute("sql");
 +DLog(sqlData.GetData("ColumnName", 0));
 +```
 +
 +
 +
 +### SQLiteSource.ExecuteScalar()
 +
 +> 执行一段SQL指令,并可能返回目标结果。
 +>
 +> **与`SQLiteSource.Execute`方法不同的是,此方法会直接返回(如有)得到的第一个结果(默认:列1行1,可通过参数2+3扩展)。**
 +
 +```javascript
 +function SQLiteSource.ExecuteScalar( sql: string, columnName: string = "", row: int = -1 ): Any
 +```
 +
 +
 +
 +### SQLiteSource.GetTableRowCount()
 +
 +> 获取指定表的行数。
 +
 +```javascript
 +function SQLiteSource.GetTableRowCount( table: string ): int
 +```
 +
 +
 +
 +### SQLiteSource.GetTableColumnCount()
 +
 +> 获取指定表的列数。
 +
 +```javascript
 +function SQLiteSource.GetTableColumnCount( table: string ): int
 +```
 +
 +
 +
 +### SQLiteSource.ExistTable()
 +
 +> 检查指定表是否存在。
 +
 +```javascript
 +function SQLiteSource.ExistTable( table: string ): bool
 +```
 +
 +
 +
 +### SQLiteSource.DropTable()
 +
 +> 删除指定表(不可逆)。
 +
 +```javascript
 +function SQLiteSource.DropTable( table: string )
 +```
 +
 +
 +
 +### SQLiteSource.RenameTable()
 +
 +> 重命名指定表(需自行做好前提判断)。
 +
 +```javascript
 +function SQLiteSource.RenameTable( table: string, newTable: string )
 +```
 +
 +
 +
 +### SQLiteSource.LastInsertRowId()
 +
 +> 获取上次插入的最新`RowID`。
 +
 +```javascript
 +function SQLiteSource.LastInsertRowId(): int64
 +```
 +
 +
 +
 +### SQLiteSourceData.GetCount()
 +
 +> 获取当前查询结果数量。
 +
 +```javascript
 +function SQLiteSourceData.GetCount(): int
 +```
 +
 +
 +
 +### SQLiteSourceData.GetData()
 +
 +> 获取当前查询的指定索引结果。
 +
 +```javascript
 +function SQLiteSourceData.GetData( columnName: string, index: int = 0 ): Any
 +```
 +
 +```javascript
 +let gameDB = SQLite.Connect("Database.db");
 +
 +//QuerySQL
 +let sqlData = gameDB.Execute("SELECT * FROM Accounts WHERE Name = '" + SQLite.EscapeString("playerName") + "'");
 +if(sqlData.GetCount() > 0) DLog(sqlData.GetData("Level", 0));
 +```
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +</markdown>