如何方便快捷地拼接 SQL 字符串?

2018-11-29 00:06:04 +08:00
 Kamitora

大三一门软件工程课硬是要做一个 C/S 的管理软件。用了 Java FX 做了界面,奈何还是得拼接 SQL 语句( JDBC )来完成数据交互。请问有没有什么方便的工具可以将( SQL 语句,变量名)转换成字符串?

4277 次点击
所在节点    程序员
13 条回复
misaka19000
2018-11-29 00:28:15 +08:00
用 mybatis 或者 jpa
sutra
2018-11-29 01:16:30 +08:00
这道题可能回答 ORM 更合适点。
mingl0280
2018-11-29 06:15:59 +08:00
不拼接,参数化查询。
SamsonWang
2018-11-29 06:46:17 +08:00
既然是学校的练习项目,不妨尝试用纯手工拼接一次,以后使用各种库的时候就能体会到方便性了
mmdsun
2018-11-29 07:32:24 +08:00
String.format()
xbigfat
2018-11-29 07:59:21 +08:00
真心建议手写一次。正式项目里用 JPA 实现可能很少写 SQL,手写语句,或者手写 ORM 框架,可以学到很多(反射,注解,最重要的是 orm 思想)
JaguarJack
2018-11-29 08:01:35 +08:00
orm
TommyLemon
2018-11-29 10:13:11 +08:00
首先 SQL 原生写法肯定是要掌握的,使用 Navicat,DataGrip,MySQLWorkbench 等各种数据库工具,
在 快速查找数据、验证代码查到的数据是否正确、简单插入或修改部分开发环境的数据 等都比写代码方便很多。

实现接口的话可以用 APIJSON,不用写代码,自动将前端传的 JSON 参数转为 SQL 执行并返回 JSON 结果,
期间自动校验角色及对应的操作权限,自动防 SQL 注入。

GitHub 右上角点 Star 支持下吧 ^_^
https://github.com/TommyLemon/APIJSON
ren2881971
2018-11-29 10:20:58 +08:00
无解 复杂的报表 sql 绝不是 orm 能解决的。
你最多就是保证 参数化查询。。。 一些动态条件你不拼接能行么。
TommyLemon
2018-11-29 10:36:20 +08:00
@ren2881971
报表确实复杂,动辄一屏以上,各种 join,子查询,case 等,我也没见过能搞得定的 ORM。
不过一般中小型互联网项目的大部分接口都远没有这么复杂的查询,
APIJSON 支持得很好,仍然不用写代码,目前已实现:

大体功能:增删改查、分页查询、统计与验证、注册登录、模糊搜索、正则匹配、连续范围<br />
、结构校验、角色及操作权限校验、数据保护、远程函数调用等<br />
操作方式:增、删、改、查、调用远程函数<br />
操作对象:单个对象、可关联的多个对象、数组等<br />
请求方法:GET,HEAD,GETS,HEADS,POST,PUT,DELETE<br />
请求结构:{Table:{...}}、{Table0:{...},Table1{...},Table2:{...}...}、{"[]":{Table:{...}}}、{"[]":{Table0:{...},Table1{...},"Array0[]":{...},...}}等各种组合和嵌套<br />
返回结构:对应请求结构的各种 JSON 结构。<br />
功能符号:<br />

```js
"key[]":{} // 查询数组

"key{}":[] // 匹配选项范围

"key{}":"<=10;length(key)>1..." // 匹配条件范围

"key()":"function(arg0,arg1...)" // 远程调用函数

"key@":"key0/key1.../targetKey" // 引用赋值

"key$":"%abc%" // 模糊搜索

"key~":"^[0-9]+$" // 正则匹配

"key%":"2018-01-01,2018-10-01" // 连续范围

"key+":[1] // 增加 /扩展

"key-":888.88 // 减少 /去除

"name:alias" // 新建别名

"@column":"id,sex,name" // 返回字段

"@group":"userId" // 分组方式

"@having":"max(id)>=100" // 聚合函数

"@order":"date-,name+" // 排序方式

"@schema":"sys" // 集合空间

"@database":"PostgreSQL" // 跨数据库

"@role":"LOGIN" // 访问角色
```

详细说明见通用文档中的 [功能符]( https://github.com/TommyLemon/APIJSON/blob/master/Document.md#3.2)
TommyLemon
2018-11-29 10:37:18 +08:00
@TommyLemon 还有自动化 JOIN(LEFT JOIN, RIGHT JOIN, INNER JOIN, CROSS JOIN) 也不用写代码哦
onice
2018-11-29 10:58:05 +08:00
JDBC 可以直接预编译查询,就是那个 PreparedStatement。不建议直接拼接字符串,容易产生 SQL 注入漏洞。
TommyLemon
2018-11-29 11:40:19 +08:00
@onice APIJSON 的 Java 实现源码 APIJSONDemo 就是用了 PreparedStatement,自动防 SQL 注入哦,
CRUD 还不用自己写代码。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/512539

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX