មូលដ្ឋាន​ទិន្នន័យ​​ក្រៅ​ប្រព័ន្ធ


ទន្ទឹម​នឹង​ការប្រើប្រាស់​កម្មវិធី​ Google Sheets ជា​មូលដ្ឋាន​ទិន្នន័យ​​សំរាប់​កម្មវិធី Google App Script ទាំងឡាយ​ យើង​ក៏​អាច​ប្រើប្រាស់​កម្មវិធី Google App Script នេះ​ដើម្បី​ភ្ជាប់សេវា​ទៅ​នឹង​មូលដ្ឋានទិន្នន័យ​នៅ​ក្រៅ​ប្រព័ន្ធ​មួយ​ចំនួន​ទៀត​​​បាន​ដែរ អោយ​តែ​មូលដ្ឋាន​​ទិន្នន័យ​​នៅ​ក្រៅ​ប្រព័ន្ធ​ទាំងនោះ​មាន​​ប្រភេទ​ជា Google Cloud SQL, MySQL, Microsoft SQL, ឬ Oracle ។

នៅ​ក្នុង​ការត​ភ្ជាប់​ទៅ​នឹង​មូលដ្ឋាន​ទិន្នន័យ​ទាំងនោះ​ ប្រព័ន្ធ Google App Script បាន​​បង្កើត​​របៀប​ត​​ភ្ជាប់​តាម​បែប​​ «JDBC» ដូច​ដែល​មាន​​នៅ​ក្នុង​កម្មវិធី​ជា​ភាសា Java ទាំងឡាយ​ដែរ​​។

ជាក់ស្តែង ដើម្បីត​ភ្ជាប់​ទៅ​នឹង​មូ​លដ្ឋាន​ទិន្នន័យ​នៅ​ក្រៅ​ប្រព័ន្ធ​មានប្រភេទ​ជា Google Cloud SQL យើង​ត្រូវ​ប្រើ​ប្រាស់​ក្បួន​មានឈ្មោះ​ថា «Jdbc.getCloudSqlConnection» ។ ហើយ​ដើម្បី​ត​ភ្ជាប់​ទៅ​នឹង​មូលដ្ឋាន​ទិន្នន័យ​មាន​ប្រភេទ​ជា MySQL, Microsoft SQL, ឬ Oracle យើង​ត្រូវ​ប្រើប្រាស់​ក្បួន​មាន​ឈ្មោះ​ថា «Jdbc.getConnection» ។

បន្ទាប់​មក​ទៀត បើ​សិន​ជា​យើង​មិន​ទាន់​មាន​មូលដ្ឋាន​ទិន្នន័យ​នៅ​ក្រៅ​ប្រព័ន្ធ​ណា​មួយ​ទេនោះ យើង​អាច​បង្កើត​មូលដ្ឋាន​ទិន្នន័យ​ប្រភេទ MySQL មួយ​បាន​ នៅ​លើ​ server ដែល​មាន​អាស័យដ្ឋាន​ជា freesqldatabase.com។ ក្រោយ​ពី​បង្កើត​គណនី​មួយ​សំរាប់​មូលដ្ឋាន​ទិន្ន័យ MySQL មួយ​រួច​ហើយ server នោះនឹងផ្ញើរ​សារ​ទៅ​កាន់​អ៊ីមែល​​​របស់​យើង បញ្ជាក់​ប្រាប់ពី​ឈ្មោះ​អ្នកប្រើប្រាស់​របស់​យើង (username) ពាក្យ​សំងាត់ (password) ឈ្មោះ​របស់​មូលដ្ឋាន​ទិន្នន័យ (database name) អាស័យដ្ឋាន​សំរាប់​តភ្ជាប់ទៅ​នឹងមូលដ្ឋានទិន្នន័យ (database url) និង​ច្រក​ចូល​ទៅ​កាន់​មូលដ្ឋាន​ទិន្ន​ន័យ (port) ។

ក៏ប៉ុន្តែ មុន​នឹងអាច​ប្រើប្រាស់​មូលដ្ឋាន​ទិន្នន័យ​នោះ​​សំរាប់​រក្សា​ទុក​​នូវ​ទិន្នន័យ​ផ្សេង​ៗ​ជា​ភាសា​ខ្មែរយើង​​បាន យើង​ចាំបាច់​ត្រូវ​ធ្វើការកែកុន​មួយ​ជា​មុន​សិន ដោយចូល​ទៅ​កាន់​ទំព័រ «phpMyAdmin» របស់​ server freesqldatabase.com តាម​រយៈ​អាស័យដ្ឋាននេះ phpmyadmin.co/index.php ។ នៅ​ពេល​ដែល​យើង​ចូល​ដល់​ទំព័រ​នោះហើយ យើង​ត្រូវ​សរសេរ​នៅ​លើ​​ console របស់​ទំព័រ​ phpMyAdmin នោះ​ដូចខាង​ក្រោម​នេះ រួច​ចុច Ctrl+Enter គឺជា​ការស្រេច​​ យើង​នឹងអាច​​ប្រើប្រាស់​ទិន្នន័យ​ជា​ភាសាខ្មែរយើង​​បា​នគ្រប់ពេល​វេលា​នៅ​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ​របស់​យើង​នោះ​។



