質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

634閲覧

GASをでJDBCを使ったSQL(日付0000-00-00)の読み込み

m.t.m

総合スコア14

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2022/09/06 07:51

前提

GASを使用しGCPのMySQLからデータをスプレッドシートに張り付けてるスクリプトを作成中です
しかし読み込みに使用しているJDBCの仕様で0000-00-00を読み込もうとするとエラーになってしまいます
調べたところ接続URLに zeroDateTimeBehavior=convertToNull を付加することで回避できるらしいのですが、どこに付加すればいいか分からず困っています

実現したいこと

接続URLに zeroDateTimeBehavior=convertToNull を付加し、0000-00-00を含むデータをMySQLから読み込む

発生している問題・エラーメッセージ

javaでは0000-00-00を受け付けずエラーになってしまう

Exception: Value '0000-00-00' can not be represented as java.sql.Date

該当のソースコード

GAS

1/* Cloud SQL接続情報 */ 2var connectionName = 'XXXXXXXXXXXXXXXXX'; 3var user = 'XXXXX'; 4var userPwd = 'XXXXXXXXX'; 5var db = 'XXXXXXXDB'; 6var ip = 'XX.XXX.XX.XX' 7var dbUrl = 'jdbc:mysql://' + ip + '/' + db; 8 9function readRecords() { 10 11 /* JDBCを使って1000件取得 */ 12 var conn = Jdbc.getConnection(dbUrl, user, userPwd); 13 var stmt = conn.createStatement(); 14 stmt.setMaxRows(1000); 15 var results = stmt.executeQuery(createQuery()); 16 var numCols = results.getMetaData().getColumnCount();

試したこと

’dbUrl’に’zeroDateTimeBehavior=convertToNull’を追加
getConnection(url, info)を使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

調べたところ接続URLに zeroDateTimeBehavior=convertToNull を付加することで回避できるらしいのですが

接続「URL」なので、クエリストリングでわたすようですが。

投稿2022/09/06 08:01

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.t.m

2022/09/07 01:16

回答ありがとうございます 追加すればいいのはわかるのですが、その方法が分からないです var conn = Jdbc.getConnection(dbUrl, user, userPwd); の部分で接続URLを作成していると思うのですが、どのようにすればzeroDate~を追加できるのかわからず困っています すみません質問もよくなかったです
shiketa

2022/09/07 02:26

> 追加すればいいのはわかるのですが、その方法が分からないです へ? var dbUrl = 'jdbc:mysql://' + ip + '/' + db; にくつけたらいいのでは? var dbUrl = 'jdbc:mysql://' + ip + '/' + db + '?aaa=zzz&...';
m.t.m

2022/09/07 02:55

実行してみました var dbUrl = 'jdbc:mysql://' + ip + '/' + db + '?zeroDateTimeBehavior=convertToNull'; 結果 Exception: The following connection properties are unsupported: zeroDateTimeBehavior. 読み込んではいるようですがサポートされてないと出てしまいました 仕様の問題なのでしょうか
shiketa

2022/09/08 00:11

> 仕様の問題なのでしょうか 知りません。 たとえば、createQuery()でクエリを生成しているようなので、そこでtext型にキャストするなり変換すればいいのではないですか? Date型で扱いたくなったら、そこでnullなりDateなりに変換すればのではないですか?
m.t.m

2022/09/09 04:09

私の勉強不足で理解が追い付いていません 丁寧に教えてくださっているのに申し訳ないです 他の方法を試してみます 長々とお付き合いくださりありがとうございました
shiketa

2022/09/10 05:03

断片ではなく、スクリプト全体を提示してもらえれば、もう少し具体的に書ける、かもしれませんが。 差し障りがあるあら、テーブル名カラム名変数名は適当でもいいので。
m.t.m

2022/09/12 04:19

元データの空白をNULLにすることで解決しました。 次に質問する場合、具体的にします。 アドバイスありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問