JDBC - MySQL 调用存储过程

JDBC - MySQL Calling Stored Procedure

本文关键字:存储过程 调用 MySQL JDBC      更新时间:2023-09-26

我正在使用以下代码连接到数据库:

var ServerIP = '[ip]'; 
var SQL_Port = '3306';
var SQL_Usr = '[user]';
var SQL_Pwd = '[pass]';
var SQL_DB = '[db-name]';
var connectorInstance = 'jdbc:mysql://' + ServerIP+':'+SQL_Port;
var ConnectString = connectorInstance+'/'+SQL_DB;
var conn = Jdbc.getConnection(ConnectString, SQL_Usr, SQL_Pwd);
//Executes the queries
var execStmt = conn.createStatement();
var doc = SpreadsheetApp.getActiveSpreadsheet();
doc.setActiveSheet(doc.getSheetByName('Sheet1'));
var mysqlQuery = execStmt.executeQuery("select Name, Status From data_table ORDER BY Name");
var cell = doc.getRange('A2');
var row = 0;
while(mysqlQuery.next()) {
for(var i=0; i<8; i++) { 
cell.offset(row, i).setValue(mysqlQuery.getString(i+1));
}
row++;
}
mysqlQuery.close();
execStmt.close();
conn.close();

我需要使用以下存储过程:

call procedure_name()

谷歌搜索了一遍之后,我不明白我应该在代码中的什么位置以及如何实现这一行。

调用过程 您需要使用CallableStatement

String aString = ...
int aNumber = ...
CallableStatement cs = conn.prepareCall("{call procedure_name(?, ?)}");  
cs.setString(1, aString); 
cs.setInt(2, aNumber);
cs.executeUpdate();

请注意,传递值类似于PreparedStatement

我建议你谷歌JDBC CallableStatement.

例如,本文有一个完整的示例。在您的情况下,请尝试以下操作:

CallableStatement cstmt = null;
try {
   String SQL = "{call procedure_name()}";
   cstmt = conn.prepareCall (SQL);
   conn.executeUpdate();
}
catch (SQLException e) {
   //
}
finally {
   cstmt.close();
}

但请注意,你的代码不是java,所以你必须完全重写它。


编辑:

Google Script似乎依赖于Java实现。所以它应该以同样的方式工作。

尝试:

var conn = Jdbc.getConnection(ConnectString, SQL_Usr, SQL_Pwd);
var callableStmt = conn.prepareCall("call stored_procedure_name()");
callableStmt.execute();
callableStmt.close();
conn.close();