質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

1回答

8403閲覧

データベースから、値を取得したい

kenken2525

総合スコア8

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

1クリップ

投稿2020/03/19 04:48

編集2020/03/23 02:13

前提・実現したいこと

Javaにて、データベースを取り扱うプログラミングを行った際、テーブル内のデータを取得する方法がわからないのですが、どうすればよろしいでしょうか?
一応自分が考えた方法で、取得しようとしたのですが、SQLExcepemsion例外へと流れてしまいます。
助けてください。

発生している問題・エラーメッセージ

値が挿入されず、falseを返してしまう。
while文の部分を素通りしてしまうため!マークを付け加えたりもしてみましたが駄目でした。

errorcode

1org.postgresql.util.PSQLException: 適切な位置にいない ResultSetです。おそらく、nextを呼ぶ必要があります。 2 at org.postgresql.jdbc.PgResultSet.checkResultSet(PgResultSet.java:2772) 3 at org.postgresql.jdbc.PgResultSet.getString(PgResultSet.java:1894) 4 at dao.UserDAO.loginCheck(UserDAO.java:25) 5 at servlet.LoginConterollerServlet.doPost(LoginConterollerServlet.java:54) 6 at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) 7 at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 8 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 9 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 10 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 11 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 12 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 13 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 14 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 15 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491) 16 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 17 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 18 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) 19 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 20 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 21 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) 22 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 23 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764) 24 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388) 25 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 26 at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) 27 at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) 28 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 29 at java.base/java.lang.Thread.run(Thread.java:844) 30

該当のソースコード

該当のコードです。

java

1package dao; 2 3import java.sql.Connection; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7import java.util.ArrayList; 8import java.util.List; 9 10import model.dao.UserBean; 11 12 13public class UserDAO { 14 15 16 //ログイン処理メソッド 17 public boolean loginCheck(String id,String pass) throws SQLException,ClassNotFoundException{ 18 try (Connection con=ConnectionManager.getConnection()){ 19 String sql="SELECT * FROM accounttable"; 20 PreparedStatement pStmt=con.prepareStatement(sql); 21 List<UserBean> userlist=new ArrayList<>(); 22 ResultSet re=pStmt.executeQuery(); 23 while(!re.next()) { 24 UserBean user=new UserBean(); 25 user.setId(re.getString(1)); 26 user.setName(re.getString(3)); 27 user.setPassWord(re.getString(2)); 28 user.setLevel(re.getInt(4)); 29 userlist.add(user); 30 } 31 32 for(UserBean user1:userlist) { 33 if(user1.getId().equals(id)&&user1.getPassWord().equals(pass)) { 34 return true; 35 }else { 36 return false; 37 } 38 39 } 40 return false; 41 42 }catch(SQLException e) { 43 e.printStackTrace(); 44 } 45 return false; 46 47 48 } 49 50 51 52 53 54 55 56 57} 58

テーブルです
イメージ説明

補足

元は、教科書から引っ張ってきました

追記です。

java

1while(re.next()) { 2 String id=re.getString("ID"); 3 String pass=re.getString("PASSWORD"); 4 String name=re.getString("NAME"); 5 int lavel=re.getInt("LEVEL"); 6 UserBean user=new UserBean(id,pass,name,lavel); 7 userList.add(user); 8 }

これで、テーブルからデータを格納できているのでしょうか?
教えていただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/03/19 05:17

折角下記でexceptionを出力しているのですから確認してみては? > e.printStackTrace(); いずれにしてもその出力内容を提示されないことにはアドバイスしようがありません。
m.ts10806

2020/03/19 05:19

>一応自分が考えた方法で、 なにも参考にせず書いたわけではないと思うので、参考先をご提示ください。 また、「書いた通りに動く」ので「オレが考えたコード」で動かないのは当然と言えば当然です。 所定の手続きを経ているか、環境は整っているか、ひとつひとつ確認してください。
storm3

2020/03/19 06:40 編集

提示したコードはエラーが発生したときの状態でしょうか? スタックトレースと提示されたコードに従えば、25行目の「user.setId(re.getString(1));」でエラーになったということですが、 そもそも「while(!re.next()) {」となっているので25行目を通ることはないと思います。 いろいろ試されているようなので、 たぶん、エラーがでたときはnext()を呼ばずに、直接getString()していたのではないでしょうか?
kenken2525

2020/03/19 10:52

そうですね、デバックした感じだと、while通って、getStringしてエラー発生してfalseを返した感じですね
kenken2525

2020/03/23 02:55

やはり、教科書だと、while(rs.next())でデータを取得していたので、変えた所、テーブルにデータがない処理をしてしまい、エラーは吐きませんが、思った通りに動いてはくれないです
storm3

2020/03/23 03:55

まず、テーブルからデータが取れてない点を疑ってみてはどうでしょうか? SELETC文で指定したテーブルが存在しない場合は、SQLエラーになるのでこれは考えられません。 次にテーブルは存在するけどレコードが0件の場合は、while(rs.next())の処理に入りません。 この場合可能性として、DBが2つあって、それぞれにaccounttableを作成していて、片方はデータがあるけど、片方はデータがないという状況で、データがない方のDBにつないでいるとかではないですか?
kenken2525

2020/03/23 04:00

ありがとうございます。 その線で考えてみます
storm3

2020/03/23 05:08

追記 DBがひとつでもスキーマ違いでaccounttableテーブルを作ってる可能性などもあります。 JAVAに書いているselect文のテーブル名にスキーマ指定していないので、もし、DB接続のユーザがアドミニ権限ユーザだった場合はpublicの方を参照しにいっている可能性もあります。 その場合は、接続ユーザを別のユーザに変えてみるか、もしくはselect文のテーブル名にスキーマを指定するか。 頑張ってください。
guest

回答1

0

自己解決

テーブルがちゃんと作成されておらず、データベースから作成しなおしたら動作しました!!

投稿2020/03/24 04:54

kenken2525

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問