import java.sql.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String cString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/hello.mdb";
Connection con = DriverManager.getConnection(cString, "", "");
Statement stmt = con.createStatement();
final String shiftJIS = "Shift_JIS";
String sql = encode("SELECT * FROM ハローテーブル",shiftJIS);
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
int no = rs.getInt("No");
String lang = rs.getString("言語");
String msg = rs.getString("メッセージ");
System.out.println(no + " " + lang + " " + msg);
}
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
static String encode (final String sql, final String charset)
throws UnsupportedEncodingException {
return sql != null ? new String(sql.getBytes(), charset) : null;
}
}
上記のプログラムで以下の結果を出力したいです。
1 日本語 こんにちは世界
2 英語 Hello Word
しかし、以下のエラーが表示されます。
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] ??̓e?[?u???܂??̓N?G?? '繝上Ο繝シ' ????????܂???ł????B???̃e?[?u????N?G???????݂??Ă??邱?ƁA?܂??͖??O???????????Ƃ??m?F???Ă????????B
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253)
at javaapplication1.Main.main(Main.java:34)
文字コードの変換がうまくいかないのだと思いますがどうすれば良いかわかりません。
どのようにしたら解決するでしょうか?
またおそらくクエリーを実行して結果の取得の部分以外にも
データが日本語なので値の取得の部分で希望の結果にならないと思います。
どのようにすれば良いでしょうか?
No.2ベストアンサー
- 回答日時:
No.1さんのいうとおり、クエリやフィールド名を直書きで、正常に動作するみたいです。
Windows XP SP3+JDK 1.6u17+MDAC3.5sp1で動かしたのが添付画像。
回答ありがとうございます。
いままでjavaプログラムの実行結果はNetBeansの出力欄で確認していました。
コマンドプロンプトで確認したら正常に動作しました。
No.1
- 回答日時:
■まず、文字コードの変換は不要ではないでしょうか(というか、これでは変換になっていないと思いますが・・・)
素直に、SQLをそのままで。
ResultSet rs = stmt.executeQuery("SELECT * FROM ハローテーブル");
■次にエラーが文字化けしてわからないので、例外発生時にスタックトレースを取るのではなく、getErrorCode()、getSQLState()を表示させてみてはどうでしょうか。
この回答への補足
回答ありがとうございます。
回答を参考にして以下の部分を変更しました。
final String shiftJIS = "Shift_JIS";
String sql = encode("SELECT * FROM ハローテーブル",shiftJIS);
ResultSet rs = stmt.executeQuery(sql);
↓
ResultSet rs = stmt.executeQuery("SELECT * FROM ハローテーブル");
catch (Exception e) {
e.printStackTrace();
}
↓
catch (SQLException y){
System.out.println(y.getSQLState());
System.out.println(y.getErrorCode());
} catch (Exception e){
e.printStackTrace();
}
static String encode (final String sql, final String charset)
throws UnsupportedEncodingException {
return sql != null ? new String(sql.getBytes(), charset) : null;
}
上記の部分を削除
実行結果は
S0002
-1305
と表示されました。
このSQLStateとErrorCodeはどのような意味を表しているのでしょうか?
またどのようにしたら解決するのでしょうか?
データベースのテーブル名とデータの値が英語ならErrorが起こらないのかもしれませんが日本語を使いたいのでお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java eclipse実行ができない 2 2022/07/27 04:47
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
oracle9iにJDBC接続が出来ない
-
JAVA実行時エラーについて教え...
-
JavaでMp3再生
-
JavaMailでのメール送信
-
Tomcatでエラー
-
gitでバージョン指定してダウン...
-
FCDUtil
-
占いサイトを作りたいのですが...
-
使用しているJUnitのバージョン...
-
WEBクリエーター業
-
OpenGLでの楕円の描き方
-
サイドワインダーのドライバ
-
フレームのデザインを変えたい...
-
DirectX SDKのダウンロード
-
RHEL6.0上で使用可能なJDKとTomcat
-
「C#ができればJavaもできる」...
-
chromedriverのDLについて
-
Eclipseソース開発画面の行番号...
-
ホームページを作る勉強はどの...
-
【 プログラム Java 】何度か挫...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaでのエラーについて
-
java と javax の違いは?
-
javaからデータベースに接続 エ...
-
CLASSPATHを設定しても、『Clas...
-
javacのコンパイルでファイルが...
-
JasperExceptionのエラーログの...
-
マイクラ Ender IO 入れたらク...
-
JAVA実行時エラーについて教え...
-
javaサーブレット upload時
-
System.inをClose()すると例外...
-
Eclipseにdllがうまく読み込めない
-
JSFで、マネージビーンに画面の...
-
propertiesが読み込めなくてnul...
-
javaのGUIツールキット
-
DBから全権検索したデータをjsp...
-
テーブル名が日本語だとクエリ...
-
android-studioがインストール...
-
struts2環境構築で不具合が出て...
-
[JAVA+CSV]カンマ区切りを分解...
-
log4jを使用し、JAVAのバッチプ...
おすすめ情報