You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ballerina中使用Like操作符执行带变量的SQL语句

在Ballerina SQL客户端中执行带LIKE操作符的参数化查询

在Ballerina中执行包含LIKE操作符的SQL查询时,必须使用参数化查询避免SQL注入风险,禁止直接将变量拼接进SQL字符串。以下是两种常用的安全实现方式:

方式一:在Ballerina代码中构造带通配符的查询值

先将搜索关键词与通配符%拼接成完整的匹配模式,再作为参数传入参数化查询:

import ballerina/sql;
import ballerina/jdbc;
import ballerina/io;

public function main() returns error? {
    // 初始化JDBC客户端(根据实际数据库类型调整连接参数)
    jdbc:Client db = check new (
        "jdbc:mysql://localhost:3306/your_db", 
        "db_user", 
        "db_password"
    );
    
    string searchKeyword = "mon";
    // 构造包含前后通配符的匹配规则
    string likePattern = "%" + searchKeyword + "%";
    
    // 定义参数化查询语句
    sql:ParameterizedQuery query = `SELECT * FROM albums WHERE title LIKE ?`;
    // 执行查询并传入参数
    sql:Stream<record{}, error?> albumStream = db->query(query, likePattern);
    
    // 遍历输出查询结果
    check from var album in albumStream
        do {
            io:println(album);
        };
}

方式二:在SQL语句中通过数据库函数拼接通配符

部分数据库支持用内置字符串拼接函数(如MySQL的CONCAT)在SQL内部完成通配符与变量的拼接,此时只需传入原始搜索关键词:

import ballerina/sql;
import ballerina/jdbc;
import ballerina/io;

public function main() returns error? {
    jdbc:Client db = check new (
        "jdbc:mysql://localhost:3306/your_db", 
        "db_user", 
        "db_password"
    );
    
    string searchKeyword = "mon";
    
    // 用数据库函数在SQL内部拼接通配符
    sql:ParameterizedQuery query = `SELECT * FROM albums WHERE title LIKE CONCAT('%', ?, '%')`;
    sql:Stream<record{}, error?> albumStream = db->query(query, searchKeyword);
    
    check from var album in albumStream
        do {
            io:println(album);
        };
}

关键注意事项

  • 绝对禁止直接将变量嵌入SQL字符串(如SELECT * FROM albums WHERE title LIKE '%${searchKeyword}%'),这种写法会引发严重的SQL注入漏洞。
  • 不同数据库的字符串拼接语法有差异(比如PostgreSQL用||运算符),需根据实际使用的数据库调整SQL语句。

内容的提问来源于stack exchange,提问作者Anupama Pathirage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:48:25