• 締切済み

jspでMysql検索で困っています。

jspでMysql検索で困っています、 コマンド画面で下記の入力をすると条件の検索が出来ます。 select * from kanagawa where fish like '%コイ%'; (8件中検索されるのは1件でそれが表示されます) jspで命令すると、違う結果が返されてきます。 String sql; sql="select * from kanagawa where fish like '%コイ%'"; ResultSet rs=db.executeQuery(sql); 最初は変数でテーブル名等受け取っていたのですがうまくいかなかったので直接検索文を入れたのですが結果は同じく違う物が検索されてしまいます。(fishのフィールド8件中5件が結果としてでます。) 何を調べても間違いなさそうですが・・ どうにもならず困っています、助けてください、お願いします。

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

みんなの回答

回答No.2

MySQL - 日本語対応について http://tmtm.org/mysql/japanese.html mregexp - MySQLで日本語の正規表現を扱う http://www.irori.org/tool/mregexp.html 環境設定もいいけど、その友人さんにこっそりとMySQLのバージョンを教えてもらう、っていうのも一つの方法かと。

  • __LINE__
  • ベストアンサー率100% (1/1)
回答No.1

>(fishのフィールド8件中5件が結果としてでます。) 検索結果としてはあっているのでしょうか? 恐らくはずしてる回答だと思いますが、文字コードの指定はあっていますか。 例)SJISの場合 DriverManager.getConnection("jdbc:MySQL://localhost/hogehoge?characterEncoding=SJIS&user=xxxx&password=yyyyyyyy");

haru-taka
質問者

補足

ありがとうございます、 文字コードも合っているのですが・・ 友人のとこのPCで試してもらったら結果がきちんと1件表示されました。 環境設定もう一度してみます。

