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

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

新規登録して質問してみよう
ただいま回答率
85.47%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

1回答

16805閲覧

「SQLServerException: インデックス 1 は範囲外です。」のエラーが発生して困っています。

tsubannn

総合スコア6

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2021/04/21 07:00

研修で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; } }

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

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

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

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

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

sazi

2021/04/21 07:11

どのように実行しているのでしょうか?
y_waiwai

2021/04/21 07:11

どの行でエラーが出てるんんでしょう
m.ts10806

2021/04/21 07:12

>研修で まず講師に聞いては。
guest

回答1

0

バインドする値に''で囲う必要ないです。バインド時に型にあわせて適切に処理されます。

投稿2021/04/21 07:37

m.ts10806

総合スコア80852

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問