- PR -

Postgre7.2.1でInsertしたい

投稿者投稿内容
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2004-07-22 13:27
 誤解を招きやすい書き込みで失礼しました。

 はい、データベースに存在するレコードと同一のUSR_IDを持つデータは入れてないです。入れた場合は「すでに登録済み」とエラーページに飛ばすようにしてます。

 今日も朝からずっとソースをいじったり、テストしてたのですが、TOMCAT起動時は実行されやすいというだけで、必ずしも正常に追加されるわけではないみたいでした。起動しなおせばできるものと思ってやっていたら、やっぱりできないこともありました。DBサーバが不安定みたいです。とにかくテストしてみても「このときだけではできる!」と断言できる状態がありませんでした。同じ状態・条件でも、たまになぜか出来たり、それ以降にすると全くできないとかです。

 これは新人研修の一環で、本社の研修講師から社内システムを作る課題を与えられていました。最初のうちはメールやチャットで講師から教わってたのですが、開始3日目くらいから講師が急遽相当忙しいプロジェクトに行ってしまったそうです。最近はメールで質問しても全く返事が返ってこなくなりました。また社内の先輩はみんなパートナー会社に出てしまって帰ってきませんし、たまに社内に帰ってくる先輩はJavaやPostgreを知らない方なので、こちらのBBSを頼らざるを得ませんでした。
 DBも本当ならLinuxにサーバを立ててやりたいところでしたが、支社内にDBサーバの構築できる余ってるPCがないとのことで、各自PCにDBソフトをインストールして行うしかありませんでした。誰にも聞けないのでJSPのエラーを出してくれるEclipseが使える環境でやりたいとWindowsで行いました。

 やはりこのWindows版Postgreの資料もないままでの作業は困難だし、予定では今週末に講師が復帰するはずなので、復帰を待って講師に現状を説明することにします。環境が整わない中どうしていいか分からなくなり、エラーの現状説明も曖昧になってしまってすみませんでした。皆さんどうもありがとうございました。
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-07-22 13:52
色々大変ですね。 私もまだ経験不足で苦労してます。 ^^

誤解して申し訳ありませんでした。

私のほうでPostgresql-7.2.1をインストールして実行してみましたが普通に動きましたが。。。

私がテストで...........
JAVAソース
(mainで引数をもらって入れるだけです。PKだけが重複しないようにしました。)
import java.sql.*;

public class DBTest {
public static void main(String[] args) {

Connection conn = null;
String url = "jdbc:postgresql://localhost:5432/template1";
String user = "XXX";
String pwd = "";
try{
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(url, user, pwd );
String sql = null;
Statement stmt = null;
stmt = conn.createStatement();
sql = "insert into USR values('" + args[0] + "','aaa','111')"; //<-USRって””なしでもOKでしたよ。 
int rs = stmt.executeUpdate(sql);
System.out.println("rs : " + String.valueOf(rs));
stmt.close();
conn.close();

}
catch( Exception e ) {
stmt.close();
conn.close();
System.err.println(e);
  return;
}
return;
}
}

実行:java DBTest 002


DB table 作成

create table USR(user_id varchar(16) PRIMARY KEY UNIQUE, name varchar(16) not null, pass varchar(16) not null);

こんな感じでやってみましたが普通にできましたよ。

なぜseason様の場合。。。Table名に””が必要だったかはよく解りませんね。 

season様もDBTable作成文など色々環境に関して教えてくれれば
もっと確実な原因究明ができると思います。

>

[ メッセージ編集済み 編集者: MUSE 編集日時 2004-07-22 16:03 ]
焼きそば
ベテラン
会議室デビュー日: 2002/11/06
投稿数: 86
お住まい・勤務地: 東京
投稿日時: 2004-07-22 14:36
焼きそばです。

はずしていたら申し訳ありません。

もしかしたらDBを再起動した直後の1回だけ成功すると
いうことはないですか?

コネクションがうまく切れていないような気がするので。

yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2004-07-22 15:53
私も焼きそばさんの意見と同じです。

・(論理的な)コネクションがクローズされていない。
・Statementがクローズされていない。
・ResultSetがクローズされていない。
・コミットが行われていない。

などを確認してみてはどうでしょうか?
(コミットが行われていなかったら1回目もうまくいかない気がするので
 これは違うかな?)
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-07-22 16:11
私も最初クローズされてないからかなと思いましたけど

私も急いでソース作成して実行してみたので

Conのクローズもstmtのクローズもしてなかったですが
普通に動きましたよ。

30回やっても大丈夫でしたので他に原因があるとも思われますね。

一体なんでしょう。 T.T


uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-22 16:14
そういえば、最初にあれっと思ったのに質問するのを忘れてました。
ConDBってなんのクラスですか?
焼きそば
ベテラン
会議室デビュー日: 2002/11/06
投稿数: 86
お住まい・勤務地: 東京
投稿日時: 2004-07-22 16:34
焼きそばです。

引用:

MUSEさんの書き込み (2004-07-22 16:11) より:
私も最初クローズされてないからかなと思いましたけど

私も急いでソース作成して実行してみたので

Conのクローズもstmtのクローズもしてなかったですが
普通に動きましたよ。

30回やっても大丈夫でしたので他に原因があるとも思われますね。




そうですか。
postmasterがマルチユーザーではないのかなとも思ったのですが。

yamasa
ベテラン
会議室デビュー日: 2003/02/15
投稿数: 80
投稿日時: 2004-07-22 17:05
引用:

seasonさんの書き込み (2004-07-20 15:30) より:
>"USR" なせTable名をこういうふうに書きました?わけがありますか。
"はいらないと思いますが。。。。。。。

はい、わけがあります。Linuxだといらないのかもしれないですが、Windowsだとダブルクォーテーションを付けないとすぐにSQLExceptionになります。


単なるSQL文法の問題です。
http://www.postgresql.jp/document/pg743doc/html/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS
「4.1.1. 識別子とキーワード」の最後の段落をよく読みましょう。

スキルアップ/キャリアアップ(JOB@IT)