ហើយ​ដើម្បី​ភ្ជាប់​ទៅ​នឹង​មូលដ្ឋាន​ទិន្នន័យ​នៅ​ក្រៅ​ប្រព័ន្ធ​​ដែល​​មាន​ប្រភេទ​ជា MySQL នោះ យើង​ត្រូវ​ធ្វើដូច​ខាង​ក្រោម​នេះ៖

var connectionName = 'sql12.freesqldatabase.com';
var port = '3306';
var user = 'USERNAME';
var userPwd = 'PASSWORD';
var database = 'sql12286644';

var instanceUrl = 'jdbc:mysql://'+connectionName+':'+port;
var font = '?useUnicode=yes&characterEncoding=UTF-8';
var dbUrl = instanceUrl+'/'+database+font;

//ភ្ជាប់​សេវា​ទៅ​​កាន់​មូលដ្ឋាន​ទិន្នន័យ​នៅ​ក្រៅ​ប្រព័ន្ធ
var conn = Jdbc.getConnection(dbUrl, user, userPwd);

នៅលើ​បន្ទាត់​លេខ 12 ការសរសេរ​ថា var conn = Jdbc.getConnection(dbUrl, user, userPwd) គឺ​ជា​ការ​យក​ក្បួន​ឈ្មោះ «getConnection» មក​ប្រើ​ដើម្បី​ភ្ជាប់​សេវា​ទៅ​នឹង​មូលដ្ឋាន​ទិន្នន័យ​នៅ​លើ server ដែល​មាន​អាស័យដ្ឋាន​ជា dbUrl ឈ្មោះ​អ្នក​ប្រើប្រាស់​ជា user និង ពាក្យ​សំងាត់​សំរាប់​ចូល​ទៅ​កាន់​​មូលដ្ឋាន​ទិន្នន័យ​​ជា userPwd ។

មួយវិញទៀត ដើម្បី​បញ្ជូល​ទិន្នន័យ​ទៅ​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ​នៅ​ក្រៅ​ប្រព័ន្ធនោះ ជា​ដំបូង​ឡើយ​យើង​ត្រូវ​បង្កើត​តារាង​មួយ​សិន ដោយ​​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖
var connectionName = 'sql12.freesqldatabase.com';
var port = '3306';
var user = 'USERNAME';
var userPwd = 'PASSWORD';
var database = 'sql12286644';

var instanceUrl = 'jdbc:mysql://'+connectionName+':'+port;
var font = '?useUnicode=yes&characterEncoding=UTF-8';
var dbUrl = instanceUrl+'/'+database+font;

var conn = Jdbc.getConnection(dbUrl, user, userPwd);

function createTable(){
  //បង្កើត​តារាង​មួយ​ឈ្មោះ Classroom
  conn.createStatement().execute('CREATE TABLE Classroom '
    + '(ឈ្មោះ VARCHAR(255), '
    + 'អាយុ VARCHAR(255), '
    + 'ភេទ VARCHAR(255), '
    + 'ទីលំនៅ VARCHAR(255), '
    + 'Facebook_ID VARCHAR(255));');
}



ចាប់ពី​បន្ទាត់​លេខ 15 រហូត​ដល់​លេខ 20 គឺ​ជា​បញ្ជា​​តំរូវ​អោយ​បង្កើត​តារាង​មួយ​មាន​ឈ្មោះថា «Classroom» នៅ​ក្នុង​មូលដ្ឋានទិន្នន័យ​ MySQL នៅ​ក្រៅ​ប្រព័ន្ធ​មួយ​។ តារាង​នោះ​​មាន ​ក្រឡាឈរ (column) ចំនួន ៥ និង ​ក្រឡាដេក (row) ចំនួន 1 ហើយ​​ក្រឡា​ទាំងពីរ​នោះ​កាត់ខ្វែង​គ្នា​បង្កើត​បានជា​តូចៗ​ (cell) ចំនួន 5 ដែល​នៅ​ក្នុង​នោះ​មាន​ទិន្នន័យ​ដែល​ជា​ពាក្យ​ថា «ឈ្មោះ» «អាយុ» «ភេទ» «ទីលំនៅ» និង «Facebook_ID» រៀង​គ្នា​។

បន្ទាប់​មកទៀត ដើម្បី​បញ្ជូល​ទិន្នន័​មួយ​ចំនួន​ចូល​ទៅ​ក្នុង​តារាង​នោះ យើង​ត្រូវ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖

var connectionName = 'sql12.freesqldatabase.com';
var port = '3306';
var user = 'USERNAME';
var userPwd = 'PASSWORD';
var database = 'sql12286644';

var instanceUrl = 'jdbc:mysql://'+connectionName+':'+port;
var font = '?useUnicode=yes&characterEncoding=UTF-8';
var dbUrl = instanceUrl+'/'+database+font;

var conn = Jdbc.getConnection(dbUrl, user, userPwd);

function writeToTable(){
   //បញ្ចូល​​ទិន្នន័យ​មួយ​ចំនួន​នៅ​ក្នុង​តារាង​ឈ្មោះ Classroom
   var stmt = conn.prepareStatement('INSERT INTO Classroom '
      + '(ឈ្មោះ, អាយុ, ភេទ, ទីលំនៅ, Facebook_ID) values (?, ?, ?, ?, ?)');
  stmt.executeQuery("SET NAMES 'UTF8'");
  stmt.executeQuery("SET CHARACTER SET 'UTF8'");
  
  stmt.setString(1, "តាន់ វិច្ឋិកា");
  stmt.setString(2, '២៤');
  stmt.setString(3, 'ស្រី');
  stmt.setString(4, 'ភ្នំពេញ');
  stmt.setString(5, '100010725609098');
  stmt.addBatch();
  
  stmt.setString(1, "កែវ ចិត្រា");
  stmt.setString(2, '២៥');
  stmt.setString(3, 'ប្រុសី');
  stmt.setString(4, 'កំពត');
  stmt.setString(5, '100010725609589');
  stmt.addBatch();
  
  stmt.setString(1, "ពិន សុវណ្ណ");
  stmt.setString(2, '២៧');
  stmt.setString(3, 'ប្រុស');
  stmt.setString(4, 'តាកែវ');
  stmt.setString(5, '528744436942158');
  stmt.addBatch();
  
  stmt.setString(1, "សុខ សុភា");
  stmt.setString(2, '២៣');
  stmt.setString(3, 'ស្រី');
  stmt.setString(4, 'ភ្នំពេញ');
  stmt.setString(5, '564651316448853');
  stmt.addBatch();
  
  stmt.executeBatch();
  conn.close();
}



នៅ​លើ​បន្ទាត់លេខ 13 ការសរសេរ​ថា function writeToTable() គឺ​ជាការបង្កើតក្បួនមួយ​ ដែល​​នៅ​ក្នុង​នោះ​មាន​បញ្ជា​មួយ​ចំនួន​សំរាប់​បញ្ចូល​ទិន្នន័យ​មួយ​ចំនួន​ចូលទៅ​ក្នុង​តារាង​ឈ្មោះ «Classromm» នៅ​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ MySQL ក្រៅ​ប្រព័ន្ធ​មួយ​។

លើស​ពី​នេះ​ទៀត ដើម្បីចំលង​យកទិន្នន័យ​ទាំងនោះ​មក​ប្រើការ យើង​ត្រូវ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖

var connectionName = 'sql12.freesqldatabase.com';
var port = '3306';
var user = 'USERNAME';
var userPwd = 'PASSWORD';
var database = 'sql12286644';

var instanceUrl = 'jdbc:mysql://'+connectionName+':'+port;
var font = '?useUnicode=yes&characterEncoding=UTF-8';
var dbUrl = instanceUrl+'/'+database+font;

var conn = Jdbc.getConnection(dbUrl, user, userPwd);

function readFromTable(){ 
  var stmt = conn.createStatement();
  stmt.setMaxRows(1000);
  var results = stmt.executeQuery('SELECT * FROM Classroom');
  var numCols = results.getMetaData().getColumnCount();

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

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



នៅ​លើបន្ទាត់​លេខ 16 ការសរសរថា var results = stmt.executeQuery('SELECT * FROM Classroom') គឺ​ជា​បញ្ជា​តំរូវ​អោយ​ចំលង​យក​ទិន្នន័យ​ទាំងអស់​ដែលមាន​នៅ​ក្នុង​តារាង​ឈ្មោះ «Classroom» មក​ប្រើការ​តាម​សេចក្តីត្រូវ​ការ​។

នៅ​លើបន្ទាត់​លេខ 24 ការសរសេរ​ថា Logger.log(rowString) គឺ​ជា​បញ្ជា​តំរូវ​អោយ​សរសេរ​បង្ហញ​​ទិន្នន័យ​ទាំងនោះ​នៅលើ​បង្អួច View > Logs នៅ​ក្នុង​ប្រព័ន្ធ Google App Script ៕