• ベストアンサー

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は、あってると思うのですが、何か方言的なことなのでしょうか・・? 回答、宜しくお願います・・。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

SQLの方言と言うのはこんな基礎的なところではでてきません。まだ気にしなくてもいいと思います。 > BETWEEN '6' AND '13' > ↓ > BETWEEN '13' AND '6' > > 両方、試してみました。 > 結果、同じ値が返されてしまいます・・ > 値は・・ > > 3 > 5 BETWEENはある範囲を指定する条件なので、入れ替えても結果が変わりません。これはどんなDBでも変わりません。ですので、同じ結果が返されるのは正常な動作です。 入れ替えて結果が変わるということはまずありえないので、たとえ「入れ替えてみ」と言う人がいてもそんなので結果が変わるはずが無いということを覚えておいたほうがいいと思います。 というか、あの条件指定で全ての結果が返されると言うことは無いはずです。最初の時点では何か間違えていたのではないかと思います。上記の条件指定で3と5が返されると言う状態は正常です。 このような結果がでると言うことはテキスト型で定義されているはずです。具具の値と条件の値を「文字列順」に並べると以下のようになります。 12 13* 3 5 6* 8 9 ので、3と5だけが抽出される結果は正しいのです。SQLを理解していないと難しいかもしれませんが、こういう基礎的なことは重要なので覚えておいたほうがいいと思います。 もし、数値として比較したいのであれば、具具をテキスト型ではなく、数値型にすべきだと思います。数字しか入力されていないのであれば、デザインビューで数値型にするだけで変換できます。 で、SQLを実行すると以下のようになります。 8 9 12

tosio_s
質問者

補足

分かりやすく、的確な回答ありがとうございます。 arakororin さんが、よければ、もう2つ聞かせてください。 1.具具がテキスト型ならば、 12 13* 3 5 6* 8 9 と示してくれました動きを文にすると、 「最初に13より小さい値で、かつ13に近い値を探す。 6より大きい値を探す。」 ですよね・・? 数値型にすると、どういう探し方をするのか知りたいです。 2.数値型にすると、 9 12 8 と言う順番で結果が出ました。 この値の順番が、どのような動きをして出力されたか知りたいです・・。 java なら、API や eclipse のデバッグなど参考に動きを調べたり出来ると思うのですが、データベースの動きを見るには、どのような見方をしたら良いのでしょうか・・? 追加の質問になってしまいましたが、教えてもらうと幸いです・・。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.2

BETWEEN '6' AND '13' ↓ BETWEEN '13' AND '6' ではどうですか?

tosio_s
質問者

補足

回答、ありがとうございます。 BETWEEN '6' AND '13' ↓ BETWEEN '13' AND '6' 両方、試してみました。 結果、同じ値が返されてしまいます・・ 値は・・ 3 5 どっちも同じ値が出ると言う、新たな問題が出ました・・。 String betWeen = "SELECT 具具 FROM goo WHERE 具具 BETWEEN '13' AND '6'"; System.out.println( betWeen ); ResultSet rs = stm.executeQuery( betWeen ); と betWeen を表示させ確認してるのですがね・・。

全文を見る
すると、全ての回答が全文表示されます。
  • ipsum11
  • ベストアンサー率21% (55/251)
回答No.1

エラー内容の通り、データ型が違うのです。よく確認してみてください。 「具具」のデータ型は何?文字?数値?それにより、   具具 BETWEEN ”6” AND ”13”   具具 BETWEEN 6 AND 13 などに変わります。 (条件は数値型に対し、「具具」は文字型になっていませんか?)

tosio_s
質問者

補足

