- PR -

Postgre7.2.1でInsertしたい

投稿者投稿内容
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2004-07-24 02:42
 何が原因かよく分からないし、時間が来てしまったので、家にソースを持ち帰って家のPCで動作確認してみました。
色々ソースをいじった結果正常にInsertされるようになりました。(今のところ家のPCではですが)

私はコネクション部分は、

package bbs;
import java.sql.*;
import java.net.*;
public class ConDB{
/** 属性 */
private Connection connection;

/** コンストラクタ */
public ConDB(){
try{
//DB情報取得
String dataBaseSQL = "PostgreSQL";
String dataBaseHost = "127.0.0.1";
String dataBasePort = "5432";
String dataBaseName = "season";
String dataBaseUsr = "season";
String dataBasePass = "season";

//MySQL用コネクション処理
if(dataBaseSQL.equals("MySQL")){
DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
connection =
DriverManager.getConnection ("jdbc:mysql://" + dataBaseHost + ":" + dataBasePort + "/" + dataBaseName + "?useUnicode=true&characterEncoding=EUC_JP&user=" + dataBaseUsr + "&password=" + dataBasePass);
}
//PostgreSQL用コネクション処理
else if(dataBaseSQL.equals("PostgreSQL")){
DriverManager.registerDriver(new org.postgresql.Driver());
connection =
DriverManager.getConnection ("jdbc:postgresql://" + dataBaseHost + ":" + dataBasePort + "/" + dataBaseName + "?charSet=EUC_JP&user=" + dataBaseUsr + "&password=" + dataBasePass);
}
}catch(SQLException e){
System.out.println(e.getMessage());
e.printStackTrace();
}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}

/** DBの接続情報を返すメソッド */
public Connection getConnection(){
return connection;
}
}

と組んでいたのですが、


package bbs;
import java.sql.*;
import java.net.*;

public class DB{
Connection conn = null;
public Connection DB() {
String dataBaseSQL = "PostgreSQL";
String dataBaseHost = "127.0.0.1";
String dataBasePort = "5432";
String dataBaseName = "season";
String dataBaseUsr = "season";
String dataBasePass = "season";

try{

DriverManager.registerDriver(new org.postgresql.Driver());
conn =
DriverManager.getConnection ("jdbc:postgresql://" + dataBaseHost + ":" + dataBasePort + "/" + dataBaseName + "?charSet=EUC_JP&user=" + dataBaseUsr + "&password=" + dataBasePass);

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

 という風にメソッドを分けずに値を返したら正常に動作しました。これ以外に職場でやったことと違うことは特にしてません。
しかし、メソッドを分けたほうのソースで家のPCで実行すると、実行できませんが
NullPointerException (Statement型変数がnull)のエラーなので、職場のPCで出てたエラーと異なります。

このソースを会社で実行した場合、できるかわかりませんが来週の月曜日出社したときに確認してみます。
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2004-07-26 09:18
会社のPCでも動作確認してみたらできるようになりました!

やはりコネクション部分のクラスのメソッドを分けずにコンストラクタ内で値返しするように組み替えたら出来ました。
なぜなのか理由は分からないのですが。とりあえず解決できてよかったです。

皆さん長い間いろいろ協力してくださって有難うございましたm(_ _)m
みけ
会議室デビュー日: 2003/09/03
投稿数: 13
投稿日時: 2004-07-26 10:42
2重投稿により削除

[ メッセージ編集済み 編集者: みけ 編集日時 2004-07-26 10:43 ]
みけ
会議室デビュー日: 2003/09/03
投稿数: 13
投稿日時: 2004-07-26 10:42
こんにちは。
解決されたとのことなので、もう大丈夫だとは思いますが、
時間があるときに、なぜそうなったのか?どうしてうまくいったか?は追求した方が
いいと思いますよ。それが私達の財産になるものですから。。。
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2004-07-26 21:52
おっしゃるとおりですね。追求していきたいと思います。
分かったときには報告に参ります。ありがとございました。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-26 22:06
引用:

seasonさんの書き込み (2004-07-26 09:18) より:
やはりコネクション部分のクラスのメソッドを分けずにコンストラクタ内で値返しするように組み替えたら出来ました。


ちなみに「コンストラクタ内で値返し」ってなんのことですか?
もしかして
public Connection DB() {

}
このメソッドのことですか? だとすると、これはコンストラクタではありませんよ。
もし私がConDBクラスを書き換えるとすると、こんな感じになります。

コード:

public class ConDB{
private static String dataBaseSQL = "PostgreSQL";
private static String dataBaseHost = "127.0.0.1";
private static String dataBasePort = "5432";
private static String dataBaseName = "season";
private static String dataBaseUsr = "season";
private static String dataBasePass = "season";

/** コンストラクタ */
public ConDB() throws SQLException {
//MySQL用コネクション処理
if(dataBaseSQL.equals("MySQL")){
DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
}
//PostgreSQL用コネクション処理
else if(dataBaseSQL.equals("PostgreSQL")){
DriverManager.registerDriver(new org.postgresql.Driver());
}
}

/** DBの接続情報を返すメソッド */
public Connection getConnection() throws SQLException {
if(dataBaseSQL.equals("MySQL")){
return DriverManager.getConnection ("jdbc:mysql://" + dataBaseHost + ":" +
dataBasePort + "/" + dataBaseName +
"?useUnicode=true&characterEncoding=EUC_JP&user=" +
dataBaseUsr + "&password=" + dataBasePass);
} else if(dataBaseSQL.equals("PostgreSQL")){
return DriverManager.getConnection ("jdbc:postgresql://" + dataBaseHost + ":" +
dataBasePort + "/" + dataBaseName + "?charSet=EUC_JP&user=" + dataBaseUsr +
"&password=" + dataBasePass);
}
return null;
}
}



もし原因がコネクションの使いまわしにあったのであれば、これでも解決するのではないかと
思いますが。

[ メッセージ編集済み 編集者: uk 編集日時 2004-07-26 22:07 ]
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2004-07-28 11:33
遅くなってすみません。コンストラクタの意味をきっちり理解してませんでした(汗)

ukさんのソースで実行してみたら正常に動作しました。
そうですね。コネクションの使い回しが問題みたいです。

今後実務に携わるときには、気をつけようと思います。
ありがとうございました。

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