Java SQLIntegrityConstraintViolationException,
我正在尝试创建一个基本程序,在这个程序中我可以在JavaDerby数据库中添加和删除数据。但是,问题是,它抛出了一个异常,即“语句被中止,因为它会在“联系人列表”上定义的“SQL160724181654400”标识的唯一或主键约束或唯一索引中导致重复的键值。”主要目标是在2个JTextFields中添加文本字符串,并将其导入到只有2列的数据库中。不过,我不明白问题出在哪里Java SQLIntegrityConstraintViolationException,,java,duplicates,key,add,derby,Java,Duplicates,Key,Add,Derby,我正在尝试创建一个基本程序,在这个程序中我可以在JavaDerby数据库中添加和删除数据。但是,问题是,它抛出了一个异常,即“语句被中止,因为它会在“联系人列表”上定义的“SQL160724181654400”标识的唯一或主键约束或唯一索引中导致重复的键值。”主要目标是在2个JTextFields中添加文本字符串,并将其导入到只有2列的数据库中。不过,我不明白问题出在哪里 try { String writeString =
try {
String writeString = "INSERT INTO Contacts_List(NAME, NUMBER) VALUES(?,?)";
PreparedStatement pst = connection.prepareStatement(writeString);
pst.setString(1, nameF.getText());
pst.setString(2, numberL.getText());
pst.execute();
showMessageDialog(this, " Contact's added! ");
nameF.setText(" ");
numberF.setText(" ");
pst.close();
} catch (Exception ex) {
ex.printStackTrace();
}
我的完整代码如下
package address_book;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import static javax.swing.JOptionPane.showMessageDialog;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.apache.derby.drda.NetworkServerControl;
public class Add_Data extends JFrame implements ActionListener {
JButton add = new JButton("Add To database");
JTextField nameF = new JTextField(12);
JTextField numberF = new JTextField(12);
JLabel nameL = new JLabel("Enter Name : ");
JLabel numberL = new JLabel("Enter Number : ");
private static Connection connection;
private static Statement stmt;
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
ex.printStackTrace();
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Add_Data().setVisible(true);
}
});
}
public Add_Data() {
super("Add Contact");
setSize(300, 250);
setVisible(true);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
// add jpanel and the layout
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.anchor = GridBagConstraints.WEST;
constraints.insets = new Insets(10, 10, 10, 10);
// add componenets
constraints.gridx = 0;
constraints.gridy = 0;
panel.add(nameL, constraints);
constraints.gridx = 1;
panel.add(nameF, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
panel.add(numberL, constraints);
constraints.gridx = 1;
panel.add(numberF, constraints);
constraints.gridx = 0;
constraints.gridy = 2;
constraints.gridwidth = 2;
constraints.anchor = GridBagConstraints.CENTER;
panel.add(add, constraints);
add.addActionListener(this);
//create border
panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Enter Contact's Details"));
add(panel);
try {
NetworkServerControl server = new NetworkServerControl();
server.start(null);
// Load JDBC driver
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
//Establish a connection
String sourceURL = "jdbc:derby://localhost:1527/"
+ new File("Contacts_List").getAbsolutePath() + ";";
connection = DriverManager.getConnection(sourceURL, "use", "use");
stmt = connection.createStatement();
} // The following exceptions must be caught
catch (ClassNotFoundException cnfe) {
System.out.println(cnfe);
} catch (SQLException sqle) {
System.out.println(sqle);
} catch (Exception e) {
System.out.println(e);
}
}
@Override
public void actionPerformed(ActionEvent e) {
String key = nameF.getText();
String name = Database.getName(key);
String nameAdd = nameF.getText();
if (nameF.getText().isEmpty() || numberF.getText().isEmpty() && e.getSource() == add) {
JOptionPane.showMessageDialog(this, "Fill the empty fields");
} else if (e.getSource() == add) {
if (name == null) {
int confirm = JOptionPane.showConfirmDialog(null, "You are about to add " + nameAdd + ", Do you want to Continue?");
if (confirm == JOptionPane.YES_OPTION) {
try {
String writeString = "INSERT INTO Contacts_List(NAME, NUMBER) VALUES(?,?)";
PreparedStatement pst = connection.prepareStatement(writeString);
pst.setString(1, nameF.getText());
pst.setString(2, numberL.getText());
pst.execute();
showMessageDialog(this, " Contact's added! ");
nameF.setText(" ");
numberF.setText(" ");
pst.close();
} catch (Exception ex) {
ex.printStackTrace();
}
if (confirm == JOptionPane.NO_OPTION) {
showMessageDialog(this, "Please Try Again !");
}
}
}
}
}
}也许您正在尝试添加两个同名联系人?以下是一些改进问题的方法:(1)包括用于创建数据库的CREATETABLE语句。(2) 包括完整的例外(请参阅)可能您正在尝试添加两个同名联系人?以下是一些改进问题的方法:(1)包括用于创建数据库的CREATETABLE语句。(2) 包括完整的异常(请参阅)