関連するQ&A

  • jspとsqlの連結したページ

    <%@ page import="java.sql.*" %> <% //パラメータの取得 String keyword = request.getParameter("keyword"); //ドライバーのロード Class.forName("com.mysql.jdbc.Driver"); //DBに接続 String url = "jdbc:mysql://localhost/java4z?useUnicode=true&characterEncoding=MS932"; String user = "root"; String pass = ""; Connection con = DriverManager.getConnection(url,user,pass); //SQL発行先ほど指定したConnection con を利用 Statement stmt = con.createStatement(); String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ; ResultSet rs = stmt.executeQuery(sql);%> jspとmysqlの連動したページを作っているのですが select count(*) from テーブル名;を使い 件数を表示(XX件目など)させたいのです さらに値段からXX円以上からXX円以下なども データから検索し表示させたいのですが String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ;の部分をどのように記述すればよいか 解かりません! どなたかお願いします☆()

    • ベストアンサー
    • MySQL
  • MySQLでアンダーバーを検索

    JDBCを使ってMySQLにアクセスしようと、以下のようなプログラムを書いたのですが、executeQueryでエラーが出てしまいます。 検索したいデータ(100100_0001)に、アンダーバー(_)が入っているので、それが問題であるような気がします。 説明が分かり難くてすいませんが、どなたか助けていただけますでしょうか。 非常に困っております。。。 エラー内容================================================= java.sql.SQLException: General error message from server: "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (sjis_japanese_ci,COERCIBLE) for operation '='" =========================================================== プログラム=========================================================== String a ; String b : String key ; ResultSet rs; a = "100100" ; b = "0001" ; key = a + "_" + b ; //↑これを key = a + "\_" + b ; とすると、「エスケープ文字が不正です」となってコンパイルが通りませんでした sql = "SELECT * from quote_dtl WHERE qd_id = " + "\'" + key + "\'"; rs_dtl = stmt.executeQuery(sql) ; ===========================================================

    • ベストアンサー
    • Java
  • jspでの表示の仕方

    下記のような、jspへの受け渡しができずにいます。 ご回答お願いします。 Servletは、 String query = "SELECT * FROM test"; ResultSet resultset = statement.executeQuery( query ); request.setAttribute("obj",resultset); ServletContext context = getServletContext(); RequestDispatcher rd = context.getRequestDispatcher("/kekka.jsp"); rd.forward(request,respons); とした時、jsp側で、 <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ page import = "java.sql.*" %> <%! ResultSet rs = (ResultSet)request.getAttribute("obj"); %> <% While(rs.next()){String hinmei = rs.getString("hinmei");} %> <html> <head> <title>JSP</title> </head> <body> <table border="0"> <tr> <td><%=hinmei%></td> </tr> </table> </body> </html> と、したいのですが、白い画面になりjspの表示ができません。 やはり、ResultSetオブジェクトのAttributeはできないのでしょうか? それとも、jspの構文に問題があるのでしょうか? Vector、Stringは、この形のやり方で表示できたのですが・・・。 間違いを指摘してください。 よろしくお願いします。

    • ベストアンサー
    • 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
  • MySQLで日本語検索をする時の書き方

    現在JDBCを用いてデータの管理システムを構築しています。 その中で登録したデータをキーワードから検索し、表示させたいのですが…。 日本語文を検索するためには '%keyword%' としなければならないという風にあり、実際にMySQL上でやって見たときはうまく検索されました。 しかし、ソースで書くとなった時の文章がわからないので教えてもらえませんでしょうか。 現在以下のような文になっています。 ResultSet result = state.executeQuery (" select * from database where summary like binary \"" + keyword + "\"") \""や+の扱いが良くわからず、また探してみても探しきれませんでした。 宜しくお願いします。

    • ベストアンサー
    • Java
  • 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
  • MySQLとJavaでのコードについて。

    JavaBeanを使って、MySQLにデータを追加したいのですが、それがなかなかうまくいかず質問してます。 Statement statement = connection.createStatement(); String sql_str ="INSERT INTO customer VALUES(\"" +name+"','"+email+"','"+password+"\")"; int r=statement.executeUpdate(sql_str); このコードはjavaBeanのなかに入っており、name,email,passwordはjspからjavabeanに送られてきます。多分、VALUESの後のname,emai,passwordを入れるのに”’などの使い方が間違ってると思います。本には載ってなかったので、ウェッブ検索してみよう見真似でやったので、”’の使い方を把握してません。誰か分かる方回答お願いします。 あとこれとは違うmethodにSELECT文を使った時、 String sql_str = "SELECT email, password FROM customer where email='"+email+"'AND password='"+password+"'"; ResultSet rs = stmt.executeQuery(sql_str);とやったときは動きました。最初はこれと同じようにINSERT 文も書いたのですが、動かなかったんですよね。

    • ベストアンサー
    • Java
  • mysqlのmatch() against()で検索結果が取得できませ

    mysqlのmatch() against()で検索結果が取得できません。 select * from fulltexttable where match( a ) against( '+ほげ' in boolean mode ) で検索結果は0件ですが、 select * from fulltexttable where a like '%ほげ%' だと検索結果は取得できます。 aカラムにはフルテキストインデックスは貼ってあります。 mysqlのバージョンは5.0.77 hogeテーブルはMyISAM どなたか助けてください。

  • MySQLにおける検索結果

    Windows2000のIISでMySQLをインストールしました。 インストール自体はうまくいき、 また、ODBCを入れてAccessから接続もできるようにしました。 ところが、このAccessから検索をしたところ、 検索結果がおかしいのです。 【環境】 Windows2000 IIS MySQL Ver.3.23.38 Access2000 【検索SQL】 Select * from table where name like 'て% 【結果】 name ----- ゆきたに ゆら 上記のように「name」の上1文字が「て」で 始まるデータとしたはずなのに、「ゆ」で始まるデータが 出てきてしまいました。 同じく上1文字が「と」で始まるデータで検索をしても、 同じ結果が出ています。 念のため、likeではなく、Left(name,2) = 'て'又は'と'で 検索もしましたが、同じ結果でした。 何が悪いのでしょうか? よろしくお願いします。

  • 検索結果の表示

    失礼いたします。 SQL文を使って「"select from table where no like '%"50"%' limit"+ page+ ",10」みたいな感じでやっております。 それで、一つ問題があるのですが、検索結果が10件に満たない場合、例えば4件ヒットした場合でも、画面には全く表示されなくなります。 これはどのように解決したらいいのでしょうか? よろしくお願いします。m(__)m

    • ベストアンサー
    • Java

専門家に質問してみよう