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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Q&A

解決済

2回答

669閲覧

データベースの内容をjspから受け取ったデータに更新したい

kokok

総合スコア145

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

0クリップ

投稿2019/09/04 04:27

編集2019/09/04 05:52

html

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>password</title> 8</head> 9<body> 10<form action="/webkensyu/pass" method="get"> 11<p><label>id<input type="text" name="text1"></label></p><br> 12<p><label>ユーザー名<input type="text" name="text2"></label></p><br> 13<p><label>新しいパスワード<input type="text" name ="text3"></label></p> 14<button type="submit">確認</button> 15</form> 16</body> 17</html>

java

1package servlet; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12import dao.DBIO; 13 14/** 15 * Servlet implementation class pass 16 */ 17@WebServlet("/pass") 18public class pass extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 22 public pass() { 23 super(); 24 // TODO Auto-generated constructor stub 25 } 26 27 28 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 29 request.setCharacterEncoding("UTF-8"); 30 String text1 = request.getParameter("text1"); 31 String text2 = request.getParameter("text2"); 32 String text3 = request.getParameter("text3"); 33 DBIO dbio = new DBIO(); 34 boolean result = dbio.Passchange(text1,text2,text3); 35 36 if(result == true) { 37 //成功すればパスワード変更 38 39 RequestDispatcher dispatcher = request.getRequestDispatcher("/passchange.jsp"); 40 dispatcher.forward(request, response); 41 }else { 42 //失敗すればもう一度パスワード変更画面へ 43 RequestDispatcher dispatcher = request.getRequestDispatcher("/password.jsp"); 44 dispatcher.forward(request, response); 45 } 46 } 47 48 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 49 // TODO Auto-generated method stub 50 doGet(request, response); 51 } 52 53} 54

java

1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9 10public class DBIO { 11 12 private static final String DBNAME = "jdbc:mysql://localhost:3306/webkensyu?useUnicode =true&characterEncoding=utf8"; 13 private static final String DBUSER = "user"; 14 private static final String DBPASS = "pass"; 15 private Connection conn; 16 17 18 public DBIO(){ 19 this.connect(); 20} 21 22 public void connect() { 23 try { 24 25 Class.forName("com.mysql.jdbc.Driver"); 26 27 conn = DriverManager.getConnection(DBNAME,DBUSER,DBPASS); 28 29 30 } catch(SQLException e) { 31 32 e.printStackTrace(); 33 34 }catch(ClassNotFoundException e) { 35 36 e.printStackTrace(); 37 38 } 39 } 40 41 42 //ユーザー一覧表示 43 public ArrayList<String> getUser(){ 44 45 ArrayList<String> result = new ArrayList<String>(); 46 47 try { 48 this.connect(); 49 50 String sql ="SELECT user_name FROM users"; 51 PreparedStatement pstmt = conn.prepareStatement(sql); 52 ResultSet rs = pstmt.executeQuery(); 53 54 while(rs.next()) { 55 56 result.add(rs.getString("user_name")); 57 } 58 }catch(SQLException e) { 59 60 e.printStackTrace(); 61 }finally { 62 63 this.close(); 64 } 65 66 67 return result; 68 } 69 70 71 72 //パスワード変更 73 public boolean Passchange(String id, String name, String pass){ 74 75 try{ 76 this.connect(); 77 String sql ="UPDATE users SET password = ? WHERE user_id = ? && user_name = ?"; 78 PreparedStatement pstmt = conn.prepareStatement(sql); 79 pstmt.setString(1, pass); 80 pstmt.setString(2, id); 81 pstmt.setString(3, name); 82 ResultSet rs = pstmt.executeQuery(); 83 if(rs != null) { 84 return true; 85 }else { 86 return false; 87 } 88 }catch (SQLException e) { 89 90 e.printStackTrace(); 91 }finally { 92 93 this.close(); 94 } 95 96 return false; 97 } 98 99 //ログインで入力されたユーザー名、パスワードの確認 100 public boolean Authentication(String name, String pass) { 101 try { 102 103 this.connect(); 104 105 String sql ="SELECT user_name,password FROM users WHERE user_name = ? && password = ? "; 106 PreparedStatement pstmt = conn.prepareStatement(sql); 107 pstmt.setString(1, name); 108 pstmt.setString(2, pass); 109 ResultSet rs = pstmt.executeQuery(); 110 111 if(rs != null) { 112 return true; 113 }else { 114 return false; 115 } 116 }catch (SQLException e) { 117 118 e.printStackTrace(); 119 }finally { 120 121 this.close(); 122 } 123 return false; 124 } 125 126 127 128 public void close() { 129 130 if(conn != null) { 131 try { 132 conn.close(); 133 }catch(SQLException e) { 134 e.printStackTrace(); 135 } 136 } 137 } 138} 139 140 141

jspから渡されたパスワードでデータベースのパスワードを更新したいのですが(ログインしている人の)
実行すると

at dao.DBIO.Passchange(DBIO.java:82) ResultSet rs =pstmt.executeQuery();
at servlet.pass.doGet(pass.java:38)boolean result =dbio.Passchange(text1,text2,text3);

とエラーが出てしまいます。
解決出来なかったのでアドバイス頂けると助かります

java

1 2 //パスワード変更 3 public boolean Passchange(String id, String name, String pass){ 4 5 try{ 6 this.connect(); 7 String sql ="UPDATE users SET password = ? WHERE user_id = ? && user_name = ?"; 8 PreparedStatement pstmt = conn.prepareStatement(sql); 9 pstmt.setString(1, pass); 10 pstmt.setString(2, id); 11 pstmt.setString(3, name); 12 ResultSet rs = pstmt.executeQuery(); 13 if(rs != null) { 14 return true; 15 }else { 16 return false; 17 } 18 }catch (SQLException e) { 19 20 e.printStackTrace(); 21 }finally { 22 23 this.close(); 24 } 25 26 return false; 27 }

--追記--

java

1//ユーザーの作成 2 public int Make_user(String id, String name, String pass) { 3 try { 4 5 this.connect(); 6 String sql ="INSERT INTO users(user_id,user_name,password)VALUES(?,?,?)"; 7 PreparedStatement pstmt = conn.prepareStatement(sql); 8 pstmt.setString(1, id); 9 pstmt.setString(2, name); 10 pstmt.setString(3, pass); 11 int rs = pstmt.executeUpdate(sql); 12 if(rs == 1) { 13 return 0; 14 }else { 15 16 return -1; 17 } 18 19 }catch (SQLException e) { 20 21 e.printStackTrace(); 22 }finally { 23 24 this.close(); 25 } 26 27 return -1; 28 } 29

新しくユーザー作成機能を作ろうとしたのですが

at dao.DBIO.Make_user(DBIO.java:137) int rs = pstmt.executeUpdate(sql);

at servlet.Makeuser.doGet(Makeuser.java:40) int result = dbio.Make_user(text1,text2,text3); (サーブレット呼び出し側)

のところでエラーが出てしまいます。

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

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

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

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

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

tetutetu

2019/09/04 04:51

at dao.DBIO.Passchange...(略 はどこでエラーが発生しているかを示しているだけで、何のエラーか示されている部分ではありません。 エラーメッセージの読み方も学んでいきましょう。
guest

回答2

0

java

1ResultSet rs = pstmt.executeQuery();

executeQueryはselect文で使います。
UPDATEやDELETEの際はexecuteUpdate()です。

executeUpdateは戻り値に数値を返しますので、ResultSetも必要ありません。
更新や削除などの処理が行われた件数が返ってきます。

java

1int hoge = pstmt.executeUpdate();

ついでに

ユーザー認証が必要な何らかのWEBアプリを作成しているものとお見受けしますが
パスワード変更処理をdoGetメソッドにやらせるのは流石に如何なものかと思います。
Get,Postでそれぞれどのような処理をすべきか調べてみましょう。
(あと、変更するにあたって旧パスワードの入力は求めないのでしょうか)

投稿2019/09/04 04:39

編集2019/09/04 04:45
tetutetu

総合スコア419

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

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

kokok

2019/09/04 04:57

回答ありがとうございます。 executeQueryをexecuteUpdate()に変更したところ実行できました。 パスワードはpostにするべきでした。 旧パスワードの入力も作成思います。 ありがとうございます。
guest

0

自己解決

executeUpdate() は 引数なしでした。

投稿2019/09/04 05:56

kokok

総合スコア145

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

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

tetutetu

2019/09/04 06:07

最初からそのように書いてあるのですが。
tetutetu

2019/09/04 06:17

蛇足ですがもう一点。 恐らく研修中とのことで、ローカル環境で開発をされているものかと思われますが クラス名やメソッド名、変数名等には、ネーミング規約(コーディング規約、命名規約)というものが存在します。 今のうちに規約に沿った書き方ができるようにしましょう。
kokok

2019/09/04 07:44

申し訳ないです。自分で色々書いてたら間違えてしまいました。 勉強していきたいと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問