urho3d数据库

news/2024/11/29 20:32:18/

只有在启用以下两个构建选项之一时,数据库子系统才会构建到Urho3D库中:Urho3D_Database_ODBC和Urho3D-Database_SQLITE。当两个选项都启用时,URHO3D_DATABASE_ODBC优先。这些构建选项决定子系统将使用哪个数据库API。ODBC DB API更适用于本地应用程序,尤其是游戏服务器,它允许应用程序建立与任何ODBC兼容数据库的连接,如SQLite、MySQL/MariaDB、PostgreSQL、Sybase SQL、Oracle等。另一方面,SQLite DB API适用于将SQLite数据库及其引擎嵌入应用程序本身的移动应用程序。数据库子系统使用统一的URHO3D API包装底层的DBAPI,因此在这两个构建选项之间切换时,库用户不需要或只需要很少的代码更改。

目前,该实现只支持立即执行SQL语句。准备好的报表和交易管理将在以后需要时添加。该子系统具有简单的数据库连接池功能。当使用ODBC DB API时,不应将此内部数据库连接池与ODBC连接池选项混淆。默认情况下启用内部池,除非正在使用ODBC DB API,并且在主机系统中检测到ODBC驱动程序管理器3.0或更高版本,在这种情况下,应使用ODBC连接池选项来管理数据库连接池

正在建立数据库连接

通过调用Connect()并传递一个所谓的数据库连接字符串来建立新的数据库连接。数据库连接字符串不仅标识要连接到哪个数据库,还标识其他相关的数据库连接设置,如:数据库用户id、用户密码、主机和端口号等。数据库连接字符串的格式由底层DBAPI控制。通常,在切换底层DBAPI和切换要连接的数据库时,连接字符串实际上是唯一需要更改的内容。

成功建立连接后,将返回有效的DbConnection对象。完成数据库连接后,应用程序应通过调用disconnect()来断开数据库连接。这是一个很好的练习。当Urho3D游戏引擎退出时,数据库子系统的析构函数会自动断开所有仍处于活动状态的数据库连接。

ODBC连接字符串

ODBC连接字符串的确切格式取决于特定数据库供应商的ODBC驱动程序。有关如何构造数据库连接字符串,请参阅随附的特定ODBC驱动程序文档。支持DSN和无DSN连接字符串。为了便于说明,本小节将仅以如何连接到MySQL/MariaDB数据库为例进行说明。假设MySQL/MariaDB数据库服务器在本地主机上运行,默认端口的数据库名为“test”,用户id和密码为“testuser”和“testpassword”。

DSN连接字符串

使用主机系统提供的GUI工具定义ODBC数据源。它可以是用户DSN或系统DSN。在Linux主机系统上,只需分别在“~/.odbc.ini”或“/etc/odbc.ini”中添加新的数据源条目。如果文件还不存在,请创建该文件。数据源条目必须至少包含以下信息。

   # These settings assume the host system uses unixODBC as ODBC driver manager

# Settings for iODBC driver manager would be slightly different

[testDSN]

Driver=MariaDB      # This is the name of the ODBC driver installed in the /etc/odbcinst.ini

Description=MariaDB test database

Server=localhost

Port=

User=testuser

Password=testpassword

Database=test

Option=3

Socket=

要连接到此数据源,请使用以下连接字符串:

DSN=testDSN

无DSN连接字符串

要连接到上述相同的数据库而不将其预先配置为ODBC数据源,请使用如下连接字符串:

   Driver=MariaDB;Database=test;User=testuser;Password=testpassword;Option=3

SQLite连接字符串

  SQLite数据库是单个磁盘文件。SQLite连接字符串只是指向单个磁盘文件位置的路径。绝对路径和相对路径都有效。当路径有效但磁盘文件还不存在时,SQLite数据库引擎将自动创建磁盘文件,从而在此过程中创建一个新的空数据库。这种方法的缺点是,无法传递额外的数据库连接设置。为此,SQLite DB API还支持使用RFC 3986 URI格式的连接字符串。有关详细信息,请参阅有关URI格式的SQLite文档。为了便于说明,本小节将假设SQLite磁盘文件名为“test.db”,位于主目录中,当前工作目录为主目录。

路径连接字符串

在上述假设下,以下示例连接字符串同样有效。

相对路径:

   test.db

或绝对路径:

   /home/testuser/test.db

URI连接字符串  

   在此格式中,附加的数据库连接设置可以作为查询参数传递。例如,要以只读和共享缓存模式连接到与上述相同的数据库,则可以将连接字符串重写为:

   file:./test.db?mode=ro&cache=shared

   或者

   file:///home/testuser/test.db?mode=ro&cache=shared

立即执行SQL语句

   使用Execute()以立即模式执行SQL语句。在即时模式下,SQL语句可以一次性打开、准备、执行和完成。执行即席查询是一种方便的方法,但当重复执行同一查询时,它可能对系统性能不利。无论查询类型是DML(数据操作语言)还是DDL(数据定义语言),该方法都返回DbResult对象。当正在执行的SQL语句是select查询时,DbResult对象仅包含结果集。使用GetNumColumns()和GetNumRows()查找结果集的大小。使用GetColumns()和GetRows()分别获取实际的列标题数据和行数据。对于DML语句,使用GetNumAffectedRows()查找受影响的行数。

   DbResult对象中的行数可能小于从数据库中提取的实际行数。这是因为E_DBCURSOR事件处理程序可能会指示将提取的行过滤掉。在E_DBCURSOR事件处理程序的请求下,也可以中止整个行提取过程。

使用准备好的语句和动态参数绑定执行SQL

 目前尚不支持。

 交易管理

   目前尚不支持。目前,除非数据库以只读方式连接(在这种情况下,DML和DDL语句将导致记录错误),否则所有语句都是自动提交的。

数据库游标事件

  当执行SQL语句时,有一个选项可以启用数据库游标事件的发送。在提取结果集的每一行时,都会发送此事件。即事件可以在Execute()方法返回之前发送多次。应用程序可以订阅此事件以影响结果集在DbResult对象中的填充方式。

  E_DBCURSOR具有输入和输出参数。

输出参数:

    P_SQL        SQL query string currently being executed (String)

P_NUMCOLS    Number of columns in the resultset (unsigned)

P_COLHEADERS Column headers in the resultset (StringVector)

P_COLVALUES  Row data as it is being fetched (VariantVector)

输入参数:

   P_FILTER设置为true以从DbResult对象中筛选出此行

   P_ABORT设置为true以中止进一步的提取过程

   

   P_FILTER可以用于任何其他客户端过滤逻辑,否则很难在数据库服务器端使用WHERE或HAVING子句执行这些逻辑。使用P_ABORT时,不会影响已填充到DbResult对象中的行。


http://www.ppmy.cn/news/28337.html

相关文章

(九)python网络爬虫(理论+实战)——爬虫实战:指定关键词的百度新闻爬取

系列文章目录 (1)python网络爬虫—快速入门(理论+实战)(一) (2)python网络爬虫—快速入门(理论+实战)(二) (3) python网络爬虫—快速入门(理论+实战)(三) (4)python网络爬虫—快速入门(理论+实战)(四) (5)

用 Python 画如此漂亮的插图 ,So easy

人生苦短,快学Python! 今天我们进行一次实战案例分享,以全球预期寿命与人均 GPD数据为例,写一篇 Python 中漂亮散点图的快速指南。除了正常的数据清洗/处理、还会进行简单的统计分析,实现数据处理-统计分析-可视化一条…

【Opencv-python】之入门安装

目录 一、安装Python 1. 登录官网https://www.python.org/downloads/ 2. 任选一个版本,下载Python 3. 安装Python 记得勾选下图的Add Python 3.6 PATH, 添加python到环境变量的路径,然后选择Install now​编辑 4. 验证是否安装成功 5.退出 二、安装…

FPGA纯verilog解码SDI视频 纯逻辑资源实现 提供2套工程源码和技术支持

目录1、前言2、硬件电路解析SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像输出FDMA图像缓存HDMI输出3、工程1详解:无缓存输出4、工程2详解:缓存3帧输出5、上板调试验证并演示6、福利:工程代码的获取1、前言 FPGA实现SDI视…

ptp4l

转自: linuxptp/ptp4l PTP时钟同步配置选项_就是个linux工程师的博客-CSDN博客_ptp4l 匆忙翻译了一下linuxptp ptp4l的帮助手册,不尽准确,不尽详细,仅供参考。欢迎留言讨论相关问题。 1 名称 ptp4l - PTP普通时钟/边界时钟/透明…

【MySQL】基本SELECT语句与运算符

一、最基本的SELECT语句 1、基本结构 SELECT 字段1,字段2 FROM 表名; select * from table_name; *表示表中的所有字段(或者列) 2、列的别名、去重 列的别名: 假设我们要从t_employee表中查询employee_id并给他一个别名 使用as关键字:SELECT employee…

前端基础之HTML扫盲

文章目录一. 第一个HTML程序1. 创建一个HTML文件并运行2. HTML的基本结构二. HTML常见标签1. 注释标签2. 标题标签3. 段落标签4. 换行标签5. 格式化标签6. 图片标签7. 超链接标签8. 表格标签9. 列表标签10. 表单标签10.1 input标签10.2 select标签10.3 textarea标签11. 无语义标…

【C++】类和对象的六个默认成员函数

类的6个默认成员函数构造函数概念特性析构函数概念特性拷贝构造函数概念特征拷贝构造函数典型调用场景:赋值运算符重载运算符重载赋值运算符重载取地址及const取地址操作符重载类的6个默认成员函数 到底什么是类的6个默认成员函数呢?相信大家一定对此怀…