- PR -

Postgre7.2.1でInsertしたい

投稿者投稿内容
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-07-22 17:21
なるほど。。。

ここで質問ですが

Windows、同じPostgresqlのバージョンをインストールしたのに

なぜ私のほうでは””なしでも大丈夫でSEASONさんは””なしにはできないでしょうか。
こういうのが難しいですね。

それとマルチユーザってなんでしょうか。

教えていただけますか。

質問しちゃってごめんなさい。 ^^

よろしくお願いします。



焼きそば
ベテラン
会議室デビュー日: 2002/11/06
投稿数: 86
お住まい・勤務地: 東京
投稿日時: 2004-07-22 17:27
焼きそばです。

引用:


MUSEさんの書き込み (2004-07-22 17:21) より:

それとマルチユーザってなんでしょうか。

教えていただけますか。




マルチユーザっていうのはちょっとおかしかったです。
混乱させて申し訳ありません。

postgresql.conf内の
tcpip_socketの設定のことです。

ただ、同一マシンでやっている分にはこの設定は関係なさそうですね。
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2004-07-23 10:58
皆さんお忙しい中ありがとうございます。遅くなってすみません。。。

Postgreのサーバ起動時でも起動時ではなくても出来るときと出来ないときがあります。出来ないときのほうがほとんどですけどね。

テーブル名に""を付けたこと・・・。今日""なしでテーブルを作成してみたら出来ました!すみません。お騒がせしました。でもPostgreをインストールしたくらいときはなぜか「ERROR near the USR」という感じのエラーがずっと出ていて、出来ないものと思っていました。そのときなぜ出来なかったのか分からないのですが、Windowsでも出来ることがわかってよかったです。本当にご迷惑をおかけして申し訳ございませんでした。m(_ _)m
教えていただいたページ、よく見ておきます。。。


 でも、テーブル名に""を付けなくても、やはりなかなかINSERTされません。
テーブル作成のSQLは

create table USR(USR_ID varchar(6) NOT NULL PRIMARY KEY,
USR_NAME varchar(20) NOT NULL,
USR_PASS varchar(10) NOT NULL
);

で作成しました。

私もどのように状況を説明すればいいのか分からないのですが、
http://www10.plala.or.jp/hir_/postgre/sms.lzh

に現在ユーザ登録する部分をワークスペースごとアップしてます。
都合上一部変更した部分もありますが、ディレクトリやファイルの位置はそのままです。
/tomcat 5.0/logs/stdout.log に出力されるエラー情報のファイルも一応入れてます。
もしお時間があるようでしたらこちらを見ていただけるとありがたいです。

>ConDB cb = new ConDB();

これは、データベースに接続するコネクション部分のクラスにしてます。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-23 13:25
引用:

seasonさんの書き込み (2004-07-23 10:58) より:
私もどのように状況を説明すればいいのか分からないのですが、
http://www10.plala.or.jp/hir_/postgre/sms.lzh


ざっと見てみました。これだけ見ると、コネクションの管理など問題のあるところはいろいろ
ありますが、動かない理由はないように思います。で、例外が出ているPostgresのJDBCドライバ
の該当部分のソースを読んでみたのですが、その例外はSQL実行でリザルトセットが返ってきた
場合に出るようです。

そこで提案ですが、まずSearchクラスとAddUserクラスでコネクションのクローズをきっちり
やるようにしてみたらどうなるでしょうか。JDBCドライバのコネクションの実装によって起きて
いそうな気がしますし、クローズ処理はそもそもきっちりやるべきものですから、まずそこから
手をつけてください。

また、今回に関しては本質的な問題ではないですが、ConDBの実装もあのままではまずいと思います。
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2004-07-23 14:57
お忙しいところ有難うございます。

コネクションのクローズの部分↓を加えてみたのですが、
stmt.close();
connection.close();

やはり動作しませんでした。
しかし、MUSEさんが動作確認してくださったような
public static void mainを使うJavaで試してみたら正常にInsertされました。
Servletだけはなぜかできません。
SearchクラスにもAddUserクラスにもクローズ部分を加えたのですが・・・。

>また、今回に関しては本質的な問題ではないですが、ConDBの実装もあのままではまずいと思います。

これはセキュリティ関係の問題でしょうか?
ソースを見てもどの当たりがまずいのかが分かりません。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-23 15:28
PostgresのCVSログを見ていておやっと思ったのですが、Statementクラスのリビジョン1.17の
ログに、
「Removed error message that was incorectly being issued. This fixes a problem
reported a few months ago where a select in a rule was causing an insert
statement to return a result set which the code was explicitly prohibiting.」
とありました。バグレポートがどこにあるのかわかりませんが、今回の問題に該当するように
思われます。ですが、なぜか1.18(最新版?)では1.17で削除された部分が復活しています…

もしかするとドライバを変えたら問題が出なくなるかも知れませんね。

引用:

seasonさんの書き込み (2004-07-23 14:57) より:
>また、今回に関しては本質的な問題ではないですが、ConDBの実装もあのままではまずいと思います。

これはセキュリティ関係の問題でしょうか?
ソースを見てもどの当たりがまずいのかが分かりません。


以下のような場合を想定してください。

ConDB db = new ConDB();
Connection conn1 = db.getConnection();

conn1.close();
Connection conn2 = db.getConnection();
で、このコネクションを使ったらどうなるでしょうか?

これ以外にも、オブジェクトのライフサイクルを考慮していないコーディングが目立ちます。

[ メッセージ編集済み 編集者: uk 編集日時 2004-07-23 16:21 ]
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-07-23 15:28
SQLExceptionなのでServletとかmainとかの問題ではないと思いましたが
できるって証明をしたかったので早速Servletで作ってみました。
何回も普通に動きましたよ。

きっと他の問題だと思いますけどね。

適当に作ったソースもちゃんと動いますけど。。

エラーの場合もcloseちゃんとしてますよね?

直接SEASONさんの環境でやってみたいですね。

もう少し頑張りましょう。 解決しなきゃ!!


ソースの一部分です。

public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/html");
//formの入力値取得
String id = req.getParameter("ID" );
Connection conn = null;
String url = "jdbc:postgresql://localhost:5432/template1";
String user = "XXX";
String pwd = "";
String sql = null;
Statement stmt = null;
try{
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(url, user, pwd );
stmt = conn.createStatement();
sql = "insert into USR values('" + id + "','aaa','111')";
int rs = stmt.executeUpdate(sql);
System.out.println("sql : " + sql);
System.out.println("rs : " + String.valueOf(rs));
stmt.close();
conn.close();
conn = null;
}
catch( Exception e ) {



[ メッセージ編集済み 編集者: MUSE 編集日時 2004-07-23 15:31 ]
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2004-07-24 01:58
ごめんなさい。勘違いしていたので、削除しました。

[ メッセージ編集済み 編集者: よねKEN 編集日時 2004-07-24 02:03 ]

[ メッセージ編集済み 編集者: よねKEN 編集日時 2004-07-24 02:03 ]

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