AppsScript - 스프레드시트로 DB 컨트롤

정태경·2022년 1월 15일
0

스프레드시트로 디비 접속 -> 쿼리 실행 -> 데이터 업데이트 할 때 사용했던 코드

var ipaddress = '0.0.0.0';
var port = 20001;
var dbName = 'dbname';
var username = 'username';
var password = 'password';
var url = 'jdbc:mysql://' + ipaddress + ':' + port + '/' + dbName;

function readData() {
  var conn = Jdbc.getConnection(url, username, password);
  var stmt = conn.createStatement();

  var spreadsheet = SpreadsheetApp.getActive();
  var sheet_Query = spreadsheet.getSheetByName('Query'); //쿼리 시트
  var sheet_results = spreadsheet.getSheetByName('Results'); //결과 시트 

  var query_arr = [];
  for (var i = 0; i < sheet_Query.getLastRow(); i++) {
    query_arr.push(sheet_Query.getRange(i + 1, 1).getValue());
  }

  for (var i = 0; i < query_arr.length; i++) {
    var results = stmt.executeQuery(query_arr[i]); //쿼리 실행 결과
    var metaData = results.getMetaData();
    var numCols = metaData.getColumnCount(); //쿼리 실행 결과의 열 크기 

    // sheet_results.clearContents(); //시트 데이터 삭제
    var arr = []; // 빈 배열 생성

    for (var col = 0; col < numCols; col++) {
      arr.push(metaData.getColumnName(col + 1)); //arr 배열에 DB 컬럼 이름 담기
    }
    sheet_results.appendRow(arr); //시트의 데이터가 있는 마지막 행 밑에 arr 배열에 담긴 데이터 넣음.
    while (results.next()) { //쿼리 결과의 다음 열이 있으면 아래 코드 실행
      arr = [];
      for (var col = 0; col < numCols; col++) {
        arr.push(results.getString(col + 1));
      }
      sheet_results.appendRow(arr);
    }
  }

  results.close();
  stmt.close();
  sheet_results.autoResizeColumns(1, numCols + 1); // 데이터에 따라 열 자동 넓히기
}
profile
現 두나무 업비트 QA 엔지니어, 前 마이리얼트립 TQA 엔지니어

0개의 댓글