老师好,如下4段代码,数据表用的课程中的employee,我添加员工信息为什么一直报错

老师好,如下4段代码,数据表用的课程中的employee,我添加员工信息为什么一直报错

package com.imooc.jdbc.sample;

import com.imooc.jdbc.sample.command.Command;
import com.imooc.jdbc.sample.command.InsertCommand;
import com.imooc.jdbc.sample.command.PstmtQueryCommand;
import com.imooc.jdbc.sample.command.QueryCommand;

import java.util.Scanner;

//按照部门查询员工信息
public class HumanResourceApplication {

    public static void main(String[] args) {
        System.out.println("1-查询部门员工");
        System.out.println("2-办理员工入职");
        System.out.println("3-调整薪资");
        System.out.println("4-员工离职");
        System.out.println("5-分页查询员工数据");
        System.out.println("请选择功能:");

        System.out.println("请输入要查询的选项");
        Scanner in= new Scanner(System.in);
        Integer num=in.nextInt();

        Command command=null;
        switch (num){
            case 1://
                command=new PstmtQueryCommand() ;
                command.execude();
                break;
            case 2:
                command=new InsertCommand();
                command.execude();
                break;
        }
    }
}




package com.imooc.jdbc.sample.command;

public interface Command {
    public void execude();
}




package com.imooc.jdbc.sample.command;

import com.imooc.jdbc.common.DBUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class InsertCommand implements Command{
    public void execude(){
        Scanner in=new Scanner(System.in);
        System.out.println("请输入员工编号");int eno =in.nextInt();
        System.out.println("请输入员工姓名");String ename=in.next();
        System.out.println("请输入员工工资");float salary=in.nextFloat();
        System.out.println("请输入员工部门");String dname=in.next();
        //System.out.println("请输入员工入职日期");String hirdate=in.next();
        Connection conn=null;
        PreparedStatement pstmt=null;
        try {
            conn =DBUtils.getConnection();

            //String sql="insert into employee(eno,ename,salary,dname,hirdate)valus(?,?,?,?,?) ";
            String sql="insert into employee(eno,ename,salary,dname) valus (?,?,?,?)";
            pstmt=conn.prepareStatement(sql);
            pstmt.setInt(1,eno);
            pstmt.setString(2,ename);
            pstmt.setFloat(3,salary);
            //No value specified for parameter  数据类型不匹配导致报错/valus(?,?,?,?)?数量错误
            pstmt.setString(4,dname);
            //pstmt.setString(5,hirdate);
            //int num1=pstmt.executeUpdate();//返回值为修改数量
            pstmt.executeUpdate();//返回值为修改数量

            System.out.println("添加完成了");
            //System.out.println(num1);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.closeConnectin(null,pstmt,conn);
        }
    }
}




package com.imooc.jdbc.common;

import javax.xml.transform.Result;
import java.sql.*;

public class DBUtils {
/**
 * 创建新的数据库连接
 * @return 新的Connection对象
 * @throws SQLException
 * @throws ClassNotFoundException
 */
    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                /*"jdbc:mysql://localhost:3306/imooc?useSSL=true&useUnicode=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicRetrieval=true",*/
                "jdbc:mysql://localhost:3306/imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true",
                "root", "123456");
    return conn;
    }
/**
 * 关闭连接,释放资源
 * @param rs 结果集对象
 * @param stmt Statement对象
 * @param conn Connection对象
 */
    public static void closeConnectin(ResultSet rs, Statement pstmt, Connection conn){
        try {
            if (rs !=null){
                rs.close();
            }
            if (pstmt !=null){
                pstmt.close();
            }
            if (conn !=null && !conn.isClosed()){
                conn.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小脸 2022-10-05 15:20:53

同学你好,

1、遇到异常信息时,要及时反馈异常信息,便于老师第一时间查看报错帮助解决问题

2、上述代码中sql语句里的values单词书写错误,从而导致添加失败,修改如下:

https://img1.sycdn.imooc.com//climg/633d30340955af6d08950171.jpg

祝学习愉快~


  • 提问者 小白0719 #1

    老师,修改完后可正常添加数据,可还是会报错呀

    java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '3990' for key 'employee.PRIMARY'
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117)
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025)
    	at com.imooc.jdbc.sample.command.InsertCommand.execude(InsertCommand.java:33)
    	at com.imooc.jdbc.sample.HumanResourceApplication.main(HumanResourceApplication.java:30)


    2022-10-05 15:35:04
  • 好帮手慕小脸 回复 提问者 小白0719 #2

    同学你好,要学会查看异常信息进行代码定位,根据上述报错信息得知:键“employee.PRIMARY”的条目“3990”重复,说明数据库中主键eno为3990的数据已经存在了,这里再次添加就会报错

    祝学习愉快~

    2022-10-05 15:57:02
  • 提问者 小白0719 回复 好帮手慕小脸 #3

    条目“3990”重复,说明数据库中主键eno为3990的数据已经存在了 :

    不管输入什么条目都会报下面错误,

    java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '11111' for key 'employee.PRIMARY'

    我在navicat上添加数据就不会报错

    https://img1.sycdn.imooc.com//climg/633d3c0509a547b311640149.jpg

    这个employee数据表总共也才20条数据,主键不至于重复吧?

    2022-10-05 16:14:54
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师