工具篇|C++实现一个SQL语句填写工具

工具篇|C++实现一个SQL语句填写工具
AKoalas开发背景
客户端开发虽然涉及数据库的场景不是很多,但是一般使用sqlite3
建立保存本地数据库进行一些内部数据存储。
在开发代码中,往往会进行一些连表查询,通过sqlite3
进行查询时,写出的SQL
语句非常不美观并且出错的概率非常大。因此学习并实现一个SQL
语句工具,可以优雅的添加SQL
语句。
简单了解SQL语句
SQL语句
一般分为三类:
DDL
类:数据定义语言(CREATE,ALTER,DROP,DECLARE)DML
类:数据操作语言(SELECT,DELETE,UPDATE,INSERT)DCL
类:数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
网上也有分成四类,将查询单独作为一个类——DQL
类,数据查询语言。
相对于客户端本地或者开发者工具使用来说,主要使用DML
进行数据库的操作。本工具主要围绕CREATE、DROP、SELECT、DELETE、UPDATE、INSERT
几个SQL语言关键字使用。
表级操作
表级操作是指对整个表进行操作的数据库操作。这些操作通常会影响到表的结构或内容,而不是单个行或列。表级操作可以包括创建、修改或删除表,以及对表的索引、约束和触发器进行操作。
在 SQL
中,CREATE
、DROP
和 ALTER
是用于创建、删除和修改数据库对象(如表、索引、视图等)的关键字。
CREATE
:用于创建数据库对象。常见的CREATE
操作包括:CREATE TABLE
:用于创建表。CREATE INDEX
:用于创建索引。CREATE VIEW
:用于创建视图。
例如,创建一个名为
PERSON
的表:1
2
3
4CREATE TABLE PERSON (
ID INT PRIMARY KEY,
NAME VARCHAR(50)
);DROP
:用于删除数据库对象。常见的DROP
操作包括:DROP TABLE
:用于删除表。DROP INDEX
:用于删除索引。DROP VIEW
:用于删除视图。
例如,删除名为
PERSON
的表:1
DROP TABLE PERSON;
ALTER
:用于修改数据库对象。常见的ALTER
操作包括:ALTER TABLE
:用于修改表的结构,如添加列、修改列类型等。ALTER INDEX
:用于修改索引。ALTER VIEW
:用于修改视图。
例如,向名为
PERSON
的表添加一个新列AGE
:1
2ALTER TABLE PERSON
ADD COLUMN AGE INT;
这些关键字在 SQL
中用于管理数据库对象的创建、删除和修改。通过使用这些关键字,可以对数据库进行结构性的管理和维护。
行级操作
行级操作用于对表中的单个行进行操作,包括插入、更新和删除数据。
- 插入数据:使用
INSERT INTO
语句将新数据插入表中。 - 更新数据:使用
UPDATE
语句更新表中的现有数据。 - 删除数据:使用
DELETE FROM
语句删除表中的数据。 - 查询数据:使用
SELECT
语句查找数据表中的数据。
SELECT
语句举例:1
2
3
4
5
6
7
8-- 从名为"users"的表中选择所有列和行
SELECT * FROM users;
-- 从"users"表中选择特定列
SELECT user_id, username, email FROM users WHERE user_type = 'admin';
-- 使用聚合函数和GROUP BY子句
SELECT country, COUNT(*) AS total_users FROM users GROUP BY country;DELETE
语句举例:1
2
3
4
5-- 删除名为"products"的表中所有行
DELETE FROM products;
-- 删除"orders"表中满足条件的行
DELETE FROM orders WHERE order_date < '2024-01-01';UPDATE
语句举例:1
2
3
4
5-- 将"customers"表中的city列设置为'New York',对于满足条件的行
UPDATE customers SET city = 'New York' WHERE state = 'NY';
-- 将"products"表中的价格增加10%
UPDATE products SET price = price * 1.1 WHERE category = 'Electronics';INSERT
语句举例:1
2
3
4
5-- 向"employees"表中插入新员工的记录
INSERT INTO employees (emp_id, emp_name, emp_dept) VALUES (101, 'John Doe', 'IT');
-- 向"orders"表中插入一条新订单记录
INSERT INTO orders (order_id, customer_id, order_date, total_amount) VALUES (1001, 101, '2024-05-03', 500.00);
实现过程
实现一个拼接SQL
语句的类
SQLSplicing.hpp
1 |
|
实现一个填写SQL
语句的类
SQLBuilder.hpp
1 |
|
测试输出
1 |
|
输出如下:
1 | SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON FROM PERSON P, ACCOUNT A INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID INNER JOIN COMPANY C on D.COMPANY_ID = C.ID WHERE (P.ID = A.ID AND P.FIRST_NAME like 'a*s') OR (P.LAST_NAME like '*s') GROUP BY P.ID HAVING (P.LAST_NAME like 'ak*as') OR (P.FIRST_NAME like '_ak') ORDER BY P.ID LIMIT 10 OFFSET 10 |