0

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

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()

在谷歌搜索之后,我无法理解我应该在代码中的何处以及如何实现这一行。

4

2 回答 2

0

要调用一个过程,您需要使用CallableStatement

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

请注意,传递值类似于PreparedStatement

于 2016-01-26T14:16:51.373 回答
0

我建议你谷歌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();
于 2016-01-26T14:17:10.043 回答