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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

3159閲覧

MySQLで、Date型のデータを登録できない。

nuiri1343

総合スコア54

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2017/12/14 08:40

###前提・実現したいこと
MySQLにて、次の様なテーブルがあります。

列名 : id,day
型 : String,Date

id列のデータはString型で、day列のデータはDate型で格納するという感じです。

javaのプログラムで、

Date date = new Date();
Connection con = getConnection();
Statement etmt = con.createStatement();
stmt.executeUpdate("INSERT INTO table values('123abc456',"+date+");");

というようにやりました。
しかし、エラーが出てしまいました。どうしてなのでしょうか。

import文は、
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.util.*;
です。

Date型が、utilの方で、sqlでないからなのでしょうか?
だとしたらどうすればいいのでしょうか

全くの初心者なので詳しく教えていただけると助かります。

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

om.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; chek the manual that corresponds to your MySQL server version for the right syntax to use near 'Thu Dec 14 17:28:36 JST 2017)' at line 1

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

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

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

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

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

guest

回答1

0

INSERTで受け付けることができる日付の「文字列形式」に問題があるのと、「日付文字列が'で囲まれていないこと」の二点です。
【MySQLの日付型にINSERTできる文字列の書式】
http://dupont-kedama.blogspot.jp/2010/06/mysqlinsert.html

Java

1SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 2stmt.executeUpdate("INSERT INTO table values('123abc456','"+sdf.format(date)+"');");

ただ、これでも動くことは動きますが、「SQLを文字列連結で組み立てる」という行為はSQLインジェクションの脆弱性に繋がります。プリペアドステートメント形式にするべきです。

Java

1PreparedStatement stmt = conn.prepareStatement("INSERT INTO table values(?, ?)"); 2stmt.setString(1, "123abc456"); 3stmt.setDate(2, date); 4stmt.executeUpdate();

投稿2017/12/14 08:58

masaya_ohashi

総合スコア9206

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

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

nuiri1343

2017/12/14 09:13

なるほど。 後者のプログラムの、stmt.setDate(2,date); のdateは、java.sql.Date型ですよね? ということは、事前にjava.util.Date型からjava.sql.Date型へ変換しなければならないということでしょうか
masaya_ohashi

2017/12/14 09:21

いま持っているdateがjava.util.Date型であれば、おっしゃる通りjava.sql.Dateへ変換する必要があります。new java.sql.Date(date.getTime())で変換可能です。 ただ、これは厳密にはjava.sql.Date型のデータとして正しくないので、しっかりした変換をするなら以下のページを参考にどうぞ。 http://d.hatena.ne.jp/higayasuo/20090219/1235020303
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問