无法在 jdbc 准备语句中的外键 table 中插入数据
Unable to insert data in foreign key table in jdbc prepared statement
我是新手。我有两张桌子。 registrationtable
和 logintable
,其中 registerationid
是 registrationtable
中的主键和 logintable
中的外键,其中 registerationid
是 Auto_Increment 在 registrationtable
。我可以在 registrationtable
中插入但不能在 logintable
中插入。我正在使用 PreparedStatement
并拥有 Bean
class。请任何人都可以帮助我。
预先感谢您的帮助。
try {
PreparedStatement preparedstatement=connection.prepareStatement("INSERT INTO registrationtable(firstname,lastname,dob,address,city,state,mob) VALUES (?,?,?,?,?,?,?)",PreparedStatement.RETURN_GENERATED_KEYS);
preparedstatement.setString(1,bean.getFirstName());
preparedstatement.setString(2,bean.getLastName());
preparedstatement.setString(3,bean.getDOB());
preparedstatement.setString(4,bean.getAddress());
preparedstatement.setString(5,bean.getCity());
preparedstatement.setString(6,bean.getState());
preparedstatement.setString(7,bean.getMobile());
System.out.println("Dao Rgisteration : "+bean.getFirstName());
preparedstatement.executeUpdate();
ResultSet resultset=preparedstatement.getGeneratedKeys();
resultset.next();
int autoGeneratedKeyRegisteration = resultset.getInt(1);
preparedstatement.close();
// resultset=preparedstatement.executeQuery("SELECT LAST_INSERT_ID() AS last_id FROM registerationtable");
String sql="INSERT INTO logintable(registerationid,username,password) VALUES (LAST_INSERT_ID(),'xyz@gmail.com','xyzabc123')";
PreparedStatement preparedstatement1=connection.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
preparedstatement1.setInt(1,bean.getRegistrationId());
preparedstatement1.setString(2, bean.getUsername());
preparedstatement1.setString(3, bean.getPassword());
System.out.println("Dao Login : "+bean.getUsername());
preparedstatement1.executeUpdate();
ResultSet resultset1=preparedstatement1.getGeneratedKeys();
if(resultset1.next()){
int autoGeneratedkeyLogin=resultset1.getInt(1);
}
resultset1=preparedstatement1.executeQuery("SELECT registerationid FROM logintable WHERE registerationid=LAST_INSERT_ID()");
System.out.println(resultset);
preparedstatement1.close();
} catch(Exception e){e.getMessage();}finally{
try{
connection.close();
}catch(Exception ex){ex.getMessage();}
}
}
首先,我建议在事务中进行这些插入:
并使用 getGeneratedKeys
代替 LAST_INSERT_ID:
LAST_INSERT_ID 有一些警告和限制:
https://dba.stackexchange.com/a/21188
我是新手。我有两张桌子。 registrationtable
和 logintable
,其中 registerationid
是 registrationtable
中的主键和 logintable
中的外键,其中 registerationid
是 Auto_Increment 在 registrationtable
。我可以在 registrationtable
中插入但不能在 logintable
中插入。我正在使用 PreparedStatement
并拥有 Bean
class。请任何人都可以帮助我。
预先感谢您的帮助。
try {
PreparedStatement preparedstatement=connection.prepareStatement("INSERT INTO registrationtable(firstname,lastname,dob,address,city,state,mob) VALUES (?,?,?,?,?,?,?)",PreparedStatement.RETURN_GENERATED_KEYS);
preparedstatement.setString(1,bean.getFirstName());
preparedstatement.setString(2,bean.getLastName());
preparedstatement.setString(3,bean.getDOB());
preparedstatement.setString(4,bean.getAddress());
preparedstatement.setString(5,bean.getCity());
preparedstatement.setString(6,bean.getState());
preparedstatement.setString(7,bean.getMobile());
System.out.println("Dao Rgisteration : "+bean.getFirstName());
preparedstatement.executeUpdate();
ResultSet resultset=preparedstatement.getGeneratedKeys();
resultset.next();
int autoGeneratedKeyRegisteration = resultset.getInt(1);
preparedstatement.close();
// resultset=preparedstatement.executeQuery("SELECT LAST_INSERT_ID() AS last_id FROM registerationtable");
String sql="INSERT INTO logintable(registerationid,username,password) VALUES (LAST_INSERT_ID(),'xyz@gmail.com','xyzabc123')";
PreparedStatement preparedstatement1=connection.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
preparedstatement1.setInt(1,bean.getRegistrationId());
preparedstatement1.setString(2, bean.getUsername());
preparedstatement1.setString(3, bean.getPassword());
System.out.println("Dao Login : "+bean.getUsername());
preparedstatement1.executeUpdate();
ResultSet resultset1=preparedstatement1.getGeneratedKeys();
if(resultset1.next()){
int autoGeneratedkeyLogin=resultset1.getInt(1);
}
resultset1=preparedstatement1.executeQuery("SELECT registerationid FROM logintable WHERE registerationid=LAST_INSERT_ID()");
System.out.println(resultset);
preparedstatement1.close();
} catch(Exception e){e.getMessage();}finally{
try{
connection.close();
}catch(Exception ex){ex.getMessage();}
}
}
首先,我建议在事务中进行这些插入:
并使用 getGeneratedKeys
代替 LAST_INSERT_ID:
LAST_INSERT_ID 有一些警告和限制: https://dba.stackexchange.com/a/21188