com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'admin' for key 'PRIMARY'

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'admin' for key 'PRIMARY'

 

这个exception是在向数据库中添加用户时出现的,原因是用户代码作为主键,而再次向数据库中添加相同的用户代码时,就出现了“主键重复”这样的exception,所以解决这个exception的办法是在添加用户前,先判断数据库中是不是存在这样的user,代码如下:

 

 

/**
  * 通过用户id查找用户
  * @param userId
  * @return如果存在返回用户user,不存在返回null
  */
 public User findUserById(String userId){
       String sql = "select * from t_user where user_id=?";
       Connection conn = null;
       PreparedStatement pstmt=null;
       ResultSet rs = null;
       User user = null;
       try{
              conn = DBUtil.getConnection();
              pstmt= conn.prepareStatement(sql);
              pstmt.setString(1, userId);
              rs = pstmt.executeQuery();
             //如果返回true,则表示存在user
             if(rs.next()){
                  user = new User();
                  user.setUserId(rs.getString("user_id"));
                  user.setUserName(rs.getString("user_name"));
                  user.setPassword(rs.getString("password"));
                  user.setContactTel(rs.getString("contact_tel"));
                  user.setEmail(rs.getString("email"));
                  user.setCreateDate(rs.getTimestamp("create_date"));
             }
   
          }catch(SQLException e){
                 e.printStackTrace();
          }finally{
                 DBUtil.close(rs);
                 DBUtil.close(pstmt);
                 DBUtil.close(conn);
  }


         return user;
 }

 

 

说明:DBUtil是连接数据库的一个封装好的类,代码如下:

 

package com.wdh.drp.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {
 /**
  * 取得数据库连接
  * @return
  */ 
 public static Connection getConnection() {
  
      Connection conn = null;
      try {
      //取得jdbc配置信息
      JdbcInfo jdbcInfo = ConfigReader.getInstance().getJdbcInfo();
      Class.forName(jdbcInfo.getDriverName());
      conn = DriverManager.getConnection(jdbcInfo.getUrl(), jdbcInfo.getUsername(), jdbcInfo.getPassword());
       } catch (ClassNotFoundException e) {
            e.printStackTrace();
       } catch (SQLException e) {
           e.printStackTrace();
       }
       return conn;
  
 }
 
 public static void close(PreparedStatement pstmt) {
       if (pstmt != null) {
       try {
             pstmt.close();
       } catch (SQLException e) {
             e.printStackTrace();
       }
     }
 }
 
 public static void close(Connection conn) {
       if (conn != null) {
       try {
            conn.close();
       } catch (SQLException e) {
            e.printStackTrace();
       } 
    }
 }
 
 public static void close(ResultSet rs) {
       if (rs != null) {
       try {
            rs.close();
       } catch (SQLException e) {
           e.printStackTrace();
       }
    }
 }
 
 public static void commit(Connection conn) {
        if (conn != null) {
        try {
              conn.commit();
        } catch (SQLException e) {
              e.printStackTrace();
        }
     }
 }
 
 public static void rollback(Connection conn) {
        if (conn != null) {
        try {
             conn.rollback();
        } catch (SQLException e) {
             e.printStackTrace();
        }
     }
 }
 
 public static void setAutoCommit(Connection conn, boolean autoCommit) {
        if (conn != null) {
        try {
             conn.setAutoCommit(autoCommit);
        } catch (SQLException e) {
             e.printStackTrace();
        }
     }
 }
 
}

JdbcInfo类是封装数据库的,代码如下:

package com.wdh.drp.util;
public class JdbcInfo {
 
 @Override
 public String toString() {
  return this.getClass().getName() + "{driverName=" + this.driverName +
                                     ",url=" + this.url +
                                     ",username=" + this.username +
                                     ",password=" + this.password + "}";
 }
 private String driverName;
 private String url;
 private String username;
 private String password;
 public String getDriverName() {
      return driverName;
 }
 public void setDriverName(String driverName) {
      this.driverName = driverName;
 }
 public String getUrl() {
       return url;
 }
 public void setUrl(String url) {
       this.url = url;
 }
 public String getUsername() {
       return username;
 }
 public void setUsername(String username) {
       this.username = username;
 }
 public String getPassword() {
       return password;
 }
 public void setPassword(String password) {
       this.password = password;
 }

}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值