com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'gunny111111' for key 'user.userId_UNIQUE'
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
	at com.mysql.jdbc.Util.getInstance(Util.java:386)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915)
	at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2136)
	at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2070)
	at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5187)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2055)
	at user.UserDAO.join(UserDAO.java:34)
	at org.apache.jsp.user.userRegisterAction_jsp._jspService(userRegisterAction_jsp.java:187)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:880)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1601)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:832)

 

Duplicate entry 'gunny111111' for key 'user.userId_UNIQUE'

 

회원가입 로직 수행 중

해당 에러가 발생하였다.

 

회원가입시 아이디 중복을 방지하기 위해

mysql에서 아이디에 해당하는 컬럼에 unique 제약 조건을 설정하였다.

 

그래서 회원가입시 아이디가 중복 되지 않게 값을 입력 했는데도

해당 에러가 발생하였다.

 

 

원인은.. 

pstmt.executeUpdate() 문의 결과 값을 알고 싶어

console 창에 입력했는데,

 

그것 또한 실행 되어

 

콘솔에서 한 번

 

return 값에서 한 번  총 2번 실행 되기 때문에

 

아이디가 중복 된것으로 나온다..

 

어쩐지..

mysql DB를 확인해보니 값은 들어가 있는데 

UI에서 작동하지 않았던 것이다..

 

 

혹시나 해서 제약조건에 unique 설정을 제거 해보니

 

DB에 데이터가 2개나 들어가 있는 것을 볼 수 있었다.

 

 

 

'JSP' 카테고리의 다른 글

JSP - JSTL 설치 및 사용 방법  (0) 2020.12.29

JSP의 경우 HTML 태그와 같이 사용되어 전체적인 코드의 가독성이 떨어진다.

이러한 단점을 보완하고저 만들어진 태그가 JSTL이다.

JSTL의 경우 우리가 사용하는 Tomcat 컨테이너에 포함되어 있지 않으므로 , 별도의 설치가 필요하다.

 

 

의존성 설정

mvnrepository.com/artifact/javax.servlet/jstl

 

Maven Repository: javax.servlet » jstl

Professional Java Data: RDBMS, JDBC, SQLJ, OODBMS, JNDI, LDAP, Servlets, JSP, WAP, XML, EJBs, CMP2.0, JDO, Transactions, Performance, Scalability, Object and Data Modeling (2001)by Carl Calvert Bettis, Michael Bogovich, Sean Rhody, Mark Wilcox, Kelly Lin P

mvnrepository.com

 

 

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

 

설치

jakarta.apache.org/

 

The Jakarta Site - The Apache Jakarta™ Project -- Java Related Products

Founded in 1999, the Jakarta Project housed a diverse set of popular open source Java solutions. In 2005, as a part of creating a flatter Apache Software Foundation, Jakarta subprojects began to become full top-level Apache projects. This process has conti

jakarta.apache.org

 

Taglibs 클릭

 

다운로드

 

JSTL 라이브러리

lib URI Prefix ex
Core http://java.sun.com/jsp/jstl/core c <c:tag />
XML Processing http://java.sun.com/jsp/jstl/xml x <x:tag />
I18N formatting http://java.sun.com/jsp/jstl/fmt fmt <fmt: tag/>
SQL http://java.sun.com/jsp/jstl/sql sql <sql :tag />
Functions http://java.sun.com/jsp/jstl/functions fn fn.function()

 

 

Core 라이브러리

Core 라이브러리는 기본적인 라이브러리로 출력, 제어문, 반복문 같은 기능이 포함되어 있다.

 

 

사용

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

 

 

출력 태그 : <c:out>

<c:out value="출력값" default="기본값" escapeXml ="true or false">

 

변수 설정 태그 <c:set>

<c:set var="변수명" value="설정값" target="객체" property="값" scope="범위">

 

변수를 제거하는 태그 <c:remove>

<c:remove var="변수명" scope="범위">

 

예외 처리 태그 <c:catch>

<c:catch var="변수명">

 

제어문(if) 태그 <c:if>

<c:if test="조건" var="조건 처리 변수명" scope="범위">

 

ex)detail.jsp

<c:if test="${board.user.id == principal.user.id}">
  <a href="/board/${board.id}/updateform" class="btn btn-primary">수정</a>
  <button id="btn-delete" class="btn btn-danger">삭제</button>
  </c:if>

 

제어문(swich) 태그 <c:choose>

 

<c:choose>
<c:when test="조건">처리 내용 </c:when>
<c:otherwise> 처리 내용 </c:otherwise>
</c:choose>

 

반복문 (for) 태그 <c:forEach>

<c:forEach items="객체명" begin="시작 인덱스" end="끝 인덱스" step="증감식"
var="변수명" varStatus="상태변수">

 

ex) detail.jsp

	<ul id="reply--box" class="list-group">
 		<c:forEach var="reply" items="${board.reply }">
 		<li id="reply--1" class="list-group-item d-flex justify-content-between">
             <div>${reply.content}</div>
             <div class="d-flex">
              <div class ="font-italic">작성자 : ${reply.user.username} &nbsp: </div>
              <button class="badge">삭제</button>
             </div>
 		</li>
 		</c:forEach>

 

페이지 이동 태그  <c:redirect>

<c:redirect url="url">

 

파라미터 전달 태그 <c:param>

 

<c:param name="파라미터명" value="값" >

+ Recent posts