Javaで、MySQLのテーブルを上書き作成する方法のコードを教えてください。ついでに、それにデータをInsertするコードも

//Connection con = getConnection();
// Statement生成
//Statement stmt = con.createStatement();
// テーブル作成SQL文
// String st = "CREATE TABLE meibo( "+
// "id INT," +
// "name VARCHAR(36)," +
// "adr VARCHAR(50)," +
// "CONSTRAINT hoge_key PRIMARY KEY (id));";

// SQL実行
// stmt.execute( st );
// stmt.close();
では、テーブルがある場合にエラーになります。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2018/06/22 08:52:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:kojiro_i619

データのインサートを以下のようにしていますが、idへの入力が

Duplicate entry '4' for key 'PRIMARY'などと、入力できたりできなかったりします。

//String SQL = "insert into meibo (id,name,adr) VALUES (?,?)";

// try(PreparedStatement ps = con.prepareStatement(SQL)){

//ps.setInt(1,5);

// ps.setString(1,"康二郎");

// ps.setString(2,"aji");

// ps.executeUpdate();

//con.commit();

// con.close();

// System.out.println("End");

// }

ベストアンサー

id:kaoato No.1

回答回数236ベストアンサー獲得回数86

ポイント180pt

javaでなくて、SQL文をすこし調べられては?




>CREATE TABLE
>では、テーブルがある場合にエラーになります。

これはテーブルを作成するSQLなので、すでにテーブルが存在するとエラーになります。
仕様通り。


テーブル =>ファイル
データ =>ファイルの中身

テーブルは一度作成すれば、データを追記、更新、削除するには触る必要がない。

テーブルが存在したら動作しないようなロジックを組むしかないのでは?



>Duplicate entry '4' for key 'PRIMARY'

CREATE TABLEで、IDがプライマリーキーにしていると、
同じ数字のデータは、重複キーでエラーになります。
これも仕様通り。

プライマリーキーの属性を外す等の方法があります。


>MySQLのテーブルを上書き作成する方法

データの話なら、SQLは、insert文でなくて、update文。
テーブルの話なら、CREATE TABLEの代わりに、ALTER TABLE文。

でも、質問文はそういう意味でもなさそうな。


DBは何を使用しているのか不明ですが、
テーブルは、DBの管理ツールで作成しては?
データに関してのみ、javaからSQLでinsert、update、deleteを実行しては?

他1件のコメントを見る
id:kaoato

>alter tableでの具体的な文章がほしいです。

MySQL ですね。
https://dev.mysql.com/doc/refman/5.6/ja/alter-table.html


単に、SQL文の話で、javaにあまり関係ないと思います。

2018/06/21 16:22:15
id:kaoato

MySQLでは
SHOW TABLES
でテーブル名の一覧を調べることができます。

また、MySQL 3.22以降なら
CREATE TABLE で「IF NOT EXISTS」をつけると、すでにテーブルが存在した場合
上書きせず、 エラーも返さずに終了します。

例)
CREATE TABLE IF NOT EXISTS TEST(
id int,
txt varchar(10)
)


https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1211594657



やり方はいろいろあって、どれが正解かは、要件によると思います。


java関係ないですが、Wordpressとかでは、「SHOW TABLES」でテーブルの存在チェックをしてから作成しているように見えます。

2018/06/21 17:27:13

その他の回答1件)

id:kaoato No.1

回答回数236ベストアンサー獲得回数86ここでベストアンサー

ポイント180pt

javaでなくて、SQL文をすこし調べられては?




>CREATE TABLE
>では、テーブルがある場合にエラーになります。

これはテーブルを作成するSQLなので、すでにテーブルが存在するとエラーになります。
仕様通り。


テーブル =>ファイル
データ =>ファイルの中身

テーブルは一度作成すれば、データを追記、更新、削除するには触る必要がない。

テーブルが存在したら動作しないようなロジックを組むしかないのでは?



>Duplicate entry '4' for key 'PRIMARY'

CREATE TABLEで、IDがプライマリーキーにしていると、
同じ数字のデータは、重複キーでエラーになります。
これも仕様通り。

プライマリーキーの属性を外す等の方法があります。


>MySQLのテーブルを上書き作成する方法

データの話なら、SQLは、insert文でなくて、update文。
テーブルの話なら、CREATE TABLEの代わりに、ALTER TABLE文。

でも、質問文はそういう意味でもなさそうな。


DBは何を使用しているのか不明ですが、
テーブルは、DBの管理ツールで作成しては?
データに関してのみ、javaからSQLでinsert、update、deleteを実行しては?

他1件のコメントを見る
id:kaoato

>alter tableでの具体的な文章がほしいです。

MySQL ですね。
https://dev.mysql.com/doc/refman/5.6/ja/alter-table.html


単に、SQL文の話で、javaにあまり関係ないと思います。

2018/06/21 16:22:15
id:kaoato

MySQLでは
SHOW TABLES
でテーブル名の一覧を調べることができます。

また、MySQL 3.22以降なら
CREATE TABLE で「IF NOT EXISTS」をつけると、すでにテーブルが存在した場合
上書きせず、 エラーも返さずに終了します。

例)
CREATE TABLE IF NOT EXISTS TEST(
id int,
txt varchar(10)
)


https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1211594657



やり方はいろいろあって、どれが正解かは、要件によると思います。


java関係ないですが、Wordpressとかでは、「SHOW TABLES」でテーブルの存在チェックをしてから作成しているように見えます。

2018/06/21 17:27:13
id:uunfo No.2

回答回数63ベストアンサー獲得回数6

ポイント20pt

何をやりたいのかさっぱりわかりませんが。

MySQLのテーブルを上書き作成する方法のコードを教えてください

drop table if exists meibo;

単純にエラーを出ないようにしたいなら
create table if not exists meibo (id int, ...) ;


MySQLかSQLの本を読んだ方がいいよ。

  • id:TAK_TAK
    エラーメッセージを教えてください
  • id:a-kuma3
    create する前に show tables で、テーブルがあるかどうかを確認して、
    もし存在してたら、drop してから create するか、create じゃなくて alter table にするか、だと思います。

    insert できんのは、primary key の id が重複してるからだと思います。
    補足に書いてあるコードだと、prepared statement の ? がふたつしかない辺りから怪しくて、キーの重複の前に他のエラーが出そうな気がします。
  • id:kojiro_i619
    a-kuma3さん、いつも、ありがとうございます。ちょっと、疲れ果てた末の投稿で、例外処理などはおこなっておりません。上でのコメントにも書いたように、一気に、テーブル作成とデータの流し込みをやるつもりです。
    しかし、今後のために、
    >もし存在してたら、drop してから create するか、create じゃなくて alter table にするか、
    の部分のコード例を教えていただければ、幸いです。
  • id:kojiro_i619
    質問を終了します。実は、64bitPCでのAccess2016のデータをMySQLへエクスポートする方法が、かなり分からなくて、疲れ果てて、日本語を含まないものなら、MySQLのworkbenchでできるので、それで行い、日本語を含むものは自前で、Javaで作ろうという算段で、色々なネットから調べて、急きょ作ったコードを出しました。丁寧なご回答、ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません