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

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

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

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

Java

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

SQL

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

2回答

8849閲覧

insert(インサート)が反映されません。

sususu

総合スコア99

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

Java

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

SQL

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2018/02/17 13:51

javaからインサート文を実行するのですが、データベースに反映されていません。
どこが間違っているかご教授お願いいたします。

コードJSP <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Servlet/JSP Samples</title> </head> <body> <p>追加する商品を入力くしてください。</p> <form action = "Insert" method = "post"> 商品名<input type = "text" name = "name"> 価格<input type = "text" name = "price"> <input type = "submit" value = "追加"> </form> </body> </html>

こちらの実行結果は追加に成功しましたになるのですが、、、

コードサーブレット package test; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import tool.Page; /** * Servlet implementation class Insert */ @WebServlet("/Insert") public class Insert extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setCharacterEncoding("UTF-8");// PrintWriter out = response.getWriter(); Page.header(out); out.println("<meta charset = \"UTF-8\">");//HTML try{ InitialContext ic = new InitialContext(); DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/localDB"); Connection con = ds.getConnection(); response.setCharacterEncoding("UTF-8");// String name = request.getParameter("name"); int price = Integer.parseInt(request.getParameter("price")); PreparedStatement st = con.prepareStatement("insert into product values(null,?,?)"); st.setString(1, name); st.setInt(2,price); int line = st.executeUpdate(); if(line > 0){ out.println("追加に成功しました。"); } st.close(); con.close(); }catch(Exception e){ e.printStackTrace(out); } Page.footer(out); } }

下記のコードで確認しても追加されていません。

コード 確認用サーブレット package test; //import tool.Page; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; /** * Servlet implementation class All */ @WebServlet("/All") public class All extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //response.getWriter().append("Served at: ").append(request.getContextPath()); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); //Page.header(out); try{ InitialContext ic = new InitialContext(); DataSource ds =(DataSource)ic.lookup("java:comp/env/jdbc/localDB"); Connection con = ds.getConnection(); PreparedStatement st = con.prepareStatement("select * from product"); ResultSet rs = st.executeQuery(); out.println("<html>"); out.println("<head>"); out.println("<meta charset = \"UTF-8\">"); out.println("</head>"); out.println("<body>"); while(rs.next()){ out.println(rs.getInt("id")); out.println(":"); out.println(rs.getString("name")); out.println(":"); out.println(rs.getInt("price")); out.println("<br>"); } out.println("</body>"); out.println("</html>"); st.close(); con.close(); }catch(Exception e){ e.printStackTrace(out); } //Page.footer(out); } }

反映させるのには何か再起動だったりしないといけないのでしょうか?
その場合はどのようにやるのでしょうか?
初心者で質問が多いのですがどなたかご回答よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

INSERTの後、COMMIT していますか?

投稿2018/02/17 14:10

Orlofsky

総合スコア16415

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

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

sususu

2018/02/18 00:14

commit文を入れる場合どのように入れればよいでしょうか?質問で返してしまって申し訳ありません。 ソースの方は基礎からのサーブレットJSPの写しなのですが、「コミット」に関しては次の章で出てきます。しかしこのソースでもやはり必要なものなのでしょうか?
Orlofsky

2018/02/18 00:39

出典の方は書かれた内容だけはわかりません。 通常、データベースはデータを変更したらCOMMITでデータの保存を確定して他のユーザーからも変更された内容が見られるようになります。何らかのエラーが発生したらROLLBACK(更新を取り消す)してその旨エラーを表示します。Aさんの口座からある金額をBさんの口座に振り込むとき、Aさんの口座から引き落としができたけど、何らかの理由でBさんの口座に振り込みが失敗したら、Aさんの引き落としも取り消さなければなりません。これがROLLBACKです。正常に振り込めたら COMMITします。 暗黙にCOMMITする autocommit って方法もあります。 [MySQL 編5 - JDBC + JAVA Servlet、JSP、レコード更新、レコード参照](http://sak.cool.coocan.jp/w_sak3/doc/sysbrd/mysql_05.htm) 辺りが参考になるでしょうか?
sususu

2018/02/18 00:43

ご丁寧にURLまでありがとうございます! 拝見させていただきます。 また、引き続き自分でも調べてみたいと思います!
sususu

2018/02/18 00:55

連投失礼します。 con.setAutoCommit(true); を入れたらとりあえずデータベースにも反映するようになりました! ありがとうございます。 ただ文字化けを起こしてしまうので引き続き調べてみます!
guest

0

まず、INSERT文の構文に誤りがあるのではと思います。

PreparedStatement st = con.prepareStatement("insert into product values(null,?,?)");

これは

PreparedStatement st = con.prepareStatement("insert into product(id, name, price) values(null,?,?)");

のようにするべきなのかなと思いました。

投稿2018/02/17 14:18

SatoshiMashino

総合スコア210

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

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

sususu

2018/02/18 00:08

ご回答ありがとうございます。そちらも試してみたのですができませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問