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

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

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

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

Java

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

Q&A

解決済

4回答

1768閲覧

INSERTについて

kumatarou

総合スコア33

MySQL

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

Java

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

0グッド

0クリップ

投稿2015/11/05 11:06

Java研修の一環で名刺管理システムを開発しています。
DAOパターンを使ってDBに情報を残すために、プログラムの生成をしています。

DAOのパッケージ内でinsert into でカラムを複数追加しているのですがエラーが出てしまいます。

String sql = "insert into card_data (card_id, company_name, company_name_kana, business_unit, division, section, last_name, last_name_kana, first_name, first_name_kana, email, address_number, address, tel_direct, tel_main, fax, url, corp_note, create_date, modify_date, delete_flag) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

*エラー部分
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' at line 1

?とカラムの数は一致していますし、構文も問題ないと思うのですがエラーが出てしまっています。
エラーを解消するためにお力を貸して頂ければと思いますので宜しくお願い致します。

初心者ですので情報が足りてなく、言葉足らずな部分もたくさんあると思いますので
遠慮なく申しつけて頂ける幸いです。

*環境 eclipse4.5 All in one
windows7

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

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

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

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

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

guest

回答4

0

ベストアンサー

日付の処理、あってますか?
試しに日付のINSERTを無くしてみてください。

投稿2015/11/09 01:18

anonymouskawa

総合スコア856

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

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

kumatarou

2015/11/09 06:35

回答ありがとうございます。 INSERTの処理を無くしたら無事にエラー解消されました!! ありがとうございます!!
anonymouskawa

2015/11/09 06:44

いえいえ。 日付のフォーマットとか、記述の問題の可能性が高いので、 その辺りを修正すれば日付も含めたINSERTができると思います。
argius

2015/11/09 06:48

そういうことだったんですね。エラーメッセージが分かりにくいけどいつも使っている人にはわかるのかな...
anonymouskawa

2015/11/09 07:09

>argiusさん 私の場合は、いつも使っているというよりは、いつもエラーを出しているが正しいですね…w
guest

0

SQLの最後に「;」をしていないから。。。ではないですよね?

後、気になったのですが、1つ目の?へは、getCompany_name()ではなく、card_id の値ではないでしょうか?

投稿2015/11/06 01:24

kaputaros

総合スコア1844

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

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

kumatarou

2015/11/06 02:23

回答ありがとうございます。 →SQLの最後に「;」をしていないから。。。ではないですよね? 「;」はしています。 →後、気になったのですが、1つ目の?へは、getCompany_name()ではなく、card_id の値ではないでしょうか? おっしゃる通りです。改善しましたが、依然と同じエラーが出てしまいます。
guest

0

エラーの内容が

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

となっているため、おそらくですがSQLにミスがありそうです。
一見問題ないように見えますが、"("や","の場所や数に問題はないですか??
想定しているSQLをMySQL側で実行して、実際に動くかどうか確認してみましょう。

あとは、もしかしたらMySQLのint型カラムに対して、
pStmt.setString(x, "")
をしているかもしれませんね。
int型のカラムには、
pStmt.setInt(x, 整数)
を使わないとエラーが起きてしまいます。

投稿2015/11/06 00:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

Javaの実行部分が書かれていないので推測ですが、PreparedStatementを使っていないのではないでしょうか。

Statement取得はcreateStatementではなく、prepareStatementメソッドを使います。
実行は、引数無しのexecuteUpdate()メソッドを使います。

参考リンク:
prepareStatementの使用 - データベース接続 - サーブレット入門
http://www.javadrive.jp/servlet/database/index10.html

投稿2015/11/05 11:13

編集2015/11/05 11:14
argius

総合スコア9388

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

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

kumatarou

2015/11/05 11:24

回答ありがとうございます。 参考リンクまで載せていただきありがとうございます。 insertの下に実行処理を書いていましたが載せていませんでした。失礼いたしました。 String sql = "insert into card_data (card_id, company_name, company_name_kana, business_unit, division, section, last_name, last_name_kana, first_name, first_name_kana, email, address_number, address, tel_direct, tel_main, fax, url, corp_note, create_date, modify_date, delete_flag) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; PreparedStatement pStmt = conn.prepareStatement(sql); //?の値に使用する値の設定 pStmt.setString(1, cardData.getCompany_name()); pStmt.setString(2, cardData.getCompany_name_kana()); pStmt.setString(3, cardData.getBusiness_unit()); ・                 ・                 ・ と21の処理が続いています。
argius

2015/11/05 11:33

SQL自体は問題ないように見えます。 実行は、引数無しのpStmt.executeUpdate()を使っていますか?
argius

2015/11/05 11:37

試しに同じSQLをPreparedStatementを使わずにexecuteUpdate(sql)で実行してみたところ、同じエラーが出ました。
kumatarou

2015/11/06 00:26

わざわざ試して頂いてすみませんでした。 引数なしで使っています。 このエラーは何なのでしょうか・・・ 実行に支障はありますか?
argius

2015/11/06 02:06

エラーメッセージは、 MySQLの文法として正しくない、'?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'辺りを確認せよ(意訳)、と言っています。 試したのも完全に同じ状況ではないので、あくまで一例としてですけどね。 PreparedStatementを使わない場合にこのエラーが出る可能性があることは確認できた、ということです。 実行エラーなので、支障があるはずです。 支障が無いとしたら、PreparedStatementでない処理も別の場所に重複して書かれている、くらいしか思いつきません。
kumatarou

2015/11/06 02:29

色々とやって頂きありがとうございました。 今一度エラーを消せるようリベンジしてみます。 ありがとうございました!
argius

2015/11/06 03:36

あとは、プログラム以外の問題かもしれませんね。 MySQLサーバーのバージョンが古すぎたりするとダメだったりします。5以上ならたぶん大丈夫です。 JDBCドライバー(JARファイル)のバージョンが古くても上手くいかない可能性があります。 他の場所では成功しているのにここだけPreparedStatementが使えないのか、常にPreparedStatementが使えないのか、どちらでしょうか。 EclipseでJavaプログラムがコンパイルされていない(修正が反映されていない)可能性は無いでしょうか? 分からなければビルドのクリーンを実行して全部再コンパイルしてみるとどうでしょうか?
kumatarou

2015/11/06 05:39

MySQLのバージョンは5.6 JDBCドライバーのバージョンは5.1 です。 今回初めて使ったので、PreparedStatementが他でも使えるか試してみます! 全てコンパイルしましたが今だエラーは消えず・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問