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

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

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

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

SQL

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

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。

Q&A

解決済

1回答

3942閲覧

バインド変数を使いDBに接続する方法 CREATE TABLE

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

SQL

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

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。

0グッド

0クリップ

投稿2020/06/11 00:08

編集2020/06/11 01:01

以下のエラーが発生し困っています。
色々と試してみましたが根本的な原因が何なのか分かっていないので解決策が見つかりません。
(コードの書き方がおかしいのか、DB側がおかしいのか)

以下コードの
copcod、empnum、knjnamsei、knjnammei
の変数の中には値が入っている事、確認済です。
使用しているDBはMySQLです。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and empnum =? and knjnamsei =? and knjnammei =?' at line 1 SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルをチェックして、近くで使用する正しい構文を確認してください。そしてエンプナム=?そしてクジュナムセイ=?そして、1行目で「クジュナムメイ=?」
### 該当のソースコード con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/local_db?useUnicode=true&characterEncoding=utf8", "root", "id"); System.out.println("MySQLに接続できました。"); String sql = "delete from t_users where copcod= ? and empnum =? and knjnamsei =? and knjnammei =?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, copcod); stmt.setString(2, empnum); stmt.setString(3, knjnamsei); stmt.setString(4, knjnammei); ```ここに言語名を入力 Java

CREATE TABLE t_users (
copcod varchar(4) NOT NULL,
empnum varchar(8) NOT NULL,
knjnamsei varchar(40) DEFAULT NULL,
knjnammei varchar(40) DEFAULT NULL,
PRIMARY KEY (copcod,empnum)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

TABLE定義 ``````ここに言語を入力 package MVC; import java.io.IOException; import java.sql.*; import javax.servlet.ServletException; public class UsersDelete { private int result; private String resultCopcod; private String resultEmpnum; private String resultKnjnamsei; private String resultKnjnammei; public String getresultDelreteCopcod() { return this.resultCopcod; } public String getresultDelreteEmpnum() { return this.resultEmpnum; } public String getresultDelreteKnjnamsei() { return this.resultKnjnamsei; } public String getresultDelreteKnjnammei() { return this.resultKnjnammei; } public int getResult() { return this.result; } public void processing(String copcod, String empnum, String knjnamsei, String knjnammei) throws ServletException, IOException { Connection con = null; try { // JDBCドライバのロード - JDBC4.0(JDK1.6)以降は不要 Class.forName("com.mysql.jdbc.Driver"); // MySQLに接続 con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/local_db?useUnicode=true&characterEncoding=utf8", "root", "id"); System.out.println("MySQLに接続できました。"); String sql = "delete from t_users where copcod= ? and empnum =? and knjnamsei =? and knjnammei =?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, copcod); stmt.setString(2, empnum); stmt.setString(3, knjnamsei); stmt.setString(4, knjnammei); int result = stmt.executeUpdate(sql); System.out.println("更新件数は" + result + "です。"); this.result = result; this.resultCopcod = copcod; this.resultEmpnum = empnum; this.resultKnjnamsei = knjnamsei; this.resultKnjnammei = knjnammei; } catch (ClassNotFoundException e) { System.out.println("JDBCドライバのロードに失敗しました。"); } catch (SQLException e) { System.out.println("MySQLに接続できませんでした。"); System.out.println(e.getMessage()); } finally { if (con != null) { try { con.close(); } catch (SQLException e) { System.out.println("MySQLのクローズに失敗しました。"); } } } } }

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

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

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

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

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

Orlofsky

2020/06/11 00:16

質問のテーブル定義はCREATE TABLEに修正してください。
退会済みユーザー

退会済みユーザー

2020/06/11 00:29

ご指摘ありがとうございました!
YT0014

2020/06/11 00:49

t_users のテーブル情報(テーブル定義)をご提示ください。 また、sqlを実行している箇所のコードも、お願いします。
YT0014

2020/06/11 01:00

可能であれば、スタックトレースなどからエラーが発生している行を特定して、明示してください。
guest

回答1

0

ベストアンサー

int result = stmt.executeUpdate(sql);

この呼出しは、sqlの文字列を、バインドなどを無視して、そのまま実行する処理です。

正しい処理は、
int result = stmt.executeUpdate();
です。

投稿2020/06/11 01:06

YT0014

総合スコア1719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問