【问题标题】:JDBC - MySQL Calling Stored ProcedureJDBC - MySQL 调用存储过程
【发布时间】:2016-05-03 03:04:21
【问题描述】:

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

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

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

【问题讨论】:

  • 真的是java吗???
  • 维基百科是这么说的……“Java 数据库连接 (JDBC) 是 Java 编程语言的应用程序编程接口 (API)”
  • 是的,但你的代码看起来像 java 脚本
  • 好的,将标签改为javascript
  • 你是在JVM上运行这个javascript,否则你没有JDBC。

标签: javascript mysql stored-procedures jdbc callable-statement


【解决方案1】:

我建议你谷歌JDBC CallableStatement

这个article 例如有一个完整的例子。在您的情况下,请尝试以下操作:

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

【讨论】:

  • 你的代码不是java,所以你不能把它放在你的确切代码中。另外,你的程序真的是procedure_name吗?
  • 不,这只是举例。你能提供一个答案,让我把它放在我的确切代码中吗?
  • 我现在才看到。我只能在 Google 电子表格中使用 javascript。是否可以将较短的代码转换为 javascript,而不是将我的整个原始代码转换为 Java?
  • 我尝试插入第二个变体TypeError: Cannot call method "prepareCall" of undefined. 第一个也不起作用...
  • 这个错误意味着你的conn 为空。你把代码放在哪里了?你先打开连接了吗?
【解决方案2】:

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

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

注意传递值类似于PreparedStatement

【讨论】:

  • 将 procedure_name 替换为您的过程名称,替换 ?, ?使用正确数量的参数,如果存在设置参数,则调用executeUpdate
  • 我不知道参数的数量,这个调用应该只是暴露数据库中另一种类型的行,目前没有得到输出。而且我不明白在我当前的代码中应该将这个 sn-p 粘贴到哪里?
猜你喜欢
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
相关资源
最近更新 更多