2015-11-07 59 views
1

我想用在谷歌Apps腳本這個簡單的代碼讀取MySQL數據庫記錄:谷歌Apps腳本,JDBC和MySQL不工作日期0000-00-00

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)); 
    } 
} 

因爲date_available是「 0000-00-00" ,這個代碼拋出錯誤

值 '0000-00-00' 不能被表示爲

如所建議的here我試圖使用URL連接與參數

?zeroDateTimeBehavior=convertToNull 

但是,這也引發了錯誤

以下連接屬性不支持:zeroDateTimeBehavior。

我錯過了什麼?這是谷歌的錯誤嗎?爲什麼此連接屬性不受支持?除了更改SQL查詢之外是否還有任何解決方法?

回答

0

不幸的是,不能不改變SQL。但作爲參考,這是改變SQL的方式:我已經使用了這個建議:How to convert timestamp to datetime in MySQL?。並在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`")