连接MySQL数据库 遍历其中一个表的所有字段

HAMI_1262045143 · 4 天前

回答

Hamibot AI
1
· 4 天前

在 Hamibot 中连接 MySQL 并遍历表字段,需借助 Java 的 JDBC 驱动。由于 Hamibot 基于 Rhino 1.7.15 引擎,代码需遵循兼容语法(避免箭头函数与默认参数)。以下是完整实现方案:

// 文档地址 https://docs.hamibot.com/
// 1. 加载 MySQL JDBC 驱动(需提前将 mysql-connector-java-x.x.x.jar 放入脚本同级目录)
runtime.loadJar(files.path("./mysql-connector-java-8.0.33.jar"));
java.lang.Class.forName("com.mysql.cj.jdbc.Driver");

// 2. 数据库连接参数(建议通过 hamibot.env 配置,此处为示例)
var dbUrl = "jdbc:mysql://127.0.0.1:3306/your_database?useSSL=false&serverTimezone=Asia/Shanghai";
var dbUser = "your_username";
var dbPass = "your_password";
var tableName = "your_table";

var conn = null;
var stmt = null;
var rs = null;

try {
    conn = java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPass);
    stmt = conn.createStatement();
    // 执行查询获取结果集元数据
    rs = stmt.executeQuery("SELECT * FROM " + tableName + " LIMIT 1");
    var metaData = rs.getMetaData();
    var columnCount = metaData.getColumnCount();

    log("表 [" + tableName + "] 共有 " + columnCount + " 个字段:");
    for (var i = 1; i <= columnCount; i++) {
        var colName = metaData.getColumnName(i);
        var colType = metaData.getColumnTypeName(i);
        log("字段 " + i + " | 名称: " + colName + " | 类型: " + colType);
    }
} catch (e) {
    log("数据库操作异常: " + e);
} finally {
    // 安全关闭资源
    try { if (rs) rs.close(); } catch (e) {}
    try { if (stmt) stmt.close(); } catch (e) {}
    try { if (conn) conn.close(); } catch (e) {}
}

关键说明

  1. 驱动准备:Hamibot 不内置 MySQL 驱动。你需要下载 mysql-connector-java-8.x.x.jar,并将其与脚本文件放在同一目录。
  2. 元数据获取:通过 ResultSetMetaData 可直接读取字段名、类型、长度等信息。索引从 1 开始,而非 0
  3. 资源释放:JDBC 连接必须显式关闭。finally 块中的独立 try-catch 可防止某个资源关闭失败导致后续资源泄漏。
  4. 网络权限:Android 9+ 默认限制明文流量。若连接失败,可在 Hamibot 控制台或 AndroidManifest.xml 中启用 usesCleartextTraffic,或改用 jdbc:mysql://... 配合 SSL 配置。

最佳实践建议

  • 配置分离:将数据库地址、账号、密码移至 Hamibot 表单配置中,通过 hamibot.env 读取,避免硬编码。
    var dbUrl = hamibot.env.dbUrl || "jdbc:mysql://...";
    var dbUser = hamibot.env.dbUser || "root";
    var dbPass = hamibot.env.dbPass || "";
    
  • 性能优化:遍历字段仅需元数据,无需拉取全表数据。使用 LIMIT 1SELECT 1 FROM ... 可大幅降低网络与内存开销。
  • 异常处理:生产环境建议记录详细堆栈 log(e.stack),并根据业务需求添加重试机制或告警逻辑。

如需进一步调整查询逻辑或处理特定字段类型映射,可提供具体表结构,我将为你补充对应实现。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实