- PR -

SQLException構文エラー(ハイフン認識できず)

1
投稿者投稿内容
jokers
ベテラン
会議室デビュー日: 2002/08/04
投稿数: 73
投稿日時: 2002-09-23 10:05
 JDBC−ODBCブリッジにて.mdbファイルにアクセス、HTMLフォームに入力した新規メンバー情報を登録するというものを作成中(servletにて)でございますが、以下の通りSQLException構文エラーが発生致しました。
 e.printStackTraceの一部を表示致しますと
 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] クエリ式 ''**市**町17?' の 文字列の構文エラーです。
 (コンソール出力にて認識できないものは?で表示される?)
 また、
 Aサーブレットでは、HTMLフォームで作成された情報をもとに確認画面を作成し、
  name=req.getParameter("Pname");
  session.setAttribute("name",name);

 Bサーブレットでは、確認画面の情報をMDBファイルにデータを追加する
 Address1 = (String) (session.getAttribute("address1"));
 SQLは Sqlquery="INSERT INTO teblename (address) VALUES ('Address1')";
  
  VisualAge for Java(Ver4.0) を使用 
  (JDK1.2.2に準拠にて明示的にString.getByteメソッドなどを使用しなくても通常認識   できるようです。)
  webshereテスト環境にて作成中
  他のハイフンを使用していないもの(名前、パスワードなどハイフンを使用していないも   のは問題なくレコード追加できるようです。)
  どうすればいいのでしょうか。
  認識できないものはで他に注意すべきものはありますか。

[ メッセージ編集済み 編集者: jokers 編集日時 2002-09-23 10:07 ]

[ メッセージ編集済み 編集者: jokers 編集日時 2002-09-23 18:44 ]

[ メッセージ編集済み 編集者: jokers 編集日時 2002-09-23 18:45 ]
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-09-23 22:45
全角のハイフンが文字化けして?となってSQL構文エラー
を起こしていると思われます。
'〜'とか'−'とかはよく化けますね。
この辺のことはなかなか複雑な問題です。

http://www.dmz.hitachi-sk.co.jp/Java/Tech/i18n/unicode.html
http://www.vc-net.ne.jp/~ytp/bbs/java/bbs3427.html

上記サイトに詳しくのってましたので、
参考にしてみてください。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-09-23 23:30
> SQLは Sqlquery="INSERT INTO teblename (address) VALUES ('Address1')";

まずは、なんですが、この文だと「Address1」という文字列が挿入されるだけですね。
正確に伝えないと外部からでは何が起こっているか推測できません。

PrepareStatement を使ってるのか SQL Query を文字列として作ってつっこんでるのかもわからない。前者なら「文字化け」系の話でしょうが、後者ならまさに「SQL 構文のエラー」かもしれない。

文字化け系の話なら以下をチェックしてください。

- 不用意に Shift_JIS/JISAutoDetect を使わない
- SJIS(EUC)/MS932 をちゃんと区別する
- DB の文字コードが「シフトJIS」なら、JIS 的なのか MS CP932 的なのか考える

SQL 構文の話なら、文字列がちゃんと SQL エスケープされてるのかチェックしてください。
see http://www.atmarkit.co.jp/fjava/rensai/jsp2_03/jsp2_03_1.html
Paul
ベテラン
会議室デビュー日: 2002/04/30
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-09-24 10:43
一般に紹介されている文字化け原因を確認されることはもちろん重要ですが、WebSphere Application Server(以降WAS)の場合はさらに複雑です。独自の国際化フレームワークを実装しているからです。

ブラウザから送られてきたWebパラメタをデコードする際に、HTTPヘッダのクライアントロケール情報を見て、Webパラメタのキャラクタセットを仮定するしくみ($WAS_HOME/properties/encoding.propertiesで設定)や、クライアントに応答するキャラクタセットとJRE側で利用する(コンバータ)キャラクタセットを対応付け、それぞれ別に設定するためのしくみ($WAS_HOME/properties/converter.propertiesで設定)がありますから、これらの設定を確認してください。

WASのバージョンやプラットフォームの情報が記載されてないようですので、WAS4.0、Microsoft Windowsと仮定します。ディフォルトインストール状態では、リクエストヘッダのAccept-languageにjaが設定されていた場合に採用されるキャラクタセットはShift_JISで、コンバータはCp943Cです。さらにWASのJREはIBM製のもので動作していると思います。したがって、IBM製のUnicodeマッピングが利用されています。IBMUnicodeとMSUnicodeではマッピングの異なる文字(−〜‖―)があります。
ディフォルトインストール状態の設定で、pageディレクティブのcharsetにMS932を指定していたり、あるいは指定を省略していたりしますとそれらの文字は化ける可能性があります。その場合は、converter.propertiesでShift_JIS=MS932を指定するとか、pageディレクティブのcharsetを変更するなどしてみてください。

WAS4.0出たてのころは手探りでいろいろやっていたのですが、最近はかなり役に立つTips(以下)がIBMより出されています。参考にしてください。
http://www-6.ibm.com/jp/software/websphere/developer/w40/iw/pdf/19_1.pdf
http://www-6.ibm.com/jp/software/websphere/developer/w40/iw/pdf/19_2.pdf

_________________
Paul K.Nakagome
jokers
ベテラン
会議室デビュー日: 2002/08/04
投稿数: 73
投稿日時: 2002-09-29 11:41
皆様、ご指摘の程、誠に有難うございました。
 AMNAKYさんのご指摘頂きました、参考サイトの掲載されておりまUnicodeFiler.Class
のtoMS932メソッドを使用して、内部コンソールの”?”エラーは解消され、無事認識されました。まだ、MDBファイルへのカキコはエラーが出ていますが、
 @水際にてハネル(”−”は入力できません。”*条*丁目”にて入力し直してください)
 A内部処理にて認識できるものに変える(ーからHAIHUNにかえてカキコなど)
 などごまかしが可能ですので(内部処理にて認識できなければやりようないですから)
 ただ、こういった場合もっとすっきりした方法がないものかと考慮中というのは私だけでしょうか!?(いろいろ煩わしい今日このごろですが)
 

[ メッセージ編集済み 編集者: jokers 編集日時 2002-09-29 11:42 ]
1

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