研修でjavaを学習しており、
SELECT文でデータベースからIDと期間を指定して出力しようとしているのですが、エラーがでてうまくいきません。
エラーの原因がわからない為、教えていただきたいです。
宜しくお願い致します。
##発生している問題・エラーメッセージ
org.postgresql.util.PSQLException: 列インデックスは範囲外です: 1 , 列の数: 0
##該当のソースコード
package service; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.text.SimpleDateFormat; import java.util.Calendar; import bean.EmployeeBean; /** * ・社員情報検索サービス * * @author s.nanaumi * @since 2019/12/02 * */ public class EmployeeService { // 問① 接続情報を記述してください /** ドライバーのクラス名 */ private static final String POSTGRES_DRIVER = "org.postgresql.Driver"; /** * ・JDMC接続先情報 ポート番号(5432, 5433など)は個人で異なる可能性があります。 * 念の為、pgAdminにて対象のpostgreSQLバージョンよりメニューを開き、[プロパティ] -> [接続] を確認してください */ private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/Employee"; /** ・ユーザー名 */ private static final String USER = "postgres"; /** ・パスワード */ private static final String PASS = "postgres"; /** ・タイムフォーマット */ private static final String TIME_FORMAT = "yyyy/MM/dd HH:mm:ss"; // 問② 入力されたIDを条件にログイン時間を更新するUPDATE文 /** ・SQL UPDATE文 */ private static final String SQL_UPDATE = "UPDATE employee_table SET login_time = '?' where id = '?' "; // 問③ 入力されたIDとPassWordを条件と合致するデータを検索するSELECT文 /** ・SQL SELECT文 */ private static final String SQL_SELECT = "SELECT * from employee_table where id = '?' and password = '?' "; EmployeeBean employeeData = null; // 送信されたIDとPassWordを元に社員情報を検索するためのメソッド public EmployeeBean search(String id, String password) { Connection connection = null; Statement statement = null; ResultSet resultSet = null; PreparedStatement preparedStatement = null; try { // データベースに接続 Class.forName(POSTGRES_DRIVER); connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS); statement = connection.createStatement(); // 処理が流れた時間をフォーマットに合わせて生成 Calendar cal = Calendar.getInstance(); SimpleDateFormat sdFormat = new SimpleDateFormat(TIME_FORMAT); // PreparedStatementで使用するため、String型に変換 String login_time = sdFormat.format(cal.getTime()); /* * 任意のユーザーのログインタイムを更新できるように、プリペアドステートメントを記述。 */ // preparedStatementに実行したいSQLを格納 preparedStatement = connection.prepareStatement(SQL_UPDATE); // 問④ preparedStatementを使って、第一引数に現在時刻を、第二引数にIDをセットしてください。 preparedStatement.setString(1, login_time); preparedStatement.setString(2, id); // 問⑤ UPDATEを実行する文を記述してください。 preparedStatement.executeUpdate(); /* * UPDATEが成功したものを即座に表示 任意のユーザーを検索できるように、プリペアドステートメントを記述。 */ preparedStatement = connection.prepareStatement(SQL_SELECT); // 問⑥ preparedStatementを使って、第一引数にIDを、第二引数にPASSWORDをセットしてください。 preparedStatement.setString(1, id); preparedStatement.setString(2, password); // SQLを実行。実行した結果をresultSetに格納。 resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { // 問⑦ tmpName,tmpComment,tmpLoginTimeに適当なデータを格納してください。 String tmpName = resultSet.getString("name"); String tmpComment = resultSet.getString("comment"); String tmpLoginTime = resultSet.getString("login_time"); // 問⑧ EmployeeBeanに⑦で取得したデータを格納してください。 // ※以下一部訂正※ employeeData = new EmployeeBean(); employeeData.setName(tmpName); employeeData.setComment(tmpComment); employeeData.setLogin_Time(tmpLoginTime); } // forName()で例外発生 } catch (ClassNotFoundException e) { e.printStackTrace(); // getConnection()、createStatement()、executeQuery()で例外発生 } catch (SQLException e) { e.printStackTrace(); } finally { try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } return employeeData; } }