- - PR -
SQLException構文エラー(ハイフン認識できず)
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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 ] |
|
投稿日時: 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 上記サイトに詳しくのってましたので、 参考にしてみてください。 |
|
投稿日時: 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 |
|
投稿日時: 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 |
|
投稿日時: 2002-09-29 11:41
皆様、ご指摘の程、誠に有難うございました。
AMNAKYさんのご指摘頂きました、参考サイトの掲載されておりまUnicodeFiler.Class のtoMS932メソッドを使用して、内部コンソールの”?”エラーは解消され、無事認識されました。まだ、MDBファイルへのカキコはエラーが出ていますが、 @水際にてハネル(”−”は入力できません。”*条*丁目”にて入力し直してください) A内部処理にて認識できるものに変える(ーからHAIHUNにかえてカキコなど) などごまかしが可能ですので(内部処理にて認識できなければやりようないですから) ただ、こういった場合もっとすっきりした方法がないものかと考慮中というのは私だけでしょうか!?(いろいろ煩わしい今日このごろですが) [ メッセージ編集済み 編集者: jokers 編集日時 2002-09-29 11:42 ] |
1
