Java 无法添加或更新子行:外键约束失败

Java 无法添加或更新子行:外键约束失败,java,mysql,jdbc,Java,Mysql,Jdbc,有人知道我的代码出了什么问题吗?我使用的是一个简单的INSERT语句(与常规的PreparedStatement相反,因为我试图利用mySQL的AES_加密/解密函数。我不知道如何在PreparedStatements的常规设置中使用它们。所有这些都带有奇怪的问号 我一直在学习经典: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败(video\u game\u

有人知道我的代码出了什么问题吗?我使用的是一个简单的INSERT语句(与常规的PreparedStatement相反,因为我试图利用mySQL的AES_加密/解密函数。我不知道如何在PreparedStatements的常规设置中使用它们。所有这些都带有奇怪的问号

我一直在学习经典:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败(
video\u game\u db
login
,约束
login\u ibfk\u 1
外键(
cust\u ID
)引用
customer
cust\u ID

当然,这让我抓狂

我花了一整晚的时间试图让密码“东西”的常规JDBC实现正常工作。最后,我只能加密字符串,但无法解密。我认为它必须与mySQL而不是JDBC一起工作,就像之前我将它们输入到他们解密的数据库中一样,但之后我可以让它正常工作


请看下面我的JDBC表DDL和DML语句:

DDL

Statement s = conn.createStatement();
s.executeUpdate("CREATE TABLE customer("+"cust_ID CHAR(10) NOT NULL,"+"PRIMARY KEY(cust_ID),"+"first_Name CHAR(30)NOT NULL,mI CHAR(2),last_Name CHAR(50)NOT NULL,street_Name CHAR(50),city CHAR(30) NOT NULL,state CHAR(50) NOT NULL,"
            +"zip_Code CHAR(5) NOT NULL, home_Phone CHAR(12) UNIQUE, referrer CHAR(30), quantity INTEGER NOT NULL, item_No CHAR(10))"); 
s.executeUpdate("CREATE TABLE login ("+"user_Name CHAR(50) NOT NULL,"+"PRIMARY KEY(user_Name),"+"pass_Word CHAR(50)NOT NULL, cust_ID CHAR(10))");  
public static void setCustTable(String cust_ID, String lName, String fName, String mI, String street_Name, String city, String state,
  String zip_Code, String home_Phone, String referrer, int quantity, String itemNo)throws IOException, SQLException 
{

// connect to database
try
{    

    PreparedStatement stat = conn.prepareStatement("INSERT INTO customer (cust_ID, first_Name, mI, last_Name, street_Name, city, state, zip_Code, home_Phone, referrer, quantity, item_No)"
                + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");

    stat.setString(1, cust_ID);
    stat.setString(2, fName);
    stat.setString(3, mI);
    stat.setString(4, lName);
    stat.setString(5, street_Name);
    stat.setString(6, city);
    stat.setString(7, state);
    stat.setString(8, zip_Code);
    stat.setString(9, home_Phone);
    stat.setString(10, referrer);
    stat.setInt(11, quantity);
    stat.setString(12, itemNo);

    stat.executeUpdate();
}  

 catch (SQLException e) 
{
    e.printStackTrace();
    throw e;
}

**********************************************************************************



public static void insertLoginData(String username5, String password5, String custID5)throws IOException, SQLException, NoSuchAlgorithmException, InvalidKeyException

{
    Statement s = conn.createStatement();
    String insert="INSERT INTO login VALUES('username5', AES_ENCRYPT('text','password5'),'custID5')";
    s.executeUpdate(insert);
DML

Statement s = conn.createStatement();
s.executeUpdate("CREATE TABLE customer("+"cust_ID CHAR(10) NOT NULL,"+"PRIMARY KEY(cust_ID),"+"first_Name CHAR(30)NOT NULL,mI CHAR(2),last_Name CHAR(50)NOT NULL,street_Name CHAR(50),city CHAR(30) NOT NULL,state CHAR(50) NOT NULL,"
            +"zip_Code CHAR(5) NOT NULL, home_Phone CHAR(12) UNIQUE, referrer CHAR(30), quantity INTEGER NOT NULL, item_No CHAR(10))"); 
s.executeUpdate("CREATE TABLE login ("+"user_Name CHAR(50) NOT NULL,"+"PRIMARY KEY(user_Name),"+"pass_Word CHAR(50)NOT NULL, cust_ID CHAR(10))");  
public static void setCustTable(String cust_ID, String lName, String fName, String mI, String street_Name, String city, String state,
  String zip_Code, String home_Phone, String referrer, int quantity, String itemNo)throws IOException, SQLException 
{

// connect to database
try
{    

    PreparedStatement stat = conn.prepareStatement("INSERT INTO customer (cust_ID, first_Name, mI, last_Name, street_Name, city, state, zip_Code, home_Phone, referrer, quantity, item_No)"
                + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");

    stat.setString(1, cust_ID);
    stat.setString(2, fName);
    stat.setString(3, mI);
    stat.setString(4, lName);
    stat.setString(5, street_Name);
    stat.setString(6, city);
    stat.setString(7, state);
    stat.setString(8, zip_Code);
    stat.setString(9, home_Phone);
    stat.setString(10, referrer);
    stat.setInt(11, quantity);
    stat.setString(12, itemNo);

    stat.executeUpdate();
}  

 catch (SQLException e) 
{
    e.printStackTrace();
    throw e;
}

**********************************************************************************



public static void insertLoginData(String username5, String password5, String custID5)throws IOException, SQLException, NoSuchAlgorithmException, InvalidKeyException

{
    Statement s = conn.createStatement();
    String insert="INSERT INTO login VALUES('username5', AES_ENCRYPT('text','password5'),'custID5')";
    s.executeUpdate(insert);

值得一提的是,我没有看到任何插入到
customer
。错误消息告诉我们,从登录到登录存在外键约束 因此,在登录插入之前必须存在客户条目



是否打算引用“username5”?我认为这是方法的一个参数,但insert使用文字。

Customer已经被填充。我只是想让代码简短一些。为了安全起见,我将添加它。讽刺的是,我能够在JDBC中使用PreparedStatement,Customer insert语句就像一个魅力…在加密方面,JDBC和mySQL之间的明显不一致性有解决办法吗?必须有。我有一本关于CoreJava的书,它所做的只是告诉我如何加密文件?什么用的是你在尝试加密密码…好的…对不起…只是受挫了。每晚没有睡超过3个小时t正在处理这个dang项目..很抱歉这样说…@Mike:客户填充和登录发生在同一个事务中吗?如果这些事务是分开的,插入客户的那一个是否在登录插入事务开始时就已经提交了?是的,客户表在登录表被填充之前就被填充了Mike:我建议尝试调试的方法是将select查询放在登录插入之前,并在这两种方法中对cust_ID使用相同的变量。