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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

Q&A

解決済

1回答

291閲覧

javaでpostgressqlに接続しインサートしようとすると型が違いでインサートできない

edmame

総合スコア21

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

0グッド

0クリップ

投稿2024/11/28 01:58

編集2024/11/28 04:00

イメージ説明実現したいこと以下の環境下でjavaからGUIを表示して、
日付(YYYY-MM-DD),社員ID,金額を入力して
sales表にインサートする。
ご教示お願い致します。

環境 Windows10
psql (PostgreSQL) 16.3
java openjdk 11.0.16.1 2022-08-12 LTS
DB構造

postgres=# \d sales
テーブル"public.sales"
列 | タイプ | 照合順序 | Null 値を許容 | デフォルト
--------------+---------------+----------+---------------+----------------------------------------
sale_id | integer | | not null | nextval('sales_sale_id_seq'::regclass)
employee_id | integer | | |
date | date | | not null |
sales_amount | numeric(10,2) | | not null |

事象:日付の型が違うというメッセージがでる。
型はdate型なので、問題なく見える。

以上の環境下でインサートしようとすると
rg.postgresql.util.PSQLException: ERROR: 列"date"は型dateですが、式は型character varyingでした ヒント: 式を書き換えるかキャストする必要があります。
とエラーになってしまいます。

ソース

引用テキスト

import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.Date; // Dateクラスをインポート
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class SalesEntryApp extends JFrame {
private JTextField dateField;
private JTextField employeeIdField;
private JTextField salesAmountField;
private JButton submitButton;

public SalesEntryApp() { createView(); setTitle("Sales Entry"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(300, 200); setLocationRelativeTo(null); setResizable(false); } private void createView() { JPanel panel = new JPanel(); getContentPane().add(panel); panel.setLayout(new GridLayout(4, 2)); JLabel dateLabel = new JLabel("Date (YYYY-MM-DD):"); panel.add(dateLabel); dateField = new JTextField(); panel.add(dateField); JLabel employeeIdLabel = new JLabel("Employee ID:"); panel.add(employeeIdLabel); employeeIdField = new JTextField(); panel.add(employeeIdField); JLabel salesAmountLabel = new JLabel("Sales Amount:"); panel.add(salesAmountLabel); salesAmountField = new JTextField(); panel.add(salesAmountField); submitButton = new JButton("Submit"); submitButton.addActionListener(new SubmitButtonActionListener()); panel.add(submitButton); } private class SubmitButtonActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { String dateString = dateField.getText(); Date date = Date.valueOf(dateString); // 文字列をjava.sql.Dateに変換 int employeeId = Integer.parseInt(employeeIdField.getText()); double salesAmount = Double.parseDouble(salesAmountField.getText()); // デバッグメッセージを追加 System.out.println("Date: " + date); System.out.println("Employee ID: " + employeeId); System.out.println("Sales Amount: " + salesAmount); // データベースに接続してデータを挿入 String url = "jdbc:postgresql://localhost:5432/postgres"; String user = "postgres"; String password = ""; String query = "INSERT INTO sales (date, employee_id, sales_amount) VALUES (?, ?, ?)"; try (Connection con = DriverManager.getConnection(url, user, password); PreparedStatement pst = con.prepareStatement(query)) { pst.setDate(1, date); // setStringの代わりにsetDateを使用 pst.setInt(2, employeeId); pst.setDouble(3, salesAmount); pst.executeUpdate(); JOptionPane.showMessageDialog(null, "Sales data submitted successfully!"); } catch (SQLException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage()); } } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new SalesEntryApp().setVisible(true); } }); }

}

引用テキスト

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

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

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

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

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

edmame

2024/11/28 02:56

コマンドプロンプトからインサートするとインサートできます。 C:\work\apache-maven-3.9.9\sales-entry-app>psql -U postgres psql (16.3) "help"でヘルプを表示します。 postgres=# INSERT INTO sales (employee_id, date, sales_amount) VALUES postgres-# (1, '2024-11-27', 100.00); INSERT 0 1 postgres=# select * from sales; sale_id | employee_id | date | sales_amount ---------+-------------+------------+-------------- 1 | 1 | 2024-11-01 | 100.00 2 | 2 | 2024-11-01 | 150.00 3 | 3 | 2024-11-02 | 200.00 4 | 1 | 2024-11-03 | 250.00 5 | 2 | 2024-11-03 | 300.00 6 | 1 | 2024-11-27 | 100.00 (6 行)
jimbe

2024/11/28 03:08

コードのご提示には「コードのマークダウン」(```だけの行で前後を囲む)をご利用ください。
jimbe

2024/11/28 03:24

ドライバは何を使われていますか?
edmame

2024/11/28 05:42 編集

>ドライバは何を使われていますか? 以下となります。 postgresql-42.7.4.jar
guest

回答1

0

自己解決

自己解決出来ました。
修正すべきソースファイルの対象が間違っていました。

投稿2024/11/28 09:38

edmame

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問