早い回答ありがとうございます。 指摘の通り間違っていました・・。 書き直してみたところ、思い通りのデータが取れないのですが、これこそ、方言なのでしょうか? String betWeen = "SELECT 具具 FROM goo WHERE 具具 BETWEEN '6' AND '13'"; とすると、 3 9 12 5 8 と、具具のデータが全て取れてしまいます・・。 また何か、勘違いしてますでしょうか・・?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • JDBC-ODBC-MDB(日本語テーブル・カラム名)アクセスで、ODBC -1305エラー

    日本語のテーブル名・カラム名を使用したAccess(2000) mdb に JSPおよびServletからJDBC(ODBC経由)でアクセスすると、 SQL実行[executeQuery()]時に下記のエラーが発生します。 getMessage(): [Microsoft][ODBC Microsoft Access Driver] getErrorCode(): -1305 getSQLState(): S0002 ただし、 1.Javaアプリケーションから直接JDBC(ODBC経由)でアクセスすると正常に動作します(ResultSet取得)。 2.JSP・サーブレットからのアクセスでも、   2-1.テーブル名・カラム名がascii文字のテーブルの場合   2-2.テーブル名・カラム名が日本語でも、SQLで使わない場合      例:SELECT now()   の場合は、 正常に動作します(ResultSet取得)。 JSP Servletは   contentType="text/html; charset=Windows-31J"   pageEncoding="windows-31j" で、保存形式は 日本語Shift_JISです。 出力画面表示に文字化けはありません。 作業環境はノートPC1台で、  Tomcat: 5.5.27 JDK/JRE : 1.6.0_07  Eclipse: 3.4.2  OS:Vista Ultimate SP1  ODBCデータソース:システムDNS Microsoft Access Driver(*.mdb) 6.00.6001.18000 ODBCJT32.DLL です。 諸兄のお知恵を拝借お願いします。 ※エラーコードの内容は? ※どのあたりを調べればよいか? ========================= Servletの場合のStackTraceなど -- getMessage:[Microsoft][ODBC Microsoft Access Driver] getErrorCode:-1305 getSQLState:S0002 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111) at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253) ========================= JSPの場合のStackTraceなど -- getMessage:[Microsoft][ODBC Microsoft Access Driver] getErrorCode:-1305 getSQLState:S0002 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111) at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253) at org.apache.jsp.TestODBC_jsp._jspService(TestODBC_jsp.java:95) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)

  • JDBC:ODBCでaccess db にデータをInsertするとき、構文エラーがでました

    insert into InMoneys(Source,Money) values('1',99) java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] INSERT INTO ステートメントの構文エラーです。

    • ベストアンサー
    • Java
  • jspでのSQLエラーについて

    MicorsoftAccessをデータベースに使い、 jspを書いたのですが、「java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] パラメータが少なすぎます。1 を指定してください」というエラーが出ました。どこに何をどう書き足せば良いのでしょうか? 教えてください。よろしくお願いします!

  • SQLサーバーのテーブルに対してアクセスで更新クエリを行ないたい

    こんばんは。 ・vista ・アクセス2003 ・SQL Server 2005 です。 SQL ServerからテーブルをMDBへリンクしているのですが そのテーブルに対し、アクセス側で更新クエリを実行しようとすると 実行時エラー '3157': ODBC--リンク テーブル'テーブル名'での更新に失敗しました。 [Microsoft][ODBC SQL Server Driver]時間切れになりました。(#0) と言うエラーになり、更新クエリができません。 どうすればアクセスでSQLサーバーのテーブルに対して更新クエリを行えるのでしょうか? よろしくお願いします。

  • 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
  • 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
  • テーブル名が日本語だとクエリーを実行して結果を取得したときにエラーになる。

    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
  • WebSphere/DB2/ResultSet close/Exception

    WebSphereを使って、Listenerで取得したデータソースを利用していますが、 String sql1 = "SELECT A1 FROM TEST1"; String sql2 = "SELECT B2 FROM TEST2 WHERE B1 = ?"; Connection conn = datasource.getConnection(); PreparedStatement ps1 = conn.preparedStatement(sql1); ResultSet rs1 = ps1.executeQuery(); while(rs1.next()){ PreparedStatement ps2 = conn.preparedStatement(sql2); ps2.setString(1,rs1.getString("A1")); ResultSet rs2 = ps2.executeQuery(); ps2.close(); } このロジックで、ps2をクローズすると、ps1で取得したResultSet rs1がクローズされるというExceptionが発生してしまいます。 (ループして戻ったときにrs1.next()でexceptionが起こる) なにか対処方法があるかご存知の方いらっしゃいましたら、よろしくお願いいたします。

    • ベストアンサー
    • 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
このQ&Aのポイント
  • インクカートリッジがありませんの表示が出たので新しいカートリッジ交換しても解決しない。
  • Windows10で無線LANに接続されている環境で、バッハローというWi-Fiルーターを使用しています。
  • 光回線を使用しています。
回答を見る

専門家に質問してみよう