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

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

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

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

servlet

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

Q&A

1回答

23863閲覧

「オペランド型の不整合: date は int と互換性がありません」のエラーで困っています。

ggpw012857

総合スコア7

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

servlet

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

0グッド

0クリップ

投稿2017/10/17 07:24

編集2017/10/17 08:48

研修でjavaを勉強しています。
SELECT文でデータベースからIDと期間を指定して出力しようとしているのですが、うまくいきません。
よろしくお願いします。

発生している問題・エラーメッセージ
com.microsoft.sqlserver.jdbc.SQLServerException:オペランド型の不整合: date は int と互換性がありません。

該当のソースコード

java

1public class sampleDAO { 2private final String DRIVER_NAME = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 3private final String JDBC_URL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=sampleSUM"; 4private final String DB_USER = "sa"; 5private final String DB_PASS = ""; 6public List<exampleBean> find(String date) { 7Connection conn = null; 8List<exampleBean> examList = new ArrayList<exampleBean>(); 9// DBへ接続 10try { 11Class.forName(DRIVER_NAME); 12conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS); 13String sql = "SELECT * FROM Sample WHERE ID=1000 and YM=?"; 14PreparedStatement pStmt = conn.prepareStatement(sql); 15pStmt.setString(1, date); 16// SELECT文の実行 17ResultSet rs = pStmt.executeQuery(); 18while (rs.next()) { 19int h1 = rs.getInt("h1"); 20int h2 = rs.getInt("h2"); 21int h3 = rs.getInt("h3"); 22int h4 = rs.getInt("h4"); 23ExampleBean example = new ExampleBean(h1, h2, h3, h4); 24exampleList.add(example); 25} 26} catch (SQLException e) { 27e.printStackTrace(); 28return null; 29} finally { 30if (conn != null) { 31try { 32conn.close(); 33} catch (SQLException e) { 34e.printStackTrace(); 35return null; 36} 37} 38return examList; 39} 40}

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

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

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

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

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

guest

回答1

0

int h1 = rs.getInt("h1");
int h2 = rs.getInt("h2");
int h3 = rs.getInt("h3");
int h4 = rs.getInt("h4");

上記の記述でh1,h2,h3,h4カラムを全てintでとってますが、date型のカラムのものがあるのでは?
date型のものは
Date h = rs.getDate("h");
でとれると思いますよ。

投稿2017/10/17 09:28

kkss

総合スコア13

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

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

ggpw012857

2017/10/18 00:20

ご回答ありがとうございます。 申し訳ございません。説明不足でした。 date型のカラムもあるのですが、そのデータはリストに格納しません。 findメソッドでdateの値をとってきて"?"に組み込むようなイメージになればいいと考えています。
kkss

2017/10/18 01:48 編集

あー、そうなのですね。失礼しました。 dateとintの互換性だとそこかなと思ったのですが...。 どの行の処理でエラーを吐いてます? sqlの実行でなのか、処理後の結果からの取り出しでなのか。 あとは、引数dateの中身を確認、dateを組み込んだ後のsql文を確認してみて 実現したい形になってるか。
ggpw012857

2017/10/18 06:18

一旦データベースのテーブルをもう一度作り直してみたところ「オペランド型の不整合: date は int と互換性がありません」のエラーは解決しましたが、SQLのデータが画面に表示されません。 引数dateの中身は入力した値(例:2016-01-01など)が取れていました。 また、setStringの後にSystem.out.println(sql);を加えてみましたが、SELECT * FROM Sample WHERE ID=1000 and YM=?と?の部分がそのままでした。 うまく値がセットできていないのでしょうか? よろしくお願い致します。
kkss

2017/10/18 09:30

pStmt.setString(1, date); この行でバインド変数に値をセットしていると思うので、変数sqlはそのままです。 エラーが出てないのであれば、処理自体は上手くいってると思うのでその先が上手くいってないと思いますよ。 h1,・・・,h4の値の確認と、returnするexamListの中身を確認してみるといいと思います。
Libbynaylor

2023/09/04 04:59 編集

データベーステーブルの「YM」列のデータ型を確認する必要があります。日付または文字列の場合は、Java コードで互換性のある値を渡していることを確認してください。整数であることが想定されている場合、SQL クエリではそれを日付や文字列と比較すべきではありません。 https://www.yourtexasbenefits.bid/
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問