忍者ブログ
JAVAについて調べたいろんなことをメモる
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


以下のselect文でエラーが発生した。


create table AAA(....);
select * from aaa;

テーブル名の大文字と小文字が区別されるらしい。これはサーバのOSに依存しており、フォルダ・ファイル名を大文字小文字で区別するOSであればエラーになる。ちなみにテーブル名だけではなくデータベース名も。フィールドは問題ない。

mysqlがデータベース、及びテーブルをフォルダ・ファイルで管理しているため。

PR


あるテーブルtableAに1レコードinsertし、

そのtableAのAUTO_INCREMENTなtableA.IDを外部キーに持つtableBを続けてinsertしたいときに、tableA.IDを知る方法はないものか?



普通に考えて、tableAをinsert後にselectでtableA.IDを取得すればいいような気がするがめんどくさい。もっと賢いやり方があるはず。

ネットで調べたところlast_insert_id()という関数があるらしい。



create table tableA(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(50)
);
create table tableB(
ID INT PRIMARY KEY AUTO_INCREMENT,
AID INT,
NAME VARCHAR(50)
);
insert into tableA(name) values('あいうえお');
insert into tableB(aid, name) values(last_insert_id(), 'あいうえお');



last_insert_id()はテーブルを指定できないので注意が必要だ。

phpMyAdmin上でinsertを実行すると問題ないが、javaでinsertすると日本語が全て「???」になった。
ネットで調べると、SQL実行前に「set names utf8」を実行することで解決したケースがあったが自分の環境ではダメだった。


    Connection connection = DriverManager.getConnection(strURL, strUserID, strUserPW);
    Statement statement = connection.createStatement();
    statement.execute("set names utf8");     // 'utf8'は環境により'ujis' or 'sjis'となる
    statement.executeUpdate("insert into..............");


そこで、


    String strURL = "jdbc:mysql://localhost/dbname?useUnicode=true&characterEncoding=utf8";
    Connection connection = DriverManager.getConnection(strURL, strUserID, strUserPW);
    Statement statement = connection.createStatement();
    statement.executeUpdate("insert into..............");

とgetConnectionの第1パラメータにuseUnicode=true&characterEncoding=utf8を追加することで解決した。



忍者ブログ [PR]
カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
フリーエリア
最新CM
最新TB
プロフィール
HN:
JAVA初心者
性別:
非公開
バーコード
ブログ内検索
アクセス解析
カウンター