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

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

新規登録して質問してみよう
ただいま回答率
87.20%
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に必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

解決済

JDBCでSQLのSyntaxエラーが起きてしまいます。

Yakusugi
Yakusugi

総合スコア70

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に必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

2回答

0評価

0クリップ

456閲覧

投稿2021/12/14 10:29

編集2021/12/15 07:19

JDBCを使ってCUIベースのデータベースアプリを作成しております。
下記、86,87行目で記述しているInsert文でSyntaxエラーが起きているのですが、DBeaverで同じSQLを実行するとデータを入れることは出来ました。
何故JDBCではエラーが起きるのか、ヒントがあればご教示頂けますと幸いです。
String sql = "INSERT INTO budget_table(id,Date,StoreName, ProductName, ProductType, Price) " + "VALUE (?,?,?,?,?,?)";

エラー内容 2021/12/15 15:49

Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method setDate(int, java.sql.Date) in the type PreparedStatement is not applicable for the arguments (int, java.util.Date) at BudgetTrackerCui/com.jdbc.budgettracker.dao.BudgetTrackerDao.insertIntoTable(BudgetTrackerDao.java:93) at BudgetTrackerCui/com.jdbc.budgettracker.main.BudgetTrackerMain.main(BudgetTrackerMain.java:130)

BudgetTrackerDao.java

