V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kamitora
V2EX  ›  程序员

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

  •  2
     
  •   Kamitora · 2018-11-29 00:06:04 +08:00 · 4167 次点击
    这是一个创建于 1947 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    13 条回复    2018-11-29 11:40:19 +08:00
    misaka19000
        1
    misaka19000  
       2018-11-29 00:28:15 +08:00 via Android
    用 mybatis 或者 jpa
    sutra
        2
    sutra  
       2018-11-29 01:16:30 +08:00
    这道题可能回答 ORM 更合适点。
    mingl0280
        3
    mingl0280  
       2018-11-29 06:15:59 +08:00
    不拼接,参数化查询。
    SamsonWang
        4
    SamsonWang  
       2018-11-29 06:46:17 +08:00 via Android
    既然是学校的练习项目,不妨尝试用纯手工拼接一次,以后使用各种库的时候就能体会到方便性了
    mmdsun
        5
    mmdsun  
       2018-11-29 07:32:24 +08:00 via Android
    String.format()
    xbigfat
        6
    xbigfat  
       2018-11-29 07:59:21 +08:00 via iPhone   ❤️ 1
    真心建议手写一次。正式项目里用 JPA 实现可能很少写 SQL,手写语句,或者手写 ORM 框架,可以学到很多(反射,注解,最重要的是 orm 思想)
    JaguarJack
        7
    JaguarJack  
       2018-11-29 08:01:35 +08:00 via iPhone
    orm
    TommyLemon
        8
    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
        9
    ren2881971  
       2018-11-29 10:20:58 +08:00
    无解 复杂的报表 sql 绝不是 orm 能解决的。
    你最多就是保证 参数化查询。。。 一些动态条件你不拼接能行么。
    TommyLemon
        10
    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
        11
    TommyLemon  
       2018-11-29 10:37:18 +08:00
    @TommyLemon 还有自动化 JOIN(LEFT JOIN, RIGHT JOIN, INNER JOIN, CROSS JOIN) 也不用写代码哦
    onice
        12
    onice  
       2018-11-29 10:58:05 +08:00
    JDBC 可以直接预编译查询,就是那个 PreparedStatement。不建议直接拼接字符串,容易产生 SQL 注入漏洞。
    TommyLemon
        13
    TommyLemon  
       2018-11-29 11:40:19 +08:00
    @onice APIJSON 的 Java 实现源码 APIJSONDemo 就是用了 PreparedStatement,自动防 SQL 注入哦,
    CRUD 还不用自己写代码。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5372 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 131ms · UTC 07:48 · PVG 15:48 · LAX 00:48 · JFK 03:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.