Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google应用程序脚本、JDBC和MySQL不适用于日期0000-00-00_Mysql_Date_Datetime_Jdbc_Google Apps Script - Fatal编程技术网

Google应用程序脚本、JDBC和MySQL不适用于日期0000-00-00

Google应用程序脚本、JDBC和MySQL不适用于日期0000-00-00,mysql,date,datetime,jdbc,google-apps-script,Mysql,Date,Datetime,Jdbc,Google Apps Script,我试图在Google Apps脚本中使用以下简单代码读取MySQL db记录: function testConn(){ // make the connection var connection = Jdbc.getConnection("jdbc:mysql://" + DB.URL + ":" + DB.PORT + "/" + DB.DATABASE, DB.USERNAME, DB.PASSWORD); // perform the query var SQLsta

我试图在Google Apps脚本中使用以下简单代码读取MySQL db记录:

function testConn(){

  // make the connection
  var connection = Jdbc.getConnection("jdbc:mysql://" + DB.URL + ":" + DB.PORT + "/" + DB.DATABASE, DB.USERNAME, DB.PASSWORD);

  // perform the query
  var SQLstatement = connection.createStatement();
  var result = SQLstatement.executeQuery("SELECT date_available FROM oc_product where model = 'B23-U57-U57'");
  var colNum = result.getMetaData().getColumnCount();

  while(result.next()) {
    var res = {};
    for (var i=1; i<= colNum; i++) {
      var label = result.getMetaData().getColumnLabel(i);
      if (result.getMetaData().getColumnTypeName(i) == "DATE") {
        var val = result.getDate(i);
      } else {
        var val = result.getString(i);
      }
      res[label] = (val);
    }    
    Logger.log(JSON.stringify(res, null, 4));
  }
}
但这也带来了一个错误

不支持以下连接属性:zeroDateTimeBehavior


我错过了什么?这是谷歌的bug吗?为什么不支持此连接属性?除了修改SQL查询之外,还有其他解决办法吗?

不幸的是,如果不修改SQL,就没有其他办法。但作为参考,这是更改SQL的方法:

我使用了以下建议:。并使用MySql中的
FROM_UNIXTIME()
函数。唯一的倒退是0000-00-00日期将作为
1970-01-01 00:00:00.0导入电子表格,但对我而言,这目前不是问题

例如:

var rs = stmt.executeQuery("SELECT `Subscriptions`.`SubscriptionId`,
  `Subscriptions`.`ItemId`, `Subscriptions`.`AccountId`,
  `Subscriptions`.`ContactId`,
  from_unixtime( unix_timestamp(TIMESTAMP( `Subscriptions`.`DateStart` ) ) ),
  from_unixtime( unix_timestamp(TIMESTAMP( `Subscriptions`.`DateEnd` ) ) ),
  `Subscriptions`.`AutoRenewal`,`Subscriptions`.`Invoice` from `Subscriptions`")

我通过两次传递日期来解决这个问题,一次转换为秒,然后是实际的日期值:

"SELECT TO_SECONDS(date_available), date_available FROM oc_product where model = 'B23-U57-U57'"
接下来,检查零日期,不将其包括在结果流程中:

var val;
var da = results.getDouble(1);  
if(da === 0) val = null;
else var = new Date(results.getString(2)); 
var val;
var da = results.getDouble(1);  
if(da === 0) val = null;
else var = new Date(results.getString(2));