![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で動かしたのが添付画像。
![「テーブル名が日本語だとクエリーを実行して」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/f/64512_5497dee88483e/M.jpg)
回答ありがとうございます。
いままでjavaプログラムの実行結果はNetBeansの出力欄で確認していました。
コマンドプロンプトで確認したら正常に動作しました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?8acaa2e)
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ランキング
-
struts2環境構築で不具合が出て...
-
EclipseのJDBCドライバーについて
-
java と javax の違いは?
-
javacのコンパイルでファイルが...
-
JAVA実行時エラーについて教え...
-
-Applet表示でのjava.lang.Clas...
-
Javaでのエラーについて
-
propertiesが読み込めなくてnul...
-
javaのマニュアルをローカルに...
-
カウントダウンがうまくいかない!
-
javaのGUIツールキット
-
複素関数はどこはあんまりやら...
-
vba クリップボードクリアにつ...
-
JSPファイルで生じるエラーをど...
-
gitでバージョン指定してダウン...
-
データベースのデータをTextBox...
-
使用しているJUnitのバージョン...
-
JavaとAndroidアプリ(Java)違...
-
IISワーカープロセスが原因でCP...
-
IIS6.0アプリケーションプール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaでのエラーについて
-
java と javax の違いは?
-
struts2環境構築で不具合が出て...
-
JAVA実行時エラーについて教え...
-
DBから全権検索したデータをjsp...
-
CLASSPATHを設定しても、『Clas...
-
javacのコンパイルでファイルが...
-
JAVAでYYYYMMDDhhmm形式の文字...
-
javaからデータベースに接続 エ...
-
JasperExceptionのエラーログの...
-
-Applet表示でのjava.lang.Clas...
-
javaサーブレット upload時
-
マイクラ1.7.10にcutallなどが...
-
[JAVA+CSV]カンマ区切りを分解...
-
Java コンソールが起動しない
-
$_SERVER['HTTP_USER_AGENT'] ...
-
jdk-1_5_0_07でのコンパイルエラー
-
Tomcatでエラー
-
EclipseのJDBCドライバーについて
-
javaでtcpヘッダを自前で作成す...
おすすめ情報