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

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

新規登録して質問してみよう
ただいま回答率
85.46%
A5:SQL Mk-2

A5:SQL Mk-2は、フリーのSQL開発ツールです。高機能で軽量、且つ分かりやすいことを目指して開発されました。SQLの実行やテーブル編集などの機能に加え、簡単な操作によりDB定義書やER図を自動生成することも可能です。

PostgreSQL

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

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Q&A

解決済

2回答

16227閲覧

存在しているはずの列からデータを取得できない。### Cause: org.postgresql.util.PSQLException: ERROR: 列"s002"は存在しません

Rivermouth

総合スコア19

A5:SQL Mk-2

A5:SQL Mk-2は、フリーのSQL開発ツールです。高機能で軽量、且つ分かりやすいことを目指して開発されました。SQLの実行やテーブル編集などの機能に加え、簡単な操作によりDB定義書やER図を自動生成することも可能です。

PostgreSQL

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

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

0グッド

0クリップ

投稿2020/08/31 03:26

編集2020/08/31 04:42

MyBatisを用いて、DBから指定したカラムを取得し、出力するという単純なWebアプリケーションを作っているのですが、SQL文にwhere句を指定すると、

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:

Error querying database. Cause: org.postgresql.util.PSQLException: ERROR: 列"s002"は存在しません

Position: 72

The error may exist in URL [jar:file:/Applications/Eclipse_2020-06.app/Contents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web_sample/WEB-INF/lib/apl_dao-0.0.1-SNAPSHOT.jar!/mapper/sample/SampleMapper.xml]

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: select sample_name, sample_id from public.sample_table where sample_id=S002;

Cause: org.postgresql.util.PSQLException: ERROR: 列"s002"は存在しません

Position: 72
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: 列"s002"は存在しません
Position: 72

というエラーが出てしまいます。

試したこと

select * from sample_table where sample_id=S002;
↓変更
select sample_name, sample_id from public.sample_table where sample_id=S002;
結果は変わらず。

DB情報

イメージ説明

SampleMapper.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="group.study.dev.dao.sample.SampleDao"> <select id="selectAll" resultType="group.study.dev.dto.sample.SampleDto"> select sample_name, sample_id from public.sample_table where sample_id=S002; </select> </mapper>

### その他
select * from sample_table;
where句を指定せずに、全て取得するようにすると問題なく取得できました。
where句を指定するとエラーになってしまいます。

追記

UserController

package group.study.dev.sample.search.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import group.study.dev.dto.sample.SampleDto; import group.study.dev.sample.search.model.UserModel; import group.study.dev.sample.search.service.UserService; import group.study.dev.web.common.controller.AbstractController; @Controller public class UserController extends AbstractController { @Autowired private UserService userService; @RequestMapping("/search") public void init(UserModel userModel, Model model) { List<SampleDto> listAll = userService.selectAll(); model.addAttribute("listAll", listAll); System.out.println("listAll=" + listAll); } }

UserService

package group.study.dev.sample.search.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import group.study.dev.dao.sample.SampleDao; import group.study.dev.dto.sample.SampleDto; import group.study.dev.sample.search.model.UserModel; import group.study.dev.web.common.controller.AbstractController; @Service public class UserService extends AbstractController{ @Autowired private SampleDao sampleMapper; public List<SampleDto> selectAll(){ UserModel userModel = new UserModel(); //sampleMapper.selectAll(); userModel.setSampleList(sampleMapper.selectAll()); return userModel.getSampleList(); } }

UserModel

package group.study.dev.sample.search.model; import java.util.List; import group.study.dev.dto.sample.SampleDto; import group.study.dev.web.common.controller.AbstractController; import lombok.Data; @Data public class UserModel extends AbstractController{ private List<SampleDto> sampleList; }

SampleDto

package group.study.dev.dto.sample; import lombok.Data; @Data public class SampleDto { private String sample_id; private String sample_name; }

SampleDao

package group.study.dev.dao.sample; import java.util.List; import org.apache.ibatis.annotations.Mapper; import group.study.dev.dto.sample.SampleDto; @Mapper public interface SampleDao { public List<SampleDto> selectAll(); }

SampleMapper

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="group.study.dev.dao.sample.SampleDao"> <select id="selectAll" resultType="group.study.dev.dto.sample.SampleDto"> select sample_name, sample_id from public.sample_table where sample_id = 'S002'; </select> </mapper>

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

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

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

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

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

guest

回答2

0

ベストアンサー

SQLでは文字列はシングルクォーティングします。

SQL

1select * from sample_table where sample_id=S002; 23select * from sample_table where sample_id='S002';

投稿2020/08/31 03:33

Orlofsky

総合スコア16415

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

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

Rivermouth

2020/08/31 04:47

ご回答ありがとうございます。 アドバイス通りに修正したら、エラーを出さずに接続できました。 追加でもう一点よろしいでしょうか? 指定のSQL文を実行すると、sample_idがS002であるzxcvという文字列が返ってくるはずなのですが、実際は何も返ってきておりません。DBには接続し、SQL文も実行されていると思うのですが、期待通りの値が返却されてきません。以下がコンソールの抜粋です。 listAll=[] 12:46:47.415 [http-nio-8080-exec-7] DEBUG org.springframework.web.servlet.view.JstlView - View name 'search', model {userModel=UserModel(sampleDto=null, sampleList=null), org.springframework.validation.BindingResult.userModel=org.springframework.validation.BeanPropertyBindingResult: 0 errors, listAll=[]} 他クラスのソースコードも追加致しましたので、ご回答いただければなと思います。
Orlofsky

2020/08/31 04:57

別の質問は新規の質問にします。
Rivermouth

2020/08/31 05:07

自己解決しました。 ありがとうございます。
guest

0

ダブルクォートまたは何もないときはあくまでDBの要素(テーブル、カラム)として認識します。文字列として認識させたいのでしたらシングルクォートで囲います。

ただ、文字列としても直接書くのではなくプリペアドステートメントにすべきと思います。
Mapper XML ファイル

投稿2020/08/31 03:32

編集2020/08/31 03:48
m.ts10806

総合スコア80863

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

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

sazi

2020/08/31 03:47

postgresなのでバッククオートではなくダブルクオートですね。
m.ts10806

2020/08/31 03:48

ご指摘ありがとうございます。修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問