通过JDBC查询的SQL Server与谷歌Apps脚本(Querying SQL Server w

2019-07-21 17:33发布

我使用的是SQL Server 2008 R2和正尝试使用谷歌Apps脚本进行查询。 我使用的应该填写电子表格中建议的一个脚本,但我有问题,SQL连接。

我检查我指定的端口是正确的,所以我怀疑的问题是,我会很感激确认我的连接字符串是正确的。

下面的代码 -

服务器/实例:1433;的databaseName = XXXX;用户= XXXX;密码= XXXX“);

function foo() {
  var conn = Jdbc.getConnection   ("jdbc:sqlserver/instance:1433;databaseName=xxxx;user=xxxx;password=xxxx");
  var stmt = conn.createStatement();
  stmt.setMaxRows(100);
  var start = new Date();
  var rs = stmt.executeQuery("select top 1000 from SOP10100");

  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var cell = doc.getRange('a1');
  var row = 0;
  while(rs.next()) {
    cell.offset(row, 0).setValue(rs.getString(1));
    cell.offset(row, 1).setValue(rs.getString(2));
    cell.offset(row, 2).setValue(rs.getString(3));
    cell.offset(row, 3).setValue(rs.getString(4));
    row++;
  }
  rs.close();
  stmt.close();
  conn.close();
  var end = new Date();
  Logger.log("time took: " + (end.getTime() - start.getTime()));

谢谢你的帮助!

Answer 1:

我觉得你的连接字符串是稍有畸形。 我相信你需要一个sqlserver://你的服务器名/实例之前。

我没有一个SQL Server实例方便,但我对测试SQL Azure的下面的代码和它的工作好。 我能够从表中称为HelloWorld的选择数据,并将其写入到电子表格。

我把它换成我的凭据的占位符。

function readAzure() {
  var conn = Jdbc.getConnection("jdbc:sqlserver://XYZ.database.windows.net:1433;databaseName=MYDATABSENAME","USERNAME","PASSWORD");
  var stmt = conn.createStatement();
  var rs = stmt.executeQuery("select * from helloworld");

  var doc = SpreadsheetApp.create('azure');
  var cell = doc.getRange('a1');
  var row = 0;
  while(rs.next()) {
    cell.offset(row, 0).setValue(rs.getString(1));
    cell.offset(row, 1).setValue(rs.getString(2));
    row++;
  }
  rs.close();
  stmt.close();
  conn.close();
}


Answer 2:

我在GitHub上的整个项目是一个MySQL和SQL Server的JDBC连接的应用程序。 你可以在这里找到: GitHub的项目 。 我已经发布了下面的相关代码。 将在SQL Server的情况是你实例参数为您的连接,然后下面是连接的其余部分。 为了得到一个完整的工具使用GitHub的项目。

  function readFromTable(queryType, queryDb, query, tab, startCell) {
  // Replace the variables in this block with real values.
  var address;
  var user;
  var userPwd ;
  var dbUrl;

  switch(queryType) {
    case 'sqlserver':
      address = '%YOUR SQL HOSTNAME%';
      user = '%YOUR USE%';
      userPwd = '%YOUR PW%';
      dbUrl = 'jdbc:sqlserver://' + address + ':1433;databaseName=' + queryDb;
      break;
    case 'mysql':  
      address = '%YOUR MYSQL HOSTNAME%';
      user = '%YOUR USER';
      userPwd = '%YOUR PW%';
      dbUrl = 'jdbc:mysql://'+address + '/' + queryDb;
    break;
  }

  var conn = Jdbc.getConnection(dbUrl, user, userPwd);
  var start = new Date();
  var stmt = conn.createStatement();
  var results = stmt.executeQuery(query);
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheetTab = sheet.getSheetByName(tab);
  var cell = sheetTab.getRange(startCell);
  var numCols = results.getMetaData().getColumnCount();
  var numRows = sheetTab.getLastRow();
  var headers ;
  var row =0;

  clearRange(tab,startCell,numRows, numCols);


  for(var i = 1; i <= numCols; i++){
    headers = results.getMetaData().getColumnName(i);
      cell.offset(row, i-1).setValue(headers);
      }

  while (results.next()) {
    var rowString = '';
    for (var col = 0; col < numCols; col++) {
      rowString += results.getString(col + 1) + '\t';
      cell.offset(row +1, col).setValue(results.getString(col +1 ));
    }
    row++
    Logger.log(rowString)
  }

  results.close();
  stmt.close();

  var end = new Date();
  Logger.log('Time elapsed: %sms', end - start);
}


Answer 3:

我已经破解了:)......至少对于我们的SQL Server和谷歌电子表格!

感谢所有帮助。 我一直在阅读这里的一些问题,现在我想与大家分享你帮什么我建立。 我已经建立,可以采取一个SQL查询和输出结果以电子表格的函数中。

为了让电子表格上的数据,你需要打开一个电子表格谷歌去“工具”>“<>脚本编辑器”。 那么过去的代码波纹管与说明,并包括“/ **** ......”。 接下来,您将在代码更新这些位

var address = 'yourServerUrl:yourPortNumber';
var user = 'yourUserName';
var userPwd = 'yourPassword';
var db = 'yourDatabaseName';

然后,你需要保存并返回到电子表格,并进入

=SQLTOGOOGLOOGLESPREADSHEET("yourSqlQuery")

到电子表格单元格

/***********************

@CUSTOMFUNCTION

*/

function SQLTOGOOGLOOGLESPREADSHEET(sqlQuery) {
    var address = 'yourServerUrl:yourPortNumber';
    var user = 'yourUserName';
    var userPwd = 'yourPassword';
    var db = 'yourDatabaseName';
    var msSqlUrlSyntax ='jdbc:sqlserver://'

    var dbUrl = msSqlUrlSyntax + address + ';databaseName=' + db;

    // msSqlUrlSyntax = 'youOptionalTestingQuery'
    var conn = Jdbc.getConnection(dbUrl, user, userPwd);

    var start = new Date();
    var stmt = conn.createStatement();
    stmt.setMaxRows(1000);

    var results = stmt.executeQuery(sqlQuery);
    var numCols = results.getMetaData().getColumnCount();
    var numRows = results.getFetchSize()
    Logger.log(numRows)
    var dataArray = [];

    while (results.next()) {
        var rowString = [];   
        rowString = [];

        for (var col = 0; col < numCols; col++)     
        {
            rowString.push(results.getString(col + 1))
        }

        dataArray[dataArray.length]=rowString;
    }

    Logger.log("dataArray =" + dataArray)
    return dataArray

    results.close();
    stmt.close();

    var end = new Date();
    Logger.log('Time elapsed: %sms', end - start);
}


文章来源: Querying SQL Server with Google Apps Script via JDBC