Google AppScript Jdbc 函数
Google AppScript Jdbc Function
我在一个简单的 App 脚本项目中有一个函数可以从 MySQL table 中读取数据。我一直在使用 Google Sheet 作为存储,但正在进行一些更新。我的 SQL 对我来说是新的。此处的代码有效,因为它基于 Googles 文档中的代码示例。
我遇到的问题是它以逗号分隔的各个列列表的形式给出了答案:
number , email , date , number , email , date , ...etc
如果可以的话,但我更喜欢它作为一个对象,其中每一行的列都像这样分组在一起:
name email date , name email date , ...etc
我相信你可以像这样输出一个对象,但每次尝试时我都会 运行 进入新的领域。
[
{
name: name
email: email
date: date
}
]
这是我正在使用的函数。
function readFromTable() {
var conn = Jdbc.getConnection(dburl, user, userPwd);
//var start = new Date();
var stmt = conn.createStatement();
stmt.setMaxRows(1000);
var results = stmt.executeQuery("SELECT proj_num, user, date FROM rams_sign WHERE user = '"+ email +"'")
var numCols = results.getMetaData().getColumnCount();
var userRams = '';
while (results.next()) {
for (var col = 0; col < numCols; col++) {
userRams += results.getString(col + 1) + ',';
}
Logger.log(userRams);
}
return userRams
};
我查看了文档,我知道可以做到,但我不知道如何做。我真的只想被推向正确的方向,在此先感谢您的任何建议
不确定我是否理解您的输入和输出。以及您的 'number' 如何变成 'name' 等。您如何知道一列有多少行?
只是猜测。也许你想要这样的东西:
var s = 'number , email , date , number , email , date';
var rows = 3; // just a guess
var arr = s.split(' , ');
var result = [];
for (var a = 0; a < arr.length; a += rows) {
var object = {};
for (var r = 0; r < rows; r++) {
object[arr[r+a]] = arr[r+a];
}
result.push(object)
}
console.log(result);
// Output:
// [
// { number: 'number', email: 'email', date: 'date' },
// { number: 'number', email: 'email', date: 'date' }
// ]
它拆分输入字符串(您有字符串作为输入吗?)并将其重新打包到对象数组中。
或者,大概应该是这样的:
var s = 'number1 , email1 , date1 , number2 , email2 , date2';
var rows = 3;
var arr = s.split(' , ');
var result = [];
for (var a = 0; a < arr.length; a += rows) {
var object = {};
object.number = arr[a];
object.email = arr[a+1];
object.date = arr[a+2];
result.push(object)
}
console.log(result);
使用 array.shift()
方法的第二种算法的简短变体:
var s = 'number1 , email1 , date1 , number2 , email2 , date2';
var arr = s.split(' , ');
var result = [];
while (arr.length)
result.push({number: arr.shift(), email: arr.shift(), date: arr.shift()})
console.log(result);
我在一个简单的 App 脚本项目中有一个函数可以从 MySQL table 中读取数据。我一直在使用 Google Sheet 作为存储,但正在进行一些更新。我的 SQL 对我来说是新的。此处的代码有效,因为它基于 Googles 文档中的代码示例。
我遇到的问题是它以逗号分隔的各个列列表的形式给出了答案:
number , email , date , number , email , date , ...etc
如果可以的话,但我更喜欢它作为一个对象,其中每一行的列都像这样分组在一起:
name email date , name email date , ...etc
我相信你可以像这样输出一个对象,但每次尝试时我都会 运行 进入新的领域。
[
{
name: name
email: email
date: date
}
]
这是我正在使用的函数。
function readFromTable() {
var conn = Jdbc.getConnection(dburl, user, userPwd);
//var start = new Date();
var stmt = conn.createStatement();
stmt.setMaxRows(1000);
var results = stmt.executeQuery("SELECT proj_num, user, date FROM rams_sign WHERE user = '"+ email +"'")
var numCols = results.getMetaData().getColumnCount();
var userRams = '';
while (results.next()) {
for (var col = 0; col < numCols; col++) {
userRams += results.getString(col + 1) + ',';
}
Logger.log(userRams);
}
return userRams
};
我查看了文档,我知道可以做到,但我不知道如何做。我真的只想被推向正确的方向,在此先感谢您的任何建议
不确定我是否理解您的输入和输出。以及您的 'number' 如何变成 'name' 等。您如何知道一列有多少行?
只是猜测。也许你想要这样的东西:
var s = 'number , email , date , number , email , date';
var rows = 3; // just a guess
var arr = s.split(' , ');
var result = [];
for (var a = 0; a < arr.length; a += rows) {
var object = {};
for (var r = 0; r < rows; r++) {
object[arr[r+a]] = arr[r+a];
}
result.push(object)
}
console.log(result);
// Output:
// [
// { number: 'number', email: 'email', date: 'date' },
// { number: 'number', email: 'email', date: 'date' }
// ]
它拆分输入字符串(您有字符串作为输入吗?)并将其重新打包到对象数组中。
或者,大概应该是这样的:
var s = 'number1 , email1 , date1 , number2 , email2 , date2';
var rows = 3;
var arr = s.split(' , ');
var result = [];
for (var a = 0; a < arr.length; a += rows) {
var object = {};
object.number = arr[a];
object.email = arr[a+1];
object.date = arr[a+2];
result.push(object)
}
console.log(result);
使用 array.shift()
方法的第二种算法的简短变体:
var s = 'number1 , email1 , date1 , number2 , email2 , date2';
var arr = s.split(' , ');
var result = [];
while (arr.length)
result.push({number: arr.shift(), email: arr.shift(), date: arr.shift()})
console.log(result);