跳转至

mysql数据库的配置

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4gd275ee9

脚本说明

该脚本用于配置MySQL数据库连接。在MyApps平台中,可以通过配置数据源来连接MySQL数据库,然后在脚本中使用该数据源进行数据库操作。

常见实现方式

方式1:配置MySQL数据源(基本配置)

在MyApps平台的数据源配置中,需要设置以下参数:

数据源名称: mysql_datasource
数据库类型: MySQL
驱动类: com.mysql.jdbc.Driver (MySQL 5.x)
驱动类: com.mysql.cj.jdbc.Driver (MySQL 8.x)
连接URL: jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8
用户名: root
密码: your_password

方式2:MySQL 5.x配置

// 数据源配置示例
var datasourceName = "mysql_datasource";
var driverClass = "com.mysql.jdbc.Driver";
var jdbcUrl = "jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8&useSSL=false";
var username = "root";
var password = "password";

方式3:MySQL 8.x配置

// 数据源配置示例
var datasourceName = "mysql_datasource";
var driverClass = "com.mysql.cj.jdbc.Driver";
var jdbcUrl = "jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
var username = "root";
var password = "password";

方式4:使用配置好的数据源

(function(){
    var datasourceName = "mysql_datasource";
    var sql = "SELECT * FROM table_name LIMIT 10";
    var datas = queryByDSName(datasourceName, sql);

    return datas;
})();

扩展示例

示例1:测试MySQL连接

(function(){
    var datasourceName = "mysql_datasource";

    try{
        var sql = "SELECT 1 as test";
        var result = findByDSName(datasourceName, sql);

        if(result != null){
            return "MySQL连接成功";
        }else{
            return "MySQL连接失败";
        }
    }catch(e){
        return "MySQL连接错误: " + e.getMessage();
    }
})();

示例2:查询MySQL数据库表

(function(){
    var datasourceName = "mysql_datasource";
    var sql = "SELECT * FROM table_name WHERE id = '1'";
    var result = findByDSName(datasourceName, sql);

    if(result != null){
        var data = {
            id: result.getItemValueAsString("id"),
            name: result.getItemValueAsString("name")
        };
        return JSON.stringify(data);
    }

    return "{}";
})();

示例3:插入数据到MySQL

(function(){
    var datasourceName = "mysql_datasource";
    var name = "测试数据";
    var value = 100;

    var sql = "INSERT INTO table_name (name, value) VALUES ('" + name + "', " + value + ")";
    updateByDSName(datasourceName, sql);

    return "数据插入成功";
})();

示例4:更新MySQL数据

(function(){
    var datasourceName = "mysql_datasource";
    var id = "1";
    var name = "更新后的名称";

    var sql = "UPDATE table_name SET name = '" + name + "' WHERE id = '" + id + "'";
    updateByDSName(datasourceName, sql);

    return "数据更新成功";
})();

示例5:删除MySQL数据

(function(){
    var datasourceName = "mysql_datasource";
    var id = "1";

    var sql = "DELETE FROM table_name WHERE id = '" + id + "'";
    updateByDSName(datasourceName, sql);

    return "数据删除成功";
})();

示例6:MySQL连接URL参数说明

// MySQL连接URL常用参数
var jdbcUrl = "jdbc:mysql://localhost:3306/database_name" +
              "?useUnicode=true" +           // 使用Unicode编码
              "&characterEncoding=utf8" +    // 字符编码
              "&useSSL=false" +              // 禁用SSL(开发环境)
              "&serverTimezone=Asia/Shanghai" + // 时区设置(MySQL 8.x需要)
              "&autoReconnect=true" +        // 自动重连
              "&failOverReadOnly=false";     // 故障转移时是否只读

示例7:MySQL字符集配置

// 在MySQL配置文件中设置字符集
// my.cnf 或 my.ini
/*
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4
*/

// 在连接URL中指定字符集
var jdbcUrl = "jdbc:mysql://localhost:3306/database_name?characterEncoding=utf8mb4";

示例8:MySQL连接池配置

// 在数据源配置中设置连接池参数
/*
最大连接数: 20
最小空闲连接: 5
连接超时时间: 30000 (毫秒)
空闲连接回收时间: 600000 (毫秒)
*/

// 使用连接池的好处:
// 1. 提高性能,避免频繁创建和关闭连接
// 2. 控制连接数量,防止资源耗尽
// 3. 自动管理连接生命周期

示例9:MySQL事务处理

(function(){
    var datasourceName = "mysql_datasource";

    try{
        // 开始事务(如果支持)
        // 执行多个SQL操作
        var sql1 = "UPDATE table1 SET value = value + 100 WHERE id = '1'";
        updateByDSName(datasourceName, sql1);

        var sql2 = "UPDATE table2 SET value = value - 100 WHERE id = '2'";
        updateByDSName(datasourceName, sql2);

        // 提交事务(如果支持)
        return "事务执行成功";
    }catch(e){
        // 回滚事务(如果支持)
        return "事务执行失败: " + e.getMessage();
    }
})();

示例10:MySQL错误处理

(function(){
    var datasourceName = "mysql_datasource";
    var sql = "SELECT * FROM table_name";

    try{
        var datas = queryByDSName(datasourceName, sql);

        if(datas != null && datas.size() > 0){
            return "查询成功,共 " + datas.size() + " 条记录";
        }else{
            return "查询成功,但无数据";
        }
    }catch(e){
        var errorMsg = e.getMessage();

        // 常见错误处理
        if(errorMsg.indexOf("Access denied") >= 0){
            return "错误: 数据库访问被拒绝,请检查用户名和密码";
        }else if(errorMsg.indexOf("Unknown database") >= 0){
            return "错误: 数据库不存在";
        }else if(errorMsg.indexOf("Connection refused") >= 0){
            return "错误: 无法连接到数据库服务器";
        }else{
            return "错误: " + errorMsg;
        }
    }
})();

关键函数说明

  • queryByDSName(datasourceName, sql): 使用指定数据源执行查询并返回多条记录
  • findByDSName(datasourceName, sql): 使用指定数据源执行查询并返回单条记录
  • updateByDSName(datasourceName, sql): 使用指定数据源执行更新语句
  • countByDSName(datasourceName, sql): 使用指定数据源执行查询并返回记录数

MySQL配置说明

数据源配置参数

  • 数据源名称: 在MyApps平台中配置的数据源名称
  • 驱动类: MySQL JDBC驱动类名
  • MySQL 5.x: com.mysql.jdbc.Driver
  • MySQL 8.x: com.mysql.cj.jdbc.Driver
  • 连接URL: JDBC连接字符串
  • 用户名: 数据库用户名
  • 密码: 数据库密码

连接URL格式

jdbc:mysql://[host]:[port]/[database]?[参数]

常用URL参数

  • useUnicode=true: 使用Unicode编码
  • characterEncoding=utf8: 字符编码(utf8或utf8mb4)
  • useSSL=false: 是否使用SSL(开发环境建议false)
  • serverTimezone=Asia/Shanghai: 时区设置(MySQL 8.x必需)
  • autoReconnect=true: 自动重连
  • failOverReadOnly=false: 故障转移时是否只读

注意事项

  • ⚠️ 驱动版本: MySQL 8.x需要使用新的驱动类 com.mysql.cj.jdbc.Driver
  • ⚠️ 时区设置: MySQL 8.x需要在URL中设置 serverTimezone 参数
  • ⚠️ 字符编码: 建议使用 utf8mb4 以支持完整的UTF-8字符集
  • ⚠️ SSL连接: 生产环境建议启用SSL,开发环境可以禁用
  • ⚠️ 连接池: 建议配置连接池以提高性能和资源管理
  • ⚠️ SQL注入: 构建SQL时注意防止SQL注入攻击
  • ⚠️ 错误处理: 建议添加try-catch进行错误处理
  • MySQL 8.x与MySQL 5.x的驱动类和URL参数有所不同
  • 建议在数据源配置中设置连接池参数
  • 注意字符编码设置,避免中文乱码问题

使用场景

  • 连接外部MySQL数据库
  • 数据迁移和同步
  • 跨系统数据查询
  • 数据分析和报表
  • 系统集成

如需查看完整脚本代码,请访问源文档链接。