前提・実現したいこと
Javaで銀行システムを実装しています。
JDBCを使用してデータベースへ接続しSQLによるデータベースへのアクセスと実行結果の受け取りを行います。
getメソッドは引数で指定された口座情報をデータベースから読み出し、Accountクラスのオブジェクトを作成し戻り値として返します。口座が存在しない場合はnullを返します。
以上の機能を実装中にエラーメッセージが発生しました。
発生している問題・エラーメッセージ
java.lang.StackOverflowError
該当のソースコード
java
1import java.sql.DriverManager; 2import java.sql.Connection; 3import java.sql.Statement; 4import java.sql.ResultSet; 5import java.sql.SQLException; 6 7public class DBtable{ 8 private String user = ""; 9 private String password = ""; 10 private String db_url = ""; 11 12 public Account get(String name){ 13 String myName;//読みだす口座名 14 int myBalance;//読みだした残高を入れる変数 15 Connection conn = null;//データベースへの接続 16 Statement stmt = null;//SQL文の実行用オブジェクト 17 try{ 18 //データベースからデータを読み出す 19 conn = DriverManager.getConnection(db_url, user, password); 20 stmt = conn.createStatement(); 21 22 String sql = "SELECT * FROM customer WHERE name ='"+name+"'"; 23 ResultSet rs = stmt.executeQuery(sql); 24 if(rs.next()){ 25 myBalance = rs.getInt("balance");//変数への残高の格納 26 } 27 rs.close(); 28 }catch(SQLException e){ 29 return null;//エラーは表示せずnullを返す 30 }finally{ 31 try{ 32 if(stmt != null) { 33 stmt.close(); 34 } 35 if(conn != null) { 36 stmt.close(); 37 } 38 }catch(SQLException e){ 39 return null;//エラーは表示せずnullを返す 40 } 41 } 42//後処理 戻り値となるAccountオブジェクトの生成 43 Account myAccount = new Account(name); 44 myAccount.deposit(myBalance); 45 return myAccount; 46 }
Java
1public class Bank{ 2 private DBtable customer;//口座リスト 3 4 public Bank(){//口座リストを初期化 5 customer = new DBtable(); 6 } 7 8 public int open(String name){//口座開設 9 Account x = customer.get(name); 10 if(x == null){ 11 Account myName = new Account(name); 12 customer.put(name,myName);//口座開設 13 int balance = customer.get(name).showBalance(); 14 return 0; 15 }else{ 16 return -7; 17 18 } 19 }
試したこと
Hashtableクラスを使用した場合は問題なく動きました。
DBtableクラスへ変更するとエラーが起きてしまいます。
DBtableクラスのgetメソッドをBankクラスで呼び出しています。
あなたの回答
tips
プレビュー