package com.jdbc.budgettracker.dao; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Time; import java.util.Date; import java.util.ArrayList; import java.util.List; import java.util.Properties; import com.jdbc.budgettracker.core.BudgetTrackerDto; public class BudgetTrackerDao { BudgetTrackerDto btd; private Connection myConn; private PreparedStatement mySmt; private static final String SELECTALL = "select * from budget_table;"; // private static final String SELECTBYSTORENAME = "select * from budget_table where store name = ?;"; private static Connection getConnection() { try { // get db properties Properties props = new Properties(); props.load(new FileInputStream( "/home/yosuke/git/BudgetTrackerCui/BudgetTrackerCui/sql/config_budgettracker.properties")); String user = props.getProperty("user"); String password = props.getProperty("password"); String dburl = props.getProperty("dburl"); // Class.forName(RDB_DRIVE); Connection con = DriverManager.getConnection(dburl, user, password); return con; } catch (Exception e) { throw new IllegalStateException(e); } } // select all public List<BudgetTrackerDto> selectAll() throws FileNotFoundException, IOException { List<BudgetTrackerDto> budgetList = new ArrayList<>(); try (Connection conn = BudgetTrackerDao.getConnection(); PreparedStatement ps = conn.prepareStatement(SELECTALL)) { try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { btd = new BudgetTrackerDto(); btd.setId(rs.getInt("ID")); btd.setDate(rs.getDate("Date")); btd.setStoreName(rs.getString("StoreName")); btd.setProductName(rs.getString("ProductName")); btd.setProductType(rs.getString("ProductType")); btd.setPrice(rs.getInt("Price")); budgetList.add(btd); } } } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { } return budgetList; } public int insertIntoTable(BudgetTrackerDto btd) throws SQLException { int rowsCount = 0; PreparedStatement pstmt; try { // DBに接続 myConn = BudgetTrackerDao.getConnection(); // pstmt = (PreparedStatement) myConn.createStatement(); // String sql = "INSERT INTO budget_table(id,Date,StoreName, ProductName, ProductType, Price) " + "VALUE('" // + btd.getId() + "','" + btd.getDate() + "','" + btd.getStoreName() + "','" + btd.getProductName() + "','" + btd.getProductType() // + "','" + btd.getPrice() + "')"; String sql = "INSERT INTO budget_table(id,Date,StoreName, ProductName, ProductType, Price) " + "VALUE (?,?,?,?,?,?)"; pstmt = myConn.prepareStatement(sql); pstmt.setInt(1, btd.getId()); Date date = btd.getDate(); long timeInMilliSeconds = date.getTime(); java.sql.Date date1 = new java.sql.Date(timeInMilliSeconds); pstmt.setDate(2, date1); pstmt.setString(3, btd.getStoreName()); pstmt.setString(4, btd.getProductName()); pstmt.setString(5, btd.getProductType()); pstmt.setInt(6, btd.getPrice()); // SQL文発行 pstmt.executeUpdate(); System.out.println("Suucessfully added"); pstmt.close(); //rowsCount = pstmt.executeUpdate(sql); } catch (SQLException e) { System.out.println("Errorが発生しました!\n" + e + "\n"); } finally { // リソースの開放 if (mySmt != null) { try { mySmt.close(); } catch (SQLException ignore) { } } if (myConn != null) { try { myConn.close(); } catch (SQLException ignore) { } } } return 0; } }

BudgetTrackerDto.java

package com.jdbc.budgettracker.core; import java.util.Date; public class BudgetTrackerDto { private int id; private Date date; private String storeName; private String productName; private String productType; private int price; public BudgetTrackerDto() { } public BudgetTrackerDto(int id, Date date, String storeName, String productName, String productType, int price) { super(); this.id = id; this.date = date; this.storeName = storeName; this.productName = productName; this.productType = productType; this.price = price; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Date getDate() { return date; } public void setDate(Date insertDate) { this.date = insertDate; } public String getStoreName() { return storeName; } public void setStoreName(String storeName) { this.storeName = storeName; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public String getProductType() { return productType; } public void setProductType(String productType) { this.productType = productType; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } }

BudgetTrackerMain.java

package com.jdbc.budgettracker.main; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.SQLException; import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; import com.jdbc.budgettracker.core.BudgetTrackerDto; import com.jdbc.budgettracker.dao.BudgetTrackerDao; public class BudgetTrackerMain { 一部省略 switch (initialNumInt) { case 2: // Insert int insertcannerInt = 0; System.out.println("You chose " + initialSwitchMap.get(2)); budgetTrackerDto = new BudgetTrackerDto(); Scanner insertScanner = new Scanner(System.in); System.out.print("Input an ID: "); int insertScannerInt = insertScanner.nextInt(); budgetTrackerDto.setId(insertScannerInt); System.out.print("Input Date (yyyy-MM-dd): "); String insertScannerStr = insertScanner.next(); Date insertDate=(Date) new SimpleDateFormat("yyyy-MM-dd").parse(insertScannerStr); budgetTrackerDto.setDate(insertDate); System.out.print("Input a store name: "); insertScannerStr = insertScanner.next(); budgetTrackerDto.setStoreName(insertScannerStr); System.out.print("Input a product name: "); insertScannerStr = insertScanner.next(); budgetTrackerDto.setProductName(insertScannerStr); System.out.print("Input a product type: "); insertScannerStr = insertScanner.next(); budgetTrackerDto.setProductType(insertScannerStr); System.out.print("Input price: "); insertScannerStr = insertScanner.next(); insertcannerInt = Integer.parseInt(insertScannerStr); budgetTrackerDto.setPrice(insertcannerInt); budgetTrackerDao = new BudgetTrackerDao(); budgetTrackerDao.insertIntoTable(budgetTrackerDto); } } }

画像 2021/12/15/11:49
イメージ説明

画像 2021/12/15/12:21
イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806

2021/12/14 10:56

本当にこの通りならエラーにならないような。 MySQLは構文上 VALUESもVALUEも使えるようですし。 バージョン幾つですか?
Yakusugi

2021/12/14 10:58

バージョンは8.0.27です。
m.ts10806

2021/12/14 10:58

ただ、コード内は良いのですが、質問文内の String sql = "INSERT INTO budget_table(id,Date,StoreName, ProductName, ProductType, Price) " + "VALUE (?,?,?,?,?,?)"; これ、全角スペース入ってます。
Yakusugi

2021/12/14 11:27

ご指摘ありがとうございます。 全角スペースが入ってるとの事ですが、どこに入っていますでしょうか。 私の方でもう一度確認し、スペースを全て半角にして再トライみましたが、Syntaxエラーが出てしまいます。
jimbe

2021/12/14 13:34 編集

SQL を指定した executeUpdate が 2 回もありますけど、 prepareStatement("~") したのでしたら executeUpdate にはパラメータは要らないはずでは。 コメントアウトしてあるデータベタ書きの INSERT 文のコードそのままにパラメータを使うコードを入れたせいでしょうか。
m.ts10806

2021/12/14 19:42

コードブロック内ではなく文章上の String sql = "INSERT INTO budget_table(id,Date,StoreName, ProductName, ProductType, Price) " + "VALUE (?,?,?,?,?,?)"; [ ]+ ↑ここ

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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に必要なデータを格納できます。また、格納したデータを引き出すことも可能です。