• 締切済み

Accessで日本語を使っていると実行時にエラーになる。

Microsoft Accessでデータベースを作成した。そのデータベースを使って、JdbcOdbcDriverでMicrosoft Accessから 値を取得しようとするとテーブル名とフィールド名に日本語を使っているときに以下の部分でエラーになります。 テーブル名とフィールド名には日本語を使いたいのですがどのようにすればよいでしょうか? String sql = "SELECT * FROM 整理" ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ int no = rs.getInt("番号"); } テーブル名とフィールド名を英語にしたらエラーは消えました。

  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

  • public_sa
  • ベストアンサー率52% (13/25)
回答No.1

Shift_JIS <-> Unicode だからだめなんじゃないでしょうか? 下記みたいな関数をひとつつくって static String encode (final String sql, final String charset) throws UnsupportedEncodingException { return sql != null ? new String(sql.getBytes(), charset) : null; } final String shiftJIS = "Shift_JIS"; String sql = encode("SELECT * FROM 整理", shiftJIS); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ int no = rs.getInt(encode("番号"), shiftJIS); } みたいにしたらどうでしょうか。 でも日本語を使う前におなじサイト内からですが 下記も参考にしてみてください。

参考URL:
http://oshiete1.goo.ne.jp/qa1827785.html
a1gdx2s
質問者

お礼

回答ありがとうございます。 いままでjavaプログラムの実行結果はNetBeansの出力欄で確認していました。 コマンドプロンプトで確認したら正常に動作しました。

