- PR -

PostgreSQL8で〜が消える

投稿者投稿内容
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-01-09 17:40
WinXP SP2
Java5
PostgreSQL8.1(EUC_JP)
の環境で以下のソースをコンパイルし、
引数3つ共に「〜」を含む文字列を指定して実行してみましたが、
自分の環境では正常に登録されました。

#対象列は col1 = char(10) , col2 = varchar , col3 = textで実行しています。
#エラーハンドリングがちょっといいかげんです。(^^;

JDBCは
postgresql-8.1-404.jdbc2.jar
postgresql-8.1-404.jdbc2ee.jar
postgresql-8.1-404.jdbc3.jar
の3種類共に試してみました。

問題を切り分けるためにも、ご自分の環境で
(1)コンソールアプリをつくり、JDBCで「〜」が登録できるのかを確認し、
(2)?パラメータに値を設定する前の状態で、stmtの内容をtoString()で出力し、
 生成されたSQLの確認
をしてみてはいかがでしょう?


コード:
import java.sql.* ;

public class test {

	public static void main(String[] args) {
		test(args) ;
	}
	
	public static void test(String[] args) {
		Connection conn = null ;
		String RegStmt = "INSERT INTO test(col1,col2,col3) VALUES(?,?,?)";
		
		try {
			Class.forName("org.postgresql.Driver");

			String url = "jdbc:postgresql://localhost/test2?user=postgres&password=postgres&charSet=EUC_JP";
			conn = DriverManager.getConnection(url);
			
  			PreparedStatement stmt = conn.prepareStatement(RegStmt);

			stmt.setString(1,args[0]);
			stmt.setString(2,args[1]);
			stmt.setString(3,args[2]);

			stmt.executeUpdate();
			
			System.out.println(stmt.toString()) ;
			
			stmt.close();			
			conn.commit() ;
		} catch(Exception ex) {
			ex.printStackTrace() ;
			try {
				conn.rollback() ;
			}catch(Exception exRollback) {
				exRollback.printStackTrace() ;
			}
		} finally {
			if ( conn != null ) {
				try {
				conn.close() ;
				} catch(Exception ex) {
					ex.printStackTrace() ;
				}
			}
		}

	}
}


しろくま
常連さん
会議室デビュー日: 2004/10/15
投稿数: 35
投稿日時: 2006-01-13 11:10
お世話になります、しろくまです。
夏椰さんの提示していただいたソースで実行したところ正常にいきました。

実行
execjava test A〜B 〜あ〜 〜〜1
INSERT INTO test(col1,col2,col3) VALUES(A〜B,〜あ〜,〜〜1)
DB内容
col1 |col2 |col3
-----------------------
A〜B |〜あ〜 |〜〜1

ですが、引数で渡すのではなくPGで直接値を埋め込んでみると
コード:

stmt.setString(1,"A〜B");
stmt.setString(2,"〜あ〜");
stmt.setString(3,"〜〜1");



実行
execjava test
INSERT INTO test(col1,col2,col3) VALUES(A?B,?あ?,??1)
DB内容
col1 |col2 |col3
-----------------------
AB |あ |1
となってしまいます。

当初この症状になったWEBアプリで同様にSQL文を表示してみましたら、〜が正常に渡っていますが、DBへの書き込みはされません。




[ メッセージ編集済み 編集者: しろくま 編集日時 2006-01-13 11:14 ]

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