sqlite3数据库-sqlite语句1(五)
DML(Data Manipulation Language,数据操作语言)
SELECT:查询表中的数据;
SELECT语句中使用WHERE子句
SELECT <列名>,... FROM <表名> WHERE <条件表达式>;
SELECT id,name,purchase_price FROM Product; /*使用逗号分隔查询多列,顺序同子句顺序*/
SELECT * FROM 表名; /*查询所有*/
SELECT purchase_price AS price FORM Product; /*为列设定别名*/
SELECT DSITINCT type FROM Product; /*使用DISTINCT删除type列中重复数据*//*从表Product中查询type等于衣服的name列*/
SELECT name FROM Product WHERE type='衣服';/*使用运算表达式 从Product表中查询name和sale_price,并将sale_price乘2作为"sale_price_x2"列出*/
SELECT name,sale_price,sale_price * 2 AS "sale_price_x2" FROM Product;/* 所有包含NULL的计算,结果都是NULL *//*比较运算符 等于(==) 不相等(<>) 大于等于(>=) 大于(>) 小于等于(<=) 小于(<) */
/* 查询出sale_price等于500的name和type,列出 */
SELECT name,type FROM Product WHERE sale_price = 500;/* 查询出sale_price大于等于1000的name和type及sale_price记录 */
SELECT name,type,sale_price FROM Product WHERE sale_price >= 1000;/*查询登记日期在2022年11月12日前的记录 */
SELECT name,type,date FROM Product WHERE data < '2022-11-12';/*查询sale_price减去purchase_price大于等于500*/
SELECT name,type,purchar_price FROM Product WHERE Product WHERE sale_price - purchar_price >= 500;NULL特殊处理
/*查询NULL的记录*/
SELECT name,price FROM Product WHERE purchase_price IS NULL;
/*查询不为NULL的记录*/
SELECT name,price FROM Product WHERE purchase_price IS NOT NULL;AND运算符和OR运算符
/*查询商品类型为Tool且销售价价格大于等于1000的商品,列出name和purchar_price*/
SELECT name,purchar_price FROM Product WHERE type='Tool' AND sale_price >= 1000;/*查询商品类型为Tool或销售价价格大于等于1000的商品,列出name和purchar_price*/
SELECT name,purchar_price FROM Product WHERE type='Tool' OR sale_price >= 1000;
通过括号强化处理
注意:AND优先级高于OR, 想要优先执行OR运算符可以使用括号;
SELECT name,type,date FROM Product WHERE type='Work' AND (date = '02-11' OR date = '02-15');INSERT:向表中插入新数据;
清单法插入一行
/*
sql = "CREATE TABLE ProductIns(" \"product_id CHAR(4) PRIMARY KEY NOT NULL," \"product_name VARCHAR(100) NOT NULL," \"product_type VARCHAR(32) NOT NULL," \"sale_price INTEGER DEFAULT 0," \"purchase_price INTEGER," \"regist_date DATE)";
*/INSERT INTO 表名 (列1,列2,...,列n) VALUES (val1,val2,...,valn);
/*
sql = "INSERT INTO ProductIns (product_id,product_name,product_type,sale_price,purchase_price,regist_date) VALUES ('001','毛衣','衣服',1000,500,'2009-09-20')";
*/2. 列清单的省略
INSERT INTO 表名 VALUES (val1,val2,...,valn);
/*
sql = "INSERT INTO ProductIns VALUES ('002','夹克','衣服',1000,600,'2009-09-21')";
*/3. 插入多行
sql = "INSERT INTO ProductIns VALUES ('003','拖鞋','鞋',1000,600,'2009-09-21'),"\"('004','内衣','衣服',1000,300,'2009-09-22'),""('005','皮鞋','鞋',1000,700,'2009-09-22')"; 4. 插入NULL
sql = "INSERT INTO ProductIns VALUES ('0026','皮裤','裤子',1000,NULL,'2009-09-26')"; 提示:插入NULL位置属性不能设置为NOT NUILL
5. 插入默认值
sql = "INSERT INTO ProductIns (product_id,product_name,product_type,purchase_price,regist_date) VALUES ('007','内裤','裤子',100,'2009-09-26')";直接去掉该字段,提前是该字段有DEFAULT属性;
6. 从其他表复制数据
sql = "CREATE TABLE ProductCopy(" \"product_id CHAR(4) PRIMARY KEY NOT NULL," \"product_name VARCHAR(100) NOT NULL," \"product_type VARCHAR(32) NOT NULL," \"sale_price INTEGER DEFAULT 0," \"purchase_price INTEGER," \"regist_date DATE)";sql = "INSERT INTO ProductCopy (product_id,product_name,product_type,sale_price,purchase_price,regist_date) SELECT * FROM ProductIns;";
或者
sql = "INSERT INTO ProductCopy (product_id,product_name,product_type,sale_price,purchase_price,regist_date) "\"SELECT product_id,product_name,product_type,sale_price,purchase_price,regist_date FROM ProductIns;";6. 使用GROUP BY子句
sql = "CREATE TABLE ProductType(" \"product_type VARCHAR(32) PRIMARY KEY NOT NULL," \"sale_price INTEGER DEFAULT 0," \"purchase_price INTEGER)" ;sql = "INSERT INTO ProductType (product_type,sale_price,purchase_price) "\"SELECT product_type,SUM(sale_price),COUNT(purchase_price) FROM ProductIns GROUP BY product_type;";补充:GROUP BY,HAVING,ORDER BY子句
GROUP BY,HAVING:从表中选取数据时用来改变抽取数据形式的;
ORDER BY:指定取得结果显示顺序的;
UPDATE:更新表中的数据;
UPDATE语句+SET子句
UPDATE 表名 SET 列名 = 表达式sql = "UPDATE ProductIns SET regist_date = '2023-02-20'";//将表中regist_data全部更新成02-20 2. 搜索型UPDATE
UPDATE 表名 SET 列名=表达式 WHERE 条件sql = "UPDATE ProductIns SET sale_price = sale_price*5 WHERE product_type='衣服'"; 3. NULL情空
只有未设置NOT NULL约束的列才可设置;
sql = "UPDATE ProductIns SET sale_price = NULL WHERE product_type='鞋'"; 4. 更新多列
sql = "UPDATE ProductIns SET sale_price = 500,purchase_price=200 WHERE product_type='鞋'"; DROP/DELETE:删除表中的数据;
sql = "DROP TABLE ProductCopy;"; //删除表 sql = "DELETE FROM ProductType"; //删除后会保留数据表,仅删除内容;sql = "DELETE FROM ProductIns WHERE purchase_price <= 300"; 不能使用GROUP BY,HAVING,ORDER BY; 删除表中数据时起不到什么作用;
不可恢复,谨慎删除;
事务
批量执行数据库语句时,使用事务能极大提高效率;实测在嵌入式开发板上update语句,开始事务后能从5s缩短到ms级别;
sql = "BEGIN TRANSACTION;"; //开启事务
sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);...... 批量插入/更新if(条件){sql = "COMMIT;"; //提交事务sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);
}else{sql = "ROLLBACK;"; //回滚
}int main(int argc, const char *argv[])
{int ret;sqlite3 *ppDb = NULL;char *errMsg = NULL;ret = sqlite3_open("./config.db", &ppDb);if(ret != SQLITE_OK){printf("open config.db failed %s\n",sqlite3_errmsg(ppDb));return -1;}printf("open config.db ok\n");/* 创建表ProductIns */char *sql = NULL;sql = "CREATE TABLE ProductIns(" \"product_id CHAR(4) PRIMARY KEY NOT NULL," \"product_name VARCHAR(100) NOT NULL," \"product_type VARCHAR(32) NOT NULL," \"sale_price INTEGER DEFAULT 0," \"purchase_price INTEGER," \"regist_date DATE)";ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}/* 创建表ProductCopy */sql = "CREATE TABLE ProductCopy(" \"product_id CHAR(4) PRIMARY KEY NOT NULL," \"product_name VARCHAR(100) NOT NULL," \"product_type VARCHAR(32) NOT NULL," \"sale_price INTEGER DEFAULT 0," \"purchase_price INTEGER," \"regist_date DATE)";ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}//创建表ProductTypesql = "CREATE TABLE ProductType(" \"product_type VARCHAR(32) PRIMARY KEY NOT NULL," \"sale_price INTEGER DEFAULT 0," \"purchase_price INTEGER)" ;ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}printf("crate config.db table ok\n");//开启事务sql = "BEGIN TRANSACTION;";ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}/* insert sql */sql = "INSERT INTO ProductIns (product_id,product_name,product_type,sale_price,purchase_price,regist_date)"\"VALUES ('001','毛衣','衣服',1000,500,'2009-09-20')"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec insert err %s\n",errMsg);sqlite3_free(errMsg);}sql = "INSERT INTO ProductIns VALUES ('002','夹克','衣服',1000,600,'2009-09-21')"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec insert err %s\n",errMsg);sqlite3_free(errMsg);}sql = "INSERT INTO ProductIns VALUES ('003','拖鞋','鞋',1000,600,'2009-09-21'),"\"('004','内衣','衣服',1000,300,'2009-09-22'),""('005','皮鞋','鞋',1000,700,'2009-09-22')"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec insert err %s\n",errMsg);sqlite3_free(errMsg);}sql = "INSERT INTO ProductIns VALUES ('006','皮裤','裤子',1000,NULL,'2009-09-26')"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec insert err %s\n",errMsg);sqlite3_free(errMsg);}sql = "INSERT INTO ProductIns (product_id,product_name,product_type,purchase_price,regist_date) "\"VALUES ('007','内裤','裤子',100,'2009-09-26')"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec insert err %s\n",errMsg);sqlite3_free(errMsg);}printf("insert config.db table ok\n");//从ProductIns表复制到ProductCopysql = "INSERT INTO ProductCopy (product_id,product_name,product_type,sale_price,purchase_price,regist_date) "\"SELECT product_id,product_name,product_type,sale_price,purchase_price,regist_date FROM ProductIns;";ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}sql = "INSERT INTO ProductType (product_type,sale_price,purchase_price) "\"SELECT product_type,SUM(sale_price),COUNT(purchase_price) FROM ProductIns GROUP BY product_type;";ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}sql = "COMMIT;";ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}//更新sql = "UPDATE ProductIns SET regist_date = '2023-02-20'"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}sql = "UPDATE ProductIns SET sale_price = sale_price*5 WHERE product_type='衣服'"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}sql = "UPDATE ProductIns SET sale_price = NULL WHERE product_type='鞋'"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}sql = "UPDATE ProductIns SET sale_price = 500,purchase_price=200 WHERE product_type='鞋'"; ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}//删除sql = "DELETE FROM ProductIns WHERE purchase_price <= 300"; //删除后会保留数据表,仅删除内容;ret = sqlite3_exec(ppDb,sql, NULL ,NULL, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_exec create err %s\n",errMsg);sqlite3_free(errMsg);}/* select sql */#if 0 sql = "SELECT * from ProductIns";int nRow, nCol;char **pazResult = NULL;ret = sqlite3_get_table(ppDb, sql, &pazResult, &nRow, &nCol, &errMsg);if(ret != SQLITE_OK){printf("sqlite3_get_table err %s\n",errMsg);sqlite3_free(errMsg);return -1;}printf("nRow = %d , nCol = %d\n", nRow, nCol);for(int i = 0; i < nCol*(nRow+1); i++){printf("pazResult[%d] = %s\n",i,pazResult[i]);}//正确且安全的释放内存sqlite3_free_table(pazResult);#endif sqlite3_close(ppDb);return 0;
}
相关文章:
sqlite3数据库-sqlite语句1(五)
DML(Data Manipulation Language,数据操作语言) SELECT:查询表中的数据;SELECT语句中使用WHERE子句SELECT <列名>,... FROM <表名> WHERE <条件表达式>;SELECT id,name,purchase_price FROM Product; /*使用逗号分隔查询多列,顺序同子句顺序*/ SELECT * FROM…...
【图像分类】卷积神经网络之LeNet5网络模型实现MNIST手写数字识别
写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 在上一篇博文中我们对LeNet5网络模型的结构进行了剖析,本篇博文,我们将使用PyTorch搭建LeNet5实现MNIST手写数字…...
前端开发环境搭建
文章目录Node.js是什么安装查看版本入门示例NPM使用 npm 命令安装模块常见命令使用淘宝 NPM 镜像TypeScript安装入门示例从github拉取构建项目如何从零创建一个TypeScript项目规划目录结构新建项目Web App运行服务添加依赖打包使用browserify打包使用webpack打包推荐流程目录配…...
学习Flask之四、网页表单
第二章介绍的request对象,使用了客户端请求的所有信息。特别地,request.form提供了对POST请求提交的表单数据的访问。尽管Flask请求对象的支持足于处理网页单,但是还有很多作务很繁锁和重复。两个很好的例子是产生HTML表单代码和验证表单数据…...
CenterMask paper笔记
CenterMask是一个anchor free的实例分割模型, 来自paper: CenterMask: Real-Time Anchor-Free Instance Segmentation 提起anchor free, 会想到FCOS模型,是用来目标检测的, 那么这里就用到了FCOS, 不过换了backbone, 在FCOS检测出目标框后&…...
06- OpenCV查找图像轮廓 (OpenCV基础) (机器视觉)
知识重点 灰度图转换: gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)二值化: 返回两个东西,一个阈值, 一个是二值化的图: thresh, binary cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)查找轮廓: 返回两个结果,分别是轮廓和层级: c…...
OpenGL学习日记之模型绘制
自己编译运行过程中遇到的一些问题 下载Assimp已编译的lib(因为我们公司的电脑有很多权限和限制,也不能自己安装一些没有报备的软件,所以愁方便我就没有用cMake自己编译了)找到一位免费分享的博主的。 https://blog.csdn.net/lady_killer9/article/deta…...
Springboot接口多个DTO入参的Postman上传方式
在Java中使用Spring Boot框架时,可以同时使用多个DTO作为方法参数。 TO(Data Transfer Object)是一个常见的设计模式,用于封装数据传输对象。它通常用于将数据从一个层传递到另一个层,例如将数据从服务层传递到控制器…...
软考各科目考核内容详细介绍,看这里
新手在准备报考软考时,都会遇到这样的一个问题——科目这么多,我适合考什么?要想知道自己适合报什么科目,就需要了解每个科目是什么,考什么等一系列的问题。 接下来,就为大家介绍一下软考的各个科目&#…...
连续时间信号与离散时间信号
前言 《信号与系统》是一门很难的课,也是许多学校考研要考的专业课,由于每周只有两节课,所以每次上完都要及时的去复习,这里参考的教材是奥本海姆著作,刘海棠译,北京:电子工业出版社࿰…...
TPM密钥管理、使用
前面讲过证书相关内容,除了在软件方面有所应用外,在硬件方面也有很多应用。本次讲一下TPM相关的内容。 一、TPM介绍 1.1背景 TCG基于硬件安全的架构是为应对1990s后期日益增多的复杂恶意软件攻击应用而生的。当时以及现在,抵御PC客户端网络…...
return和finally执行顺序、运行时异常与一般异常异同、error和exception区别、Java异常处理机制原理与应用
文章目录1.try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?2.运行时异常与一般异常有何异同?3.java 程序中的错误有三种类型分别是什么4.error和exception有什么…...
我为什么放弃WinUI3
基于WinUI3开发HiNote已经有一个多月的时间了,算是做出来一个简单能用的C端软件。 基于个人的经历,说说其中的开发体验。 UI设计语言 无论是否抄袭苹果,WinUI3给人的感觉都是眼前一亮的。简洁美观,现代化,毛玻璃的美…...
2023年全国最新安全员精选真题及答案2
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.(单选题)静作用压路机在施工过程,要求实际含水量…...
计算机408考研先导课---C语言难点
以下为小编在重温C语言时,容易犯错的一些点,希望列出来对大家有一定帮助! 一、整型变量数的范围 类型说明符长度(字节)数的范围int4/2(有些为4字节,有些为2字节)-32768~32767short2…...
K8S 部署 Redis-Cluster 集群
本文使用 bitnami 镜像部署 redis-cluster 官方文档:https://github.com/bitnami/charts/tree/main/bitnami/redis-cluster 添加 bitnami 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami自定义 values.yaml storageClass:集群的存储…...
[oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络
编码进化 回忆上次内容 上次 回顾了 计算机存储单位的演变 最小的读写单位 是 bit 8-bit 固定下来 成为了字节(Byte) 位数容量8-bit1Byte1024Byte1 KB1024 KB1 MB1024 MB1 GB1024 GB1 TB 存储字符时 第1位 是 标志位后7位 是 ascii具体的值 可以用 1Byte 存储 计算机之间 …...
Apache Shiro与Spring Security对比
Apache Shiro VS Spring Security 1.Spring Security 官方文档:https://spring.io/projects/spring-security#overview介绍: Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr…...
23春招-mysql事务相关高频面试题
1、什么是事务 对于一个事务,要么事务内的sql全部执行,要么都不执行 2、 事务的特性ACID 原子性 整个事务中所有的操作要么全部提交成功,要么全部失败会滚。 一致性 数据库总是从一个一致性状态转换到另一个一致性状态。假如有三个sql语句…...
天线理论知识1——基础概念介绍
基础概念介绍 文章目录 基础概念介绍前言一、主要参数二、天线的种类三、天线的测量前言 天线是用于发射和接收电磁波设备。其功能可以概括为转换自由空间中的电磁波和设备中的导行波。 一、主要参数 天线设计中要考虑的参数较多,包括 方向性函数:距离天线 r r r处的远区…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...
Docker、Wsl 打包迁移环境
电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.2609…...