関連するQ&A

  • テーブル名が日本語だとクエリーを実行して結果を取得したときにエラーになる。

    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) 文字コードの変換がうまくいかないのだと思いますがどうすれば良いかわかりません。 どのようにしたら解決するでしょうか? またおそらくクエリーを実行して結果の取得の部分以外にも データが日本語なので値の取得の部分で希望の結果にならないと思います。 どのようにすれば良いでしょうか?

    • ベストアンサー
    • Java
  • ResultSetインターフェイスでの next() の使い方

    データベースからSQLをつかって受注件数を取得したい時に、なぜ、下記のように next() をしなければいけないのかが分かりません。 初心者なので、出来ましたら詳しく教えてください。 お願いします。 int count = 0 ; Statement stmt = con.createStatement() ; String sql = "select count(*) from 受注" ; ResultSet res = stmt.executeQuery(sql) ; if (res.next()) { count = res.getInt(1) ; }

    • ベストアンサー
    • Java
  • NetBeansではAccessのファイルから取得したデータを出力欄に表示できないのですか?

    開発環境にNetBeansを使っています。以下のプログラムを実行したときに出力欄に実行成功と表示されますが、データの値が表示されません。 コマンドプロンプトからの実行結果ではデータの値を表示しました。 どのようにすれば表示するのでしょうか? import java.sql.*; public class Main { static final String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb"; static final String sql = "SELECT * FROM ハローテーブル"; public static void main(String[] args) { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection(str, "", ""); Statement stmt = con.createStatement(); System.out.println(sql); 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.getStackTrace(); } } }

    • ベストアンサー
    • Java
  • access での BETWEEN

    access2000 のテーブルから、SQL BETWEEN の処理が、うまく行きません・・。 環境 win2k VM 1.4.1_03-b02 テーブルは、  id    具具  1    3  2    9  3    12  4    5  5    8 なカンジです。 コードは、 String betWeen = "SELECT 具具 FROM goo WHERE 具具 BETWEEN 6 AND 13"; ResultSet rs = stm.executeQuery( betWeen ); エラー内容は、 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 抽出条件でデータ型が一致しません。 です。 SQLは、あってると思うのですが、何か方言的なことなのでしょうか・・? 回答、宜しくお願います・・。

    • ベストアンサー
    • Java
  • データベースへのアクセスエラーについて

    はじめまして!大学でデータベースを学んでいるのですが、以下のプログラムを実行した際、「式の型が一致しません」というエラーが出ます。またアクセスしているテーブルmeiboにはフィールドに,IDと名前shakai,eigoなどのテーブルには,IDと得点(それぞれの科目の名前)がフィールドにあります。 よろしければ、ご回答よろしくお願いいたします。 import java.io.*; import java.sql.*; public class Ex1 { public static void main(String[] args) { Connection conn = null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:ex1"); Statement stmt = conn.createStatement(); BufferedReader r = new BufferedReader(new InputStreamReader(System.in), 1); System.out.print("学籍番号を入力してください : "); System.out.flush(); String number = r.readLine(); String select = "SELECT * from meibo,kokugo,sansuu,shakai,rika,eigo " + "where meibo.ID=kokugo.ID=sansuu.ID=shakai.ID=rika.ID=eigo.ID"; ResultSet rs = stmt.executeQuery(select); while(rs.getString("ID")!=number) rs.next(); // System.out.printf("%s\t",rs.getString("name")); System.out.printf("%s\t"," 国語 "+rs.getString("kokugo")); System.out.printf("%s\t"," 算数 "+rs.getString("sansuu")); System.out.printf("%s\t"," 社会 "+rs.getString("shakai")); System.out.printf("%s\t"," 理科 "+rs.getString("rika")); System.out.printf("%s\n"," 英語 "+rs.getString("eigo")); stmt.close(); conn.close(); } catch (Exception e) { System.out.println(e); } } }

  • JavaでOracle9iのデータベースにアクセスしたいのですが

    JavaでOracleのデータベース上のテーブルにアクセスして、 ウェブブラウザで表示したいのですが、 参考として以下の文を入手はしたのですが、 それぞれの文の意味がよく分かりません。 import java.sql.*; public class JDBCExample { public static void main(String args[]) throws SQLException { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@dlsun137:5521:sol1", "scott", "tiger"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select ename, empno, sal from emp"); while(rs.next()){ String name= rs.getString(1); int number = rs.getInt(2); double salary = rs.getDouble(3); System.out.println(name+" "+number+" "+salary); } rs.close(); conn.close(); } } 見た感じ、テーブルそのものを表示する記述ではないような気がするのと、 仮にこのクラスを作ったとして、このクラスだけで望んだ結果を得られるのでしょうか? どなたか、よろしくお願いいたします!

    • ベストアンサー
    • Java
  • データベースから取得したデータを配列に格納できません。

    jTableにSQL文の結果を表示させようとして結果を以下のように配列に 格納しようとしました。 public String[][] Serch(){ int i=0; String[][] rowData; String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=helloTable.mdb"; try { // ドライバクラスをロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // データベースへ接続 Connection con = DriverManager.getConnection(str, "", ""); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM ハローテーブル"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ // NOを取得 String no = String.valueOf(rs.getInt("NO")); // 言語を取得 String lang = rs.getString("言語"); // メッセージを取得 String msg = rs.getString("メッセージ"); rowData[i][0] = no; rowData[i][1] = lang; rowData[i][2] = msg; i++; } stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } return rowData; } このメソッドで得た配列を表示させようとすると以下の結果が表示されます。 java.lang.NullPointerException 正常なSQL文の結果は以下の通りです。 1 日本語 こんにちは世界 2 英語 Hello World 3 ドイツ語 Hallo Welt 配列の行数はSQL文の結果の行数に合わせたかったのですがうまくいきません。 どのように直せばSQL文の結果を配列にすべて格納できるでしょうか?

    • ベストアンサー
    • Java
  • getStringの値がNULLの時の処理

    DB:SQL Server 2005 JDBCを使ってデータベースへアクセスし、SQL発行して結果をResultsetに格納、getStringで各項目の値を取得するところまでは確認できています。 外部結合したテーブルを参照していおり、getString()でnullを取得した場合にjava.lang.NullPointerExceptionが返ってエラーとなってしまいます。 回避策はあるのでしょうか? 抜粋したソースを下記に記します。 -- test.jsp -- <% ResultSet rs = db.executeQuery(sql); while(rs.next()){ String disp_object = rs.getString("object"); if(disp_object == null) disp_object="---"; } %> <tr>Object</tr> <tr><%=disp_object%></tr>

    • ベストアンサー
    • Java
  • JDBC PostgreSQLで必要なファイルはあるのでしょうか?

    LinuxでPostgreSQLのデータベースをJDBCでアクセスしたいのですが、以下のソースで次のエラーが発生します。何か必要なファイルでもあるのでしょうか? java.lang.ClassNotFoundException:org.postgres.Driver また、LinuxのODBCも必要なファイルがあるのでしょうか? import java.sql.*; class jdbcSample2 { public static void main(String argv[]) { int a; String b; try { //Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); //String url = "jdbc:odbc:test"; Class.forName ("org.postgres.Driver"); String url = "jdbc:postgresql://127.0.0.1:5432/test"; String user = ""; String password = ""; Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement (); String query = "select * from member;"; ResultSet rs = stmt.executeQuery (query); while(rs.next()){ a = rs.getInt(1); b = rs.getString(2); System.out.println(a + ", " + b); } rs.close(); stmt.close(); con.close(); } catch (SQLException ex) { System.err.println("SQL failed."); ex.printStackTrace (); } catch (Exception ex) { ex.printStackTrace (); } } }

  • JSPで複数のSQL実行について教えて下さい

    JSPで複数のSQLを実行したいと思い、作ってみましたがページが全く表示されません。 SQL分が違う気がするのですがどこが悪いのか分りません。 ご教示下さいませ。ソースのせます。 <%@page contentType="text/html; charset=Windows-31J"%> <%@page import="java.sql.*"%> <%! // サーブレットのinitメソッドに相当 public void jspInit() { try { // JDBCドライバをロード Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (Exception e) { e.printStackTrace(); } } %> <HTML> <HEAD> <TITLE>結果</TITLE></HEAD> <BODY> <CENTER> <B>結果</B> <TABLE border="3"> <TR> <TD>年齢</TD> <TD>氏名</TD> </TR> <% // データベースへのアクセス開始 Connection con = null; Statement stmt = null; ResultSet rs = null; try { // データベースに接続するConnectionオブジェクトの取得 con = DriverManager.getConnection("jdbc:sqlserver:ServerName;DatabaseName=Name","ID","PW"); // データベース操作を行うためのStatementオブジェクトの取得 stmt = con.createStatement(); if (request.getParameter("buttonA") != null) { // テキストボックスの値を取得 String paramA = request.getParameter("NamA"); // SQL()を実行して、結果を得る rs = stmt.executeQuery("SELECT * FROM TABLE_A where 年齢='"+ paramA +"'"); rs = stmt.executeQuery("SELECT * FROM TABLE_B where 年齢='"+ paramA +"'"); } if (request.getParameter("buttonB") != null) { // テキストボックスの値を取得 String param = request.getParameter("NamB"); // getParameterの値を文字列へ変換 String paramB = new String(param.getBytes("ISO-8859-1"),"Shift_JIS"); rs = stmt.executeQuery("SELECT * FROM TABLE_A where 氏名 like '%"+ paramB +"%'"); rs = stmt.executeQuery("SELECT * FROM TABLE_B where 氏名 like '%"+ paramB +"%'"); } // 得られた結果をレコードごとに表示 while (rs.next()){ String year = rs.getString("年齢"); String name = rs.getString("氏名"); %> <TR> <FORM method="post" action="Next.jsp"> <TD><%= year %></TD> <TD><%= name %></TD> </form> </TD> </TR> <% } } catch (Exception e) { e.printStackTrace(); // エラー表示プログラム out.write(e.getMessage()); } finally { // データベースとの接続をクローズ try { rs.close(); } catch (Exception e) {} try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} } %> </TABLE> </BODY> </HTML>

    • ベストアンサー
    • Java