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

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

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

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

Java

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

servlet

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

Q&A

解決済

1回答

6725閲覧

シーケンスを使用してDBにデータを登録したい

nagahi

総合スコア8

JDBC

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

Java

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

servlet

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

0グッド

1クリップ

投稿2020/03/28 03:49

編集2020/03/28 03:56

サーブレットからPostgreSQLにJDBCを使用してデータを登録したいのですが。
シーケンスを使用して登録する方法がわからず、ご教授いただきたいです。
※シーケンスにより自動採番されたテーブルは作成済みです

java

1 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9import java.util.List; 10 11import model.Question; 12 13 14public class QestionDAO { 15// データベースに使用する情報 16 private final String jdbc_url ="jdbc:postgresql://localhost:5432/QandA"; 17 private final String user = "postgres"; 18 private final String pass = "abcd"; 19 20static{ 21 try{Class.forName("org.postgresql.Driver"); 22} catch(ClassNotFoundException e) { 23 e.printStackTrace(); 24 } 25} 26 27public boolean create(Question question) { 28// データベース接続 29try(Connection conn = DriverManager.getConnection(jdbc_url, user, pass)) { 30// INSERT文の準備 31String sql = "INSERT INTO question(hanle_name, title, contents, urgency, edit_delete_key, regist_timestamp, update_timestamp) VALUES(?, ?, ?, ?, ?, ?, ?)"; 32 33PreparedStatement pStmt = conn.prepareStatement(sql); 34 35//INSERT文の「?」に使用する値を設定しSQLを完成 36pStmt.setString(1, question.getHandle_name()); 37pStmt.setString(2, question.getTitle()); 38pStmt.setString(3,question.getContents()); 39pStmt.setInt(4, question.getUrgency()); 40pStmt.setString(5, question.getEdit_delete_key()); 41pStmt.setString(6, question.getRegist_timestamp()); 42pStmt.setString(7, question.getUpdate_timestamp()); 43 44//INSERT文を実行 45int result = pStmt.executeUpdate(); 46if(result != 1) { 47 return false; 48 } 49} catch (SQLException e){ 50 e.printStackTrace(); 51} 52return true; 53}

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

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

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

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

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

guest

回答1

0

ベストアンサー

シーケンステーブル作られたのでしたらそのテーブルに対してnextval()を実行します。
すると「現在地から1段階(設定次第)進められた数値」が返ってくるので、そちらを利用します。

投稿2020/03/28 05:16

m.ts10806

総合スコア80850

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

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

nagahi

2020/03/29 04:20

ありがとうございます。 回答いただいた方法で実施してみます。
m.ts10806

2020/03/29 05:41

実施して、実現してから解決済みにしてください。
nagahi

2020/03/29 05:55

無知ですみません、どの部分でnextval()を使用すれば良いですか? 調べてみたら、prepeardStatement実行のところでRETURN_GENERATED_KEYSを 追加するよう記載があり、実施してみてたのですが、できませんでした。
m.ts10806

2020/03/29 06:02

RETURN_GENERATED_KEYS なんて私が提示した記事にもないはずですけど。 ひとまずいったんJavaは置いといて、PostgreSQL直にログインしてシーケンステーブルに対して実行してみてください。 提示した記事にサンプルもあるはずです。 実行結果を確認し、実行後にテーブル確認してみたら良いです。 ただ、「実行すると現在地から1段階(設定次第)進められた数値が返ってくるので、そちらを利用します。」 と書いてますが、この文章でどこが分かりませんか?
nagahi

2020/04/19 02:19

ご回答ありがとうございます。 返信遅くなりすみません。 INSERT文の1にquestion_idを追加、 値の設定の際に下記のコードを追加致しました。 pStmt.setString(1, question.nextval(question_id_seq)); この場合、question_id_seqを変数に解決できません とエラーが発生するのですが、 この記載方法の不備がありますでしょうか。 または、それ以外のところで変更必要箇所が発生するのでしょうか。
m.ts10806

2020/04/19 02:41

SQLを実行してないからです。 nextval()はあくまでSQLです。 Javaのコードになってます。実行できないのは当然です。
nagahi

2020/04/21 11:21

すみません、質問にご回答いただいていたのにもかかわらず 通知が来てなく、気づかずに別で質問を立ててしまいました。 いろいろご教授いただきありがとうございました。
m.ts10806

2020/04/21 11:23 編集

来てないことないと思いますよ。 気づかないとか忘れるのは誰でもあるので仕方ないですが、自身がした質問くらいは自身で管理するようにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問