使用Google App Script更新数据库行失败排查求助
问题描述
尝试编写Google App Script代码更新数据库行,代码执行无报错,但数据库内的行未更新,相关代码如下:
var Database_Host = 'xxx.com' var Database_Name = 'DB' var Database_username = 'DB' var Database_password = 'Password' var Port_number = '306' //DB details are hidden function DB_Update(){ var url = 'jdbc:mysql://' + Database_Host + ':' + Port_number + '/' + Database_Name Logger.log(url) var conn = Jdbc.getConnection(url, Database_username, Database_password); Logger.log(conn); conn.setAutoCommit(false); var stmt = conn.createStatement(); var results = stmt.executeUpdate('update time set flag = 0 where id in (13671)'); stmt.executeUpdate(results); conn.commit(); conn.setAutoCommit(true); stmt.close(); conn.close(); }
问题排查与修复
核心错误:重复执行
executeUpdatestmt.executeUpdate()执行后返回的是受影响的行数(数字类型),你又把这个数字传给stmt.executeUpdate(results),相当于让JDBC执行一个数字作为SQL语句,这是无效操作,直接破坏了原本的更新逻辑,导致实际更新未生效。修复后的代码
var Database_Host = 'xxx.com' var Database_Name = 'DB' var Database_username = 'DB' var Database_password = 'Password' var Port_number = '306' //DB details are hidden function DB_Update(){ var url = 'jdbc:mysql://' + Database_Host + ':' + Port_number + '/' + Database_Name Logger.log(url) var conn = Jdbc.getConnection(url, Database_username, Database_password); Logger.log(conn); conn.setAutoCommit(false); var stmt = conn.createStatement(); // 仅执行一次更新语句,获取受影响行数用于排查 var affectedRows = stmt.executeUpdate('update time set flag = 0 where id in (13671)'); Logger.log('受影响行数:' + affectedRows); // 通过日志确认是否有行被匹配更新 conn.commit(); conn.setAutoCommit(true); stmt.close(); conn.close(); }
- 额外排查点
- 端口号验证:MySQL默认端口为3306,确认你填写的
306是否为数据库实际使用端口 - 数据存在性检查:执行
select * from time where id=13671,确认目标行是否存在 - 用户权限确认:确保当前数据库用户拥有
time表的UPDATE权限 - 日志分析:查看
affectedRows的值,若返回0说明WHERE条件未匹配到任何行,需检查条件是否正确
- 端口号验证:MySQL默认端口为3306,确认你填写的
内容的提问来源于stack exchange,提问作者Siva
相关产品推荐
相关产品推荐

