@kobaba4869

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Java】プレースホルダに値が入らないので改善策が知りたいです。

解決したいこと

プレースホルダに値が入らないので改善方法が知りたいです。
よろしくお願いいたします。

javaでDBにnameとpassを送り、照会をするプログラムを作っています。
プレースホルダ(?)に値が入らなく困っています。
解決方法を教えて下さい。

発生している問題・エラー

DAO

public class AccountDAO {

public boolean getResult(String name, String pass) {

	boolean flg = false;
	String sql = "select * from account where name = ? and pass = ?;";
	try (
			Connection con = ConnectMgr.getConnection();

			PreparedStatement ps = con.prepareStatement(sql)) {

		ps.setString(1, name);
		ps.setString(2, pass);

		ResultSet rs = ps.executeQuery();

		if (rs.next()) {
			System.out.println(rs.getString(2));
			System.out.println(rs.getString(3));
		}
		System.out.println(sql);
		flg = true;
	} catch (SQLException e) {
		e.printStackTrace();
		System.out.println("アカウント接続失敗");

	}

	return flg;
}

Main

public class Main {

public static void main(String[] args) {

	AccountDAO dao = new AccountDAO();

	Scanner sc = new Scanner(System.in);

	String name = sc.nextLine();
	String pass = sc.nextLine();

	boolean flg = dao.getResult(name,pass);

	if(flg) {
		System.out.println("!!");
	}else {
		System.out.println();
	}
}

}

結果リザルト

ああ(name)
ああ(pass)
(DAO途中で表示していますが、?のままです。)↓
select * from account where name = ? and pass = ?;
!!

自分で試したこと

DAO内で変数の受け渡しができていることは確認済みです。

解決策がわかる方は宜しくお願い致します。

0 likes

2Answer

どの種類のDBに接続しようとしているか分かりませんが…
JavaでのDB接続は基本的にjdbcを利用した以下のような
形式になると思うのですが、

String url = "jdbc:subprotocol:subname";
String user = "foo";
String password = "bar";
conn = DriverManager.getConnection( url, user, password );

ここでDBに接続できることの確認はとれていますか?
Connection con = ConnectMgr.getConnection();

0Like

(DAO途中で表示していますが、?のままです。)↓
select * from account where name = ? and pass = ?;

これはどうやって表示したものでしょうか?
System.out.println(sql);では、sqlが変更されることなく表示しているだけなので当然プレースホルダーの内容はセットされていません。

プレースホルダに値をバインドした後の実際に発行されるクエリ文字列 を取得するには、以下など参考になりませんでしょうか。

0Like

Your answer might help someone💌