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>ホーム</title> 8</head> 9<body> 10<form action="/webkensyu/Address" method="get"> 11<button type="submit" name="button1">住所一覧</button> 12</form> 13</body> 14</html>
java
1package servlet; 2 3import java.io.IOException; 4import java.util.ArrayList; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12 13import dao.ADDR_DB; 14 15@WebServlet("/Address") 16public class Address extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 19 20 public Address() { 21 super(); 22 } 23 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 24 // TODO Auto-generated method stub 25 //response.getWriter().append("Served at: ").append(request.getContextPath()); 26 27 request.setCharacterEncoding("UTF-8"); 28 ADDR_DB addrdb = new ADDR_DB(); 29 ArrayList<String> result = addrdb.getaddrss(); 30 ArrayList<String> post = addrdb.getpost(); 31 request.setAttribute("result", result); 32 request.setAttribute("post", post); 33 RequestDispatcher dispatcher = request.getRequestDispatcher("/address_view.jsp"); 34 dispatcher.forward(request, response); 35 } 36 37 38 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 39 doGet(request, response); 40 } 41} 42
html
1 2//address_view.jsp ファイル名 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6 <%@ page import="java.util.ArrayList"%> 7<!DOCTYPE html> 8<html> 9<head> 10<meta charset="UTF-8"> 11<title>住所一覧</title> 12 <link rel="stylesheet" type="text/css" href="style2.css"> 13 </head> 14</head> 15<body> 16<table border="1"style="border: 1px solid black; border-collapse: collapse;"> 17<%ArrayList<String> address = (ArrayList<String>) request.getAttribute("result");%> 18<%ArrayList<String> post = (ArrayList<String>) request.getAttribute("post");%> 19<%int i=0;%> 20<tr> 21<th class="th1">郵便番号</th> 22<th class="th2">住所</th> 23</tr> 24<%for(String addr : address){ %> 25<tr> 26<td class="th1"> 27<%=post.get(i)%> 28</td> 29<td class="th2"> 30<a href=""><%=addr%></a> 31</td> 32</tr> 33<%i++;%> 34<%}%> 35<tr> 36<td class="td3"> 37<div class="button1"> 38<form action="address_add.jsp" method="get"> 39<button type="submit" name="button1" >追加</button> 40</form> 41</div> 42</td> 43</tr> 44</table> 45<form action="address.jsp" method="get"> 46<button type="submit" name="button2">戻る</button> 47</form> 48<form action="addr_update.jsp" method="get"> 49<button type="submit" name="button4">住所更新</button> 50</form> 51</body> 52</html>
html
1//"address_add.jsp ファイル名 2 3<%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>住所登録</title> 10</head> 11<body> 12<form action="/webkensyu/Add_address" method="get"> 13<p><label>郵便番号を入力してください:<input type="text" name ="text1"></label></p> 14<p><label>県を入力してください :<input type="text" name ="text2"></label></p> 15<p><label>市町村を入力してください :<input type="text" name ="text3"></label></p> 16<p><label>番地を入力してください :<input type="text" name ="text4"></label></p> 17<button type="submit" name="button1">登録</button> 18</form> 19</body> 20</html>
java
1//Add_address ファイル名 2 3package servlet; 4 5import java.io.IOException; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14import dao.ADDR_DB; 15 16@WebServlet("/Add_address") 17public class Add_address extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 public Add_address() { 21 super(); 22 } 23 24 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 26 request.setCharacterEncoding("utf-8"); 27 String text1 = request.getParameter("text1"); 28 String text2 = request.getParameter("text2"); 29 String text3 = request.getParameter("text3"); 30 String text4 = request.getParameter("text4"); 31 ADDR_DB addrdb = new ADDR_DB(); 32 33 boolean result =addrdb.add_Registration(text1, text2, text3, text4); 34 35 if(result == true) { 36 RequestDispatcher dispatcher = request.getRequestDispatcher("/regis_success.jsp"); 37 dispatcher.forward(request, response); 38 39 }else { 40 RequestDispatcher dispatcher = request.getRequestDispatcher("/regis_failure.jsp"); 41 dispatcher.forward(request, response); 42 } 43 } 44 45 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 46 doGet(request, response); 47 } 48} 49
java
1 2// ADDR_DB ファイル名 3 4package dao; 5 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9import java.util.ArrayList; 10 11public class ADDR_DB extends DBIO{ 12 13 public ADDR_DB(){ 14 connect(); 15 } 16 17 //郵便番号の取得 18 public ArrayList<String> getpost(){ 19 ArrayList<String> post = new ArrayList<String>(); 20try { 21 22 connect(); 23 24 String sql ="SELECT address_code FROM addresses"; 25 26 27 PreparedStatement pstmt = conn.prepareStatement(sql); 28 ResultSet rs = pstmt.executeQuery(); 29 30 while(rs.next()) { 31 32 post.add(rs.getString("address_code")); 33 } 34 35 }catch(SQLException e){ 36 37 e.printStackTrace(); 38 39 }finally { 40 41 close(); 42 } 43 44 return post; 45 } 46 47 48 //住所一覧取得する 49 public ArrayList<String> getaddrss() { 50 ArrayList<String> result = new ArrayList<String>(); 51 52 try { 53 54 connect(); 55 56 String sql ="SELECT CONCAT(address_prefecture, address_city, address_street) AS address FROM addresses"; 57 58 59 PreparedStatement pstmt = conn.prepareStatement(sql); 60 ResultSet rs = pstmt.executeQuery(); 61 62 while(rs.next()) { 63 64 result.add(rs.getString("address")); 65 } 66 67 }catch(SQLException e){ 68 69 e.printStackTrace(); 70 71 }finally { 72 73 close(); 74 } 75 return result; 76 } 77 78 //住所の登録 79 public boolean add_Registration(String post, String prefe, String munici, String addr) { 80 81 try { 82 connect(); 83 84 String sql = "INSERT INTO addresses(address_code,address_prefecture,address_city,address_street )VALUES(?,?,?,?) "; 85 PreparedStatement pstmt = conn.prepareStatement(sql); 86 pstmt.setString(1, post); 87 pstmt.setString(2, prefe); 88 pstmt.setString(3, munici); 89 pstmt.setString(4, addr); 90 int rs = pstmt.executeUpdate(); 91 if(rs == 1) { 92 93 return true; 94 }else { 95 return false; 96 97 } 98 99 }catch(SQLException e) { 100 101 e.printStackTrace(); 102 }finally { 103 close(); 104 } 105 return false; 106 } 107} 108
java
1 2// DBIO ファイル名 3package dao; 4 5import java.sql.Connection; 6import java.sql.DriverManager; 7import java.sql.PreparedStatement; 8import java.sql.ResultSet; 9import java.sql.SQLException; 10import java.util.ArrayList; 11 12public class DBIO { 13 14 protected static final String DBNAME = "jdbc:mysql://localhost:3306/webkensyu?useUnicode =true&characterEncoding=utf8"; 15 protected static final String DBUSER = "user"; 16 protected static final String DBPASS = "pass"; 17 protected Connection conn; 18 19 public DBIO(){ 20 this.connect(); 21} 22 23 public void connect() { 24 try { 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 public void close() { 42 43 if(conn != null) { 44 try { 45 conn.close(); 46 }catch(SQLException e) { 47 e.printStackTrace(); 48 } 49 } 50 } 51} 52
address_add.jsp ファイル名 の 入力フォームからデータを入力して Add_address サーブレットで受け取り、 ADDR_DB の add_Registration(String post, String prefe, String munici, String addr) メソッドでデータ(住所の追加)をしたいとかんがえております。
しかし、追加しようとすると
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'address_prefecture' at row 1
at dao.ADDR_DB.add_Registration(ADDR_DB.java:93) int rs = pstmt.executeUpdate();
at servlet.Add_address.doGet(Add_address.java:41) boolean result =addrdb.add_Registration(text1, text2, text3, text4);
上記のようなエラーが出てしまいます。
column 'address_prefecture' の定義した VARCHAR(4) に入らないデータ(大きい)をいれようとしているからみたいです。(1などのデータをいれてみると入ります。漢字が入りません。(入っても文字化けします))
文字コードの原因もあるみたいなので、コードを確認しましたが、UTF-8で設定していると思います。
使っているものは
windows10
Server version: 5.6.19 MySQL Community Server
です。
ネットなどを調べても、なかなか自分一人で解決することが出来ませんでした。少しでも、アドバイス頂けたらほんとに助かります。
--データベース--
CREATE TABLE webkensyu.addresses
(
address_id INT NOT NULL,
address_code CHAR(8) NOT NULL,
address_prefecture VARCHAR(4) NOT NULL,
address_city VARCHAR(10) NOT NULL,
address_street VARCHAR(255),
CONSTRAINT PRIMARY KEY (address_id)
);
--追記--
address_add.jspの入力フォームに
郵便番号 111-1111
県 北
市町村 西
番地 東
と入力すると
郵便番号 111-1111
住所 æ±è¥¿å
と表示されてしまいます 。
県 の入力フォームに 北海道など3文字とかの漢字を入力すると
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'address_prefecture' at row 1
とエラーになります。
sql
1INSERT INTO addresses(address_code,address_prefecture,address_city,address_street )VALUES(?,?,?,?) ;
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, post);
pstmt.setString(2, prefe);
pstmt.setString(3, munici);
pstmt.setString(4, addr);
int rs = pstmt.executeUpdate();
回答2件
あなたの回答
tips
プレビュー