前提・実現したいこと
eclipseのDAOクラス
122行目でpostgreSQLのテーブルからserial型のidを取得しようとしています。
実行した場合に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
org.postgresql.util.PSQLException: この ResultSet に列名 id ありません。
該当のソースコード
Java
1 2public class AddressBookDAO { 3 public List<AddressBook> findAll() { 4 5 Connection conn = null; 6 List<AddressBook> addressBookList = new ArrayList<AddressBook>(); 7 8 try { 9 10 //JDBCドライバを読み込み 11 Class.forName("org.postgresql.Driver"); 12 13 //データベースへ接続 14 conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/addressbookuser", "postgres", "THacE3raf1L2"); 15 16 //SELECT文を準備 17 String sql = "SELECT * FROM addressbook"; 18 PreparedStatement pStmt = conn.prepareStatement(sql); 19 20 //SELECTを実行し、結果表を取得 21 ResultSet rs = pStmt.executeQuery(); 22 23 //結果表に格納されたレコードの内容をAddressBookUserに設定し、ArrayListインスタンスに追加 24 while(rs.next()) { 25 String id = rs.getString("id"); 26 String name = rs.getString("name"); 27 String gender = rs.getString("gender"); 28 String phonenumber = rs.getString("phonenumber"); 29 String emailaddress = rs.getString("emailaddress"); 30 String postalcode = rs.getString("postalcode"); 31 String address1 = rs.getString("address1"); 32 String address2 = rs.getString("address2"); 33 String address3 = rs.getString("address3"); 34 String address4 = rs.getString("address4"); 35 String address5 = rs.getString("address5"); 36 String birth = rs.getString("birth"); 37 String age = rs.getString("age"); 38 String birthplace = rs.getString("birthplace"); 39 AddressBook addressBook = new AddressBook(id, name, gender, phonenumber, emailaddress, postalcode, address1, address2, address3, address4, address5, birth, age, birthplace); 40 addressBookList.add(addressBook); 41 } 42 }catch(SQLException e) { 43 e.printStackTrace(); 44 return null; 45 }catch(ClassNotFoundException e) { 46 e.printStackTrace(); 47 return null; 48 }finally { 49 //データベースを切断 50 if(conn != null) { 51 try { 52 conn.close(); 53 }catch(SQLException e) { 54 e.printStackTrace(); 55 return null; 56 } 57 } 58 } 59 return addressBookList; 60 } 61 62 public boolean delete(String id) { 63 64 Connection conn = null; 65 66 try { 67 68 //JDBCドライバを読み込み 69 Class.forName("org.postgresql.Driver"); 70 71 //データベースへ接続 72 conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/addressbookuser", "postgres", "THacE3raf1L2"); 73 74 //DELETE文を準備 75 String sql = "DELETE FROM addressbook WHERE id = ?"; 76 PreparedStatement pStmt = conn.prepareStatement(sql); 77 78 //DELETE文中の「?」に使用する値を設定してSQLを完成 79 int deleteId = Integer.parseInt(id); 80 pStmt.setInt(1, deleteId); 81 82 //DELETE文を実行し、結果表を取得 83 int deleteCount = pStmt.executeUpdate(); 84 85 if(deleteCount != 0) { 86 return true; 87 }else { 88 return false; 89 } 90 91 }catch(SQLException e) { 92 e.printStackTrace(); 93 return false; 94 }catch(ClassNotFoundException e) { 95 e.printStackTrace(); 96 return false; 97 }finally { 98 //データベースを切断 99 if(conn != null) { 100 try { 101 conn.close(); 102 }catch(SQLException e) { 103 e.printStackTrace(); 104 return false; 105 } 106 } 107 } 108 } 109 110 //idが一番大きいレコードのidを返す 111 public String resister() { 112 Connection conn = null; 113 114 try { 115 116 //JDBCドライバを読み込み 117 Class.forName("org.postgresql.Driver"); 118 119 //データベースへ接続 120 conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/addressbookuser", "postgres", "THacE3raf1L2"); 121 122 //SELECT文を準備 123 String sql = "SELECT MAX(id) FROM addressbook"; 124 PreparedStatement pStmt = conn.prepareStatement(sql); 125 126 //SELECTを実行し、結果表を取得 127 ResultSet rs = pStmt.executeQuery(); 128 129 //結果表に格納されたレコードの内容をidインスタンスに追加 130 String id = ""; 131 while(rs.next()) { 132 id = rs.getString("id"); 133 } 134 if(id != "") { 135 return id; 136 }else { 137 return ""; 138 } 139 }catch(SQLException e) { 140 e.printStackTrace(); 141 return null; 142 }catch(ClassNotFoundException e) { 143 e.printStackTrace(); 144 return null; 145 }finally { 146 //データベースを切断 147 if(conn != null) { 148 try { 149 conn.close(); 150 }catch(SQLException e) { 151 e.printStackTrace(); 152 return null; 153 } 154 } 155 } 156 } 157} 158 159
試したこと
コンソールでSQL文を実行したところ問題なく実行されました。
デバックしたところ、143行目を実行しようとしたところ例外へ飛びました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/19 06:24