Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:尝试从java插入数据库时,密钥的条目重复_Java_Mysql_Sql_Sql Server_Jdbc - Fatal编程技术网

java.sql.SQLException:尝试从java插入数据库时,密钥的条目重复

java.sql.SQLException:尝试从java插入数据库时,密钥的条目重复,java,mysql,sql,sql-server,jdbc,Java,Mysql,Sql,Sql Server,Jdbc,这是我的mysql表 CREATE TABLE `mydb`.`mytab` ( `email` VARCHAR(45) NOT NULL, `name` VARCHAR(45) NULL, PRIMARY KEY (`email`)); 我的java代码是 Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localh

这是我的mysql表

CREATE TABLE `mydb`.`mytab` (

    `email` VARCHAR(45) NOT NULL,
    `name` VARCHAR(45) NULL,

    PRIMARY KEY (`email`));
我的java代码是

Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/spacespacer", "root", "");
PreparedStatement state=con.prepareStatement("INSERT INTO `spacespacer`.`mytab` VALUES (?, ?);");
state.setString(1, "email");
state.setString(2, "name");
state.executeUpdate();
这就是我在netbeans中运行文件时得到的结果

run:
Exception in thread "main" java.sql.SQLException: Duplicate entry 'email' for key 'PRIMARY'
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2847)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1531)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1347)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:958)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1957)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1880)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1741)
at spacespacer.SpaceSpacer.main(SpaceSpacer.java:30)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
那么我如何让它工作呢


感谢您的回复

在您的表格中,您已经有了一个带有“email”的条目

在此表列中,电子邮件设置为PrimaryKey。因此,复制是不可能的

注:


您的表位于数据库
mydb
下的
mytab
。但是您正在插入
spacespacespacer.mytab

这是因为您的表中已经有了“email”,您已经将其设置为主键。因此,您无法添加更多名为“电子邮件”的电子邮件。尝试查询您的表以检查您是否已经有该记录。建议不要将电子邮件用作主键。它将导致索引和搜索速度缓慢,因为它是一个varchar,并且可能很长。

不要使用“email”作为键,即使它是唯一的。根据经验,使用
int
long
作为主键。

检查您尝试插入的值,然后检查它是否已在表中。错误表明您正试图在主键字段中插入相同的值,该字段仅允许该值一次。哦,好的,我在中已经有一个名为“email”的值,谢谢您的回答!当我使用语句时,无法在java中检索生成的键。getGeneratedKeys()它只显示在java中插入的行数,而不是实际的行数keys@AminePaleo使用
ps=connection.prepareStatement(查询、语句、返回\u生成的\u键)
ps.executeUpdate()之后
您可以通过
ps.getGeneratedKeys()
在结果集中获取生成的键。