sách gpt4 ai đã đi

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

In lại 作者:可可西里 更新时间:2023-11-01 07:39:50 25 4
mua khóa gpt4 Nike

我从今天开始得到这个异常(exception)。昨天一切都很好。我将发布我的代码:

public void enterStaff() throws ClassNotFoundException, SQLException {
thử {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager
.getConnection("jdbc:mysql://localhost:3306/project?"
+ "user=root&password=virus");
statement = connect.createStatement();

preparedStatement = connect
.prepareStatement("SELECT count(*)FROM information_schema.tables\n"
+ "WHERE table_schema = 'project' AND table_name = 'staff'");
rs = preparedStatement.executeQuery();
rs.next();
int chk = rs.getInt(1);

if (chk != 1) {
preparedStatement = connect
.prepareStatement("create table staff (staffname varchar(30) primary key);");
preparedStatement.executeUpdate();
}

preparedStatement = connect
.prepareStatement("insert into staff values(?);");
preparedStatement.setString(1, addSubName.getText());

preparedStatement.executeUpdate();
} catch (ClassNotFoundException | SQLException e) {
throw e;
} finally {
close2();
}

}

private void close2() {
thử {

if (statement != null) {
statement.close();
}

if (connect != null) {
connect.close();
}
} catch (SQLException e) {

}
}

我正在尝试创建一个只有一列的表,该列是主键。当代码第一次运行时,表被创建。但是没有输入值。然后没有显示异常。但是当我第二次尝试输入值时,异常出现了。

我该如何纠正这个问题?如果有人需要查看更多代码,我会发布。

这是用户输入数据的代码:

    addSubName = new TextField();
addSubName.setPromptText("Staff Name");
addSubName.setPrefSize(200, 30);

final Button b2 = new Button("Add");
b2.setFont(Font.font("Calibri", FontWeight.BOLD, 17));
b2.setPrefSize(70, 30);
b2.setStyle(" -fx-base: #0066ff;");
b2.setTextFill(Color.BLACK);
b2.setOnAction(new EventHandler() {
@Ghi đè
public void handle(ActionEvent e) {

data.add(new Staff(addSubName.getText()));
addSubName.clear();

thử {
enterStaff();
} catch (ClassNotFoundException ex) {
Logger.getLogger(AddStaff.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(AddStaff.class.getName()).log(Level.SEVERE, null, ex);
}
}
});

异常详细信息是:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
at addstaff.AddStaff.enterStaff(AddStaff.java:149)
at addstaff.AddStaff$2.handle(AddStaff.java:100)
at addstaff.AddStaff$2.handle(AddStaff.java:92)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Node.fireEvent(Node.java:6867)
at javafx.scene.control.Button.fire(Button.java:179)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193)
at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336)
at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3311)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3151)
at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3106)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1563)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2248)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:250)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:173)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:292)
at com.sun.glass.ui.View.handleMouseEvent(View.java:530)
at com.sun.glass.ui.View.notifyMouse(View.java:924)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
at java.lang.Thread.run(Thread.java:744)

1 Câu trả lời

您应该xóa bỏ SQL 查询中的;:

查询错误:

prepareStatement("create table staff (staffname varchar(30) primary key);");

preparedStatement = connect.prepareStatement("insert into staff values(?);");

正确的查询是:

prepareStatement("create table staff (staffname varchar(30) primary key)");

preparedStatement = connect.prepareStatement("insert into staff values(?)");

检查您的插入查询

而且,我认为你的 INSERT 数据库中的值,那个查询太错误了,只提到了 tablename,你不应该提到 < strong>列名。因此您必须在查询中添加表名。

查询错误:

insert into staff values(?)

正确查询:

    INSERT INTO table_name
VALUES (value1,value2,value3,...);

引用此链接:

http://www.w3schools.com/sql/sql_insert.asp

更新:1

错误代码:

statement = connect.createStatement();
preparedStatement = connect
.prepareStatement("SELECT count(*)FROM information_schema.tables\n"
+ "WHERE table_schema = 'project' AND table_name = 'staff'");
rs = preparedStatement.executeQuery();
rs.next();

你应该像这样改变:sample

Class.forName(driverName).newInstance();
con=DriverManager.getConnection(connectionUrl+dbName,user,password);
st = con.createStatement();
String sql="SELECT * FROM employees";
rs=st.executeQuery(sql);

Để ý:

  1. 您不应调用 sql 查询。
  2. 而且,你正在使用preparedStatement来调用,你应该必须chage到statement
  3. preparedStatement 无法解析。

喜欢,

string sql=....sql query...;
statement.executeQuery(sql)

update:2:-->样本

public class User 
{
private String empname;
public String getEmpName()
{
return empname;
}
public void setEmpName(String empname)
{
this.empname=empname;
}

public void addUser(User user)
{
thử
{
PreparedStatement ps;
ps=connection.prepareStatement("INSERT INTO employee (empname,empaddress,depname) VALUES (?,?,?)");
ps.setString(1, user.getEmpName());
ps.setString(2, user.getEmpAddress());
ps.setString(3, user.getDepName());
ps.executeUpdate();
}
catch(Exception e)
{
System.out.println(e);
}
}

关于java - com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException : Duplicate entry '' for key 'PRIMARY' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926420/

25 4 0
Bài viết được đề xuất: mysql - 无法使用 SQuirreL 连接到 MySQL 数据库
Bài viết được đề xuất: mysql - SQL选择当前周/上周
Bài viết được đề xuất: android - 是否有用于自定义可重用 View 的库?
Bài viết được đề xuất: mysql - 在更大的模式上奇怪更好的 mysql 查询性能
可可西里
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com