• 締切済み

データベースからゼロが持って来れない

Java初心者です。(SQLも初心者ですが…) Javaからデータベースの値をResultSetクラスのgetStringメソッドで 持って来ようと思ったのですが、持ってこれなかった。 調べたところ、値が0の項目だったのですが(これはidがゼロということで正しい) getStringで持ってきた値を見たところ、空白でした。 (空白なのかnullなのかはよく分かりません) 環境: OS:Windows7 DB:MySQL 5.1.57-community Community Server (GPL) 開発環境:Eclipse3.7 JDBCドライバ:mysql-connector-java-5.1.17-bin.jar SQL文: create table entry(id char(3),provider char(50),url char(255),blogid char(20),account char(20),password char(20)); ※blogidのところに0が入ります。 insert into entry values ('002','goo','http://blog.goo.ne.jp/xmlrpc.php','0','実際のアカウントIDが入る','実際のパスワードが入る'); Java: Connection users = SQL.getConnection(); Statement state = users.createStatement(); ResultSet result = state.executeQuery("select * from entry"); String id = result.getString("id"); String provider = result.getString("provider"); String url = result.getString("url"); String blogid = result.getString("blogid"); String account = result.getString("account"); String password = result.getString("password"); ※System.out.printlnで確認すると、何も入ってない。 そこで質問ですが、 1.値が0だけ持って来れない(0以外の数値なら持ってこれた)原因は何でしょうか? 2.また、対処方法としては何が考えられるのでしょうか? すみませんが、よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数0

みんなの回答

  • drg75
  • ベストアンサー率34% (98/288)
回答No.2

getStringではなくgetIntでも取れないでしょうか

  • drg75
  • ベストアンサー率34% (98/288)
回答No.1

javaからではなく、直接SQLでデータを表示したらどうなりますでしょうか。 あとはresultで以下のようにnextして読んでみてください。 ResultSet rs = st.executeQuery("・・・"); while(rs.next()) { } blogidに特定の値を許さない制約が無いかも気になります。

macdevelop
質問者

補足

回答ありがとうございます! >javaからではなく、直接SQLでデータを表示したらどうなりますでしょうか。 直接だと以下のように出ます。 ↓ mysql> select * from entry; +------+----------+----------------------------------+--------------+----------------+--------------+ | id | provider | url | blogid | account | password | +------+----------+----------------------------------+--------------+----------------+--------------+ | 001 | fc2 | http://blog.fc2.com/xmlrpc.php | 1192sasagawa | ●● | ●● | | 002 | goo | http://blog.goo.ne.jp/xmlrpc.php | 0 | ●● | ●● | +------+----------+----------------------------------+--------------+----------------+--------------+ >あとはresultで以下のようにnextして読んでみてください。 > >ResultSet rs = st.executeQuery("・・・"); > >while(rs.next()) { すみません。 あまり文章が長くならないように、ソースを端折って記載しました。 長くなりますが、現在のソースはこんな感じです。 Connection users = SQL.getConnection(); Statement state = users.createStatement(); ResultSet result = state.executeQuery("select * from entry"); String[][] para = new String[2][6]; int i = 0; while (result.next()) { String id = result.getString("id"); String provider = result.getString("provider"); String url = result.getString("url"); String blogid = result.getString("blogid"); String account = result.getString("account"); String password = result.getString("password"); para[i][0] = id; para[i][1] = provider; para[i][2] = url; para[i][3] = blogid; para[i][4] = account; para[i][5] = password; System.out.println(para[i][0]); System.out.println(para[i][1]); System.out.println(para[i][2]); System.out.println(para[i][3]); System.out.println(para[i][4]); System.out.println(para[i][5]); i++; } for (int h = 0; h < 2; h++) { for (int j = 0; j < 6; j++) { System.out.println(para[h][j]); } } > >blogidに特定の値を許さない制約が無いかも気になります。 > gooのブログなんですが、goo自体が0の値を入れてアクセスするよう 発表している?(おそらく)ので、0の値を入れています。 何か分かりましたらご教授お願いします。

関連するQ&A

  • データベースへの接続で困ってます

    JSPを関連させてcom.mysql.jdbc.Driverというドライバでデータベースに接続したいのですが、エラーが出てしまってどうすればいいかお手上げ状態になっています。プログラムを貼るので、何かおかしいとこがありましたら教えてもらいたいです。よろしくお願いします。 /*プログラム*/ <%@ page import="java.sql.*" %> <html> <head> <title>データを表示する</title> </head> <body> <% //データベースに接続する Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/sqldb?useUnicode=true&characterEncoding=SJIS"; String user = "matsuzaki"; String password = "matsuzaki"; Connection conn = DriverManager.getConnection(url, user, password); //データを取得する Statement st = conn.createStatement(); String sql = "SELECT * FROM cd"; //実行するSQL ResultSet rs = st.executeQuery(sql); //データを全件表示する out.println("<table border=1>"); while(rs.next()){ out.println("<tr>"); out.println("<td>" + rs.getInt("name") + "</td>"); out.println("<td>" + rs.getString("artist") + "</td>"); out.println("<td>" + rs.getInt("price") + "</td>"); out.println("</tr>"); } out.println("</table>"); //データベース接続を閉じる conn.close(); %> </body> </html>

    • ベストアンサー
    • MySQL
  • intra-martの自動生成DAO

    intra-martを勉強中です。 eBuilder7.2を使用してDAOを自動性すると下記の問題が発生します。 回避方法をご存知でしたらご教示ください。 1)取得レコードが1件のSELECTメソッドを作成した場合  生成ソースのresultSet取得部分が数字の指定になる。  これをカラム名指定にしたい。  result.setEmpCd(resultSet.getString(1));  ->  result.setEmpCd(resultSet.getString("EMP_ID")); 2)取得レコードが複数件(配列)のSELECTメソッドを作成した場合  生成ソースのresultSet取得部分が  ダブルクォーテーション囲みの数字の指定になる。  当然"1"というカラムはないためException発生。  これをカラム名指定にしたい。  result.setEmpCd(resultSet.getString("1"));  ->  result.setEmpCd(resultSet.getString("EMP_ID"));

    • ベストアンサー
    • Java
  • データベースをランダムで読み込む

    [j2SE] Swingでアプリケーションを作っています。 問題集ソフトを作っており、データベースはAccessで作りました。 これを30問分構築しています。 画面のボタンをクリックする度に次の問題をランダムで表示したいのですが、記述が全く分からず困ってしまいました。 下記が現時点でボタンをクリックした時に設定してあるプログラムです。 //データベースに接続する(JDBC->ODBC) try { Connection myCon = null; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); myCon = DriverManager.getConnection("jdbc:odbc:mondai"); Statement mySt = myCon.createStatement(); //データベースからデータを取得する。(SQLのSELECT文) ResultSet myRs = mySt.executeQuery("SELECT * FROM PERSONAL_DATE"); long id = myRs.getLong("ID"); String mon = myRs.getString("問題"); mondai.setText(mon); String senA = myRs.getString("選択支A"); sentaku1.setText(senA); String senB = myRs.getString("選択支B"); sentaku2.setText(senB); String senC = myRs.getString("選択支C"); sentaku3.setText(senC); String senD = myRs.getString("選択支D"); sentaku4.setText(senD); } catch (Exception ex) { }

    • ベストアンサー
    • Java
  • JSP データベースへの数回の接続

     いつもお世話になっております。  今私は、JSPからデータベース(Access 2003)へデータを追加・検索をしようとしています。  データベースにデータを追加するため、データベースを接続する記述及び追加をする記述を書き、データを追加していきます。  その下の記述にHTMLが入り、HTML文の後に今度はデータベースに検索をかけてデータを取得し、その記述の下に更にHTML文を記述し取り込むといった流れでプログラムを書いております。 ■HTML文 ■データベース追加文 ■HTML文 ■データベース検索文 ■HTML(データベースからの取得データもいれる)  しかし、データベースへは、追加はされているのですが、検索の記述の部分がまったく読まれておらず、ジャンプされており、どうしても検索ができません。  JSPからデータベースへの接続は初めてですので、わからないことも多く、もしかしたらJSPでは数回のデータベースへの接続はできないのかな?と思いながら、最終的にこちらで伺い参りました。  プログラムが長いため、HTML文を除き、データベースの部分だけ下に記述させていただきます。その記述の中でのこの変数はどこからもってきているのかな?と思われる方もいらっしゃるかと思いますが、しっかり値が入っておりますので心配ございません。 <%@ page import="java.sql.ResultSet"%> <%@ page import="java.util.*" %> <%@ page import="javax.servlet.*" %> <%@ page import="java.sql.SQLException" %> <%@ page import="java.sql.Connection" %> <%@ page import="java.sql.*" %> <%@ page import="java.util.Date" %> <%@ page import="java.util.Calendar " %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con =null; con = DriverManager.getConnection("jdbc:odbc:QUIZDB"); Statement sql; sql = con.createStatement(); Calendar cal = Calendar.getInstance(); Integer nen=cal.get(Calendar.YEAR); Integer tu=cal.get(Calendar.MONTH)+ 1; Integer hi=cal.get(Calendar.DATE); String userName=(String)session.getAttribute("userName"); Integer userId=(Integer)session.getAttribute("userId"); sql.executeUpdate( "INSERT INTO Seiseki(氏名,ID,ジャンル,正解数,クイズ日付)"+"values('"+userName+"','"+userId+"','"+aa+"','"+seikaiten+"','"+nen+"/"+tu+"/"+hi+"')"); sql.close(); %> <■HTML文がはいります> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection db =null; db = DriverManager.getConnection("jdbc:odbc:QUIZDB"); String sq = "select * from Seiseki where(氏名= '"+userName+"') and (ID = '"+userId+"')"; Statement st; st = db.createStatement(); ResultSet res; res = st.executeQuery(sq); if(res.next()){    String Name=res.getString(1);    String Id=(String)res.getString(2);    Integer id =Integer.parseInt(Id); String jyanru=res.getString(3); String seikai=res.getString(4); int kazu =Integer.parseInt(seikai); String hizu=res.getString(5); } st.close(); %> <■HTML文が入り、変数を入れて表示させます> 以上となります。どんな小さなことでも構いませんので、お手数ですがアドバイス宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • データベース呼び出しに使用するワイルドカードについて

    javaの勉強を始めたばかりの初心者です。 少し場所をお借りさせていただきたいと思います。 1、データベース上に全社員の勤怠を記録したテーブルがあります。(キーは社 員IDとdate型の日付です) 2、ここで、ログイン時にセッション変数に格納した社員IDと指定専用ページ で指定された「年月」を使い、 この社員の1ヶ月分の出勤した日の出勤時刻~休入~休終~退勤時刻(全てtime 型です)を一覧表示したいのです。 ここで、2番で年と月しか指定していないので、 文字列の足し算を行ってもDB上はdate型で型があいません。 ですので年+月+*のようにワイルドカードを使用したいのです。 ResultSet rs=sttSql.executeQuery("SELECT * FROM kintai WHERE id='" + u_id<<社員id>> + "' AND like date='" + gdate<<年+月>> + *"'); のように指定しているのですが、文法エラーが出てしまいます。 単純ミスかも知れませんがそれがわからなくて困っています。。 ちなみに社員idの指定後のSQL文("'AND~~*"')を抜けばコマンドは通ります。 よろしければご教示いただければと思います。 どうかよろしくお願いします。 下記に前後のソースを記載します。 <%@---------%> <!--html文--> <% String gdate=(request.getParameter("year"))+(request.getParameter ("month")); String u_id=session.getAttribute("id").toString(); Context ctx=new InitialContext(); DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/kintai"); Connection db=ds.getConnection(); Statement sttSql=db.createStatement(); ResultSet rs=sttSql.executeQuery("SELECT * FROM kintai WHERE id='" + u_id + "' AND like date='" + gdate + "'); while(rs.next()){ String strDate=rs.getString("date"); String strTbegin1=rs.getString("t_begin"); String strTend1=rs.getString("t_end"); String strRbegin1=rs.getString("r_begin"); String strRend1=rs.getString("r_end"); String strDay=strDate.substring(8,10); String strTbegin2=strTbegin1.substring(0,5); String strTend2=strTend1.substring(0,5); String strRbegin2=strRbegin1.substring(0,5); String strRend2=strRend1.substring(0,5);%> <tr> <td><%=strDay %>日</td> <td><%=strTbegin2 %></td> <td><%=strTend2 %></td> <td><%=strRbegin2 %></td> <td><%=strRend2 %></td> </tr> <!--後始末(close)--> <!--html文-->

  • 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
  • データベースへのアクセスエラーについて

    はじめまして!大学でデータベースを学んでいるのですが、以下のプログラムを実行した際、「式の型が一致しません」というエラーが出ます。またアクセスしているテーブル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); } } }

  • メソッド オーバーロード ete

    こんにちは 今オーバーロードやメソッドについて学習中です 今回作成したのはDB接続の 処理をするほうのクラスなのですが 同じソースはひとつにまとめろといわれました 自分なりに メソッドを作ってまとめてみたのですが まだだめなようです あとどのようにまとめれば 良いとおもいますか? 例文なども出していただけると助かります 一部ソースのせます public String[][] selectExec(String sql, int fromIdx) throws SQLException{ Statement smt = con.createStatement(); //ステートメントオブジェクト作成 SQL文を送るために作成 ResultSet aa=smt.executeQuery(sql); //SQLから要素取得 ArrayList<String> TESTNO = new ArrayList<String>(); //TESTNO用のArrayList作成 ArrayList<String> NAME = new ArrayList<String>(); //NAME用 ArrayList<String> KANA = new ArrayList<String>(); //KANA用 aa.relative(fromIdx-1); //カーソルの位置を移動 while(aa.next()){ TESTNO.add(aa.getString("TESTNO")); NAME.add(aa.getString("NAME")); KANA.add(aa.getString("KANA")); } aa.close(); //使い終わったリザルトクローズ smt.close(); //ステートメントクローズ      //オブジェクトの解放 hairetu(TESTNO,NAME,KANA); //配列に収納するメソッド呼び出し return hairetu(TESTNO,NAME,KANA); } /* * すべての行を取得 */ public String[][] selectExec(String sql) throws SQLException{ Statement smt = con.createStatement(); //ステートメントオブジェクト作成 SQL文を送るために作成 ResultSet aa=smt.executeQuery(sql); //SQLから要素取得 ArrayList<String> TESTNO = new ArrayList<String>(); //TESTNO用ののArrayList作成 ArrayList<String> NAME = new ArrayList<String>(); //KAME用 ArrayList<String> KANA = new ArrayList<String>(); //KANA用 while(aa.next()){ //Resultsetが最終行になるまで実行 TESTNO.add(aa.getString("TESTNO")); NAME.add(aa.getString("NAME")); KANA.add(aa.getString("KANA")); } aa.close(); //使い終わったリザルトクローズ smt.close(); //ステートメントクローズ      //オブジェクトの解放 return hairetu(TESTNO,NAME,KANA); } /* * 指定された行から行を取得 */ public String[][] selectExec(String sql, int fromIdx,int toIdx) throws SQLException{ Statement smt = con.createStatement(); //ステートメントオブジェクト作成 SQL文を送るために作成 ResultSet aa=smt.executeQuery(sql); //SQLから要素取得 ArrayList<String> TESTNO = new ArrayList<String>(); //TESTNO用ののArrayList作成 ArrayList<String> NAME = new ArrayList<String>(); //NAME用 ArrayList<String> KANA = new ArrayList<String>(); //KANA用 aa.relative(fromIdx); while(fromIdx<=toIdx){ TESTNO.add(aa.getString("TESTNO")); NAME.add(aa.getString("NAME")); KANA.add(aa.getString("KANA")); aa.next(); fromIdx++; } aa.close(); //使い終わったリザルトクローズ smt.close(); //ステートメントクローズ      //オブジェクトの解放 return hairetu(TESTNO,NAME,KANA); } public String[][] hairetu(ArrayList T,ArrayList N ,ArrayList K){ String[][]all=new String[3][T.size()]; all[0] = (String[])T.toArray(new String[0]);//配列TSETNOに収納 all[1] = (String[])N.toArray(new String[0]);//配列NAMEに収納 all[2] = (String[])K.toArray(new String[0]);//配列KANAに収納 return all; }/* リストから配列に収納するメソッド。 配列でリターンします */ 下のhairetuメソッドはあとから作成しました。 もうひとつ作ったのですが TEST(TESTNO,aa,"TESTNO"); TEST(NAME,aa,"NAME"); TEST(KANA,aa,"KANA"); 呼び出し↑ メソッド public ArrayList TEST(ArrayList T,ResultSet a ,String s) throws SQLException{ T.add(a.getString(s)); // リストにSQL文を収納 return T; } これは却下されました 見づらいとは思いますが いろいろアドバイスください

    • ベストアンサー
    • Java
  • JDBCプログラミング

    以下のプログラムは、DBkanri.javaというファイル名で、データベースに接続してデータを取得し、取得したデータを表示させるJSPファイルとともに使います。これを、テーブルの作成、レコード追加、フィールド 追加等の更新をし、更新後のデータも取得できるようなプログラムにアレンジしたいのですが、 どなたか、アドバイスください。お願いします。 ちなみに環境は、tomcat3.2.1 JDK1.3.1_02MS Access2000です。 package Kadai; import java.sql.*; public class DBkanri{ private String driver; private String url; private String user; private String password; private Connection connection; private Statement statement; private ResultSet resultset; public DBkanri(){ driver="sun.jdbc.odbc.JdbcOdbcDriver"; url="jdbc:odbc:CONNECTION"; user="abcde"; password="12345"; } public synchronized void open() throws Exception { Class.forName(driver); connection=DriverManager.getConnection(url, user, password); statement=connection.createStatement(); } public ResultSet getResultSet(String sql) throws Exception { if ( statement.execute(sql) ){ return statement.getResultSet(); } return null; } public void execute(String sql) throws Exception { statement.execute(sql); } public synchronized void close() throws Exception { if( resultset != null ) resultset.close(); if( statement != null ) statement.close(); if( connection != null ) connection.close(); } }

  • jspのプログラムについて

    jspについて質問です。 現在入力されたパスワードとデータベースに保存してあるパスワードを比較して一緒であれば idを削除するというプログラムを組んでいます。 削除することはできないのですが、 比較がうまくいきません。 <% //postされたもの String id = request.getParameter("id"); String password =request.getParameter("password") Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(urlやpassword、userが書いてある); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); Statement stmt=conn.createStatement(); ResultSet res = st.executeQuery("select * from data where id ="+id); while(res.next()){ String pass =res.getString("pass"); //データベースからパスワードを取得 out.println("<td>" + password + "</td>"); out.println("<td>" + pass + "</td>"); if(password==pass){ //入力されたパスワードと比較 //ここにはidを削除する文が書かれている } } st.close(); conn.close(); やっているのですが、if文に入って削除してくれません。 out.printlnはいりませんがちゃんと値があっているか確かめたところ 入力された文字とデータベースに入っている文字がちゃんと表示されました。 教えてください。よろしくお願いします。