回答
在 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) {}
}
关键说明
- 驱动准备:Hamibot 不内置 MySQL 驱动。你需要下载
mysql-connector-java-8.x.x.jar,并将其与脚本文件放在同一目录。 - 元数据获取:通过
ResultSetMetaData可直接读取字段名、类型、长度等信息。索引从1开始,而非0。 - 资源释放:JDBC 连接必须显式关闭。
finally块中的独立try-catch可防止某个资源关闭失败导致后续资源泄漏。 - 网络权限: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 1或SELECT 1 FROM ...可大幅降低网络与内存开销。 - 异常处理:生产环境建议记录详细堆栈
log(e.stack),并根据业务需求添加重试机制或告警逻辑。
如需进一步调整查询逻辑或处理特定字段类型映射,可提供具体表结构,我将为你补充对应实现。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实