Java 无法使用netbeans添加或更新父行
我的代码在创建另一个表的外键时出现问题,出现以下错误: 外键约束失败(Java 无法使用netbeans添加或更新父行,java,Java,我的代码在创建另一个表的外键时出现问题,出现以下错误: 外键约束失败(classroomanagseance,约束seance\u ibfk\u 4外键(id\u teacher)引用teacher(id) 我尝试了许多解决方案,但都不起作用。 这是我的代码: String url="jdbc:mysql://localhost:3306/classroommanag"; String login ="root"; String psswd =""; String group= jComboBo
classroomanag
seance
,约束seance\u ibfk\u 4
外键(id\u teacher
)引用teacher
(id
)
我尝试了许多解决方案,但都不起作用。
这是我的代码:
String url="jdbc:mysql://localhost:3306/classroommanag";
String login ="root";
String psswd ="";
String group= jComboBox2.getSelectedItem().toString();
int teacher=0;
try {
Timestamp currentdate = new Timestamp((new java.util.Date().getTime()));
jComboBox1.removeAllItems();
Class.forName("com.mysql.jdbc.Driver");
Connection cn = DriverManager.getConnection(url, login, psswd);
Statement st=cn.createStatement();
Statement stat=cn.createStatement();
String req = " SELECT id FROM goupe WHERE groupname = '"+group+"';";
ResultSet com = st.executeQuery(req);
while(com.next()) {
idgroup = com.getInt("id");}
String re = " SELECT id FROM teacher WHERE name = '"+AuthentServer.getname()+"' and password='"+AuthentServer.getpass()+"';";
ResultSet con= stat.executeQuery(re);
id = con.getInt("id");
String ti = " INSERT INTO seance (`temp`,`id_group`,`id_module`,`id_teacher`)VALUES('"+currentdate+"','"+idgroup+"','"+idgroup+"','"+id+"')";
st.execute(ti);
String sql = " SELECT name,etat FROM student WHERE id_goupe='"+idgroup+"';";
ResultSet rs = stat.executeQuery(sql);
while (rs.next()) {
String nom=rs.getString("name");
int etat=rs.getInt("etat");
if(etat==1) {
jComboBox1.addItem(nom+" connected");
currentdate=new Timestamp(new java.util.Date().getTime());
String date=currentdate.toString().substring(0,10);
String nomDossier="C:/wamp/www/cmsEnseignant/Travaux/"+group+"/"+nom+"/"+date;
File dir = new File (nomDossier);
if(!dir.isDirectory()) {
dir.mkdirs();
}
}
else {
jComboBox1.addItem(nom+" not connected");
currentdate=new Timestamp(new java.util.Date().getTime());
String date=currentdate.toString().substring(0,10);
String nomDossier="C:/wamp/www/cmsEnseignant/Travaux/"+group+"/"+nom+"/"+date;
File dir = new File (nomDossier);
if(!dir.isDirectory()) {
dir.mkdirs();
}
}
}
}
}
catch (ClassNotFoundException ex) {
Logger.getLogger(WorkSpace.class.getName()).log(Level.SEVERE, null, ex);
}
catch (SQLException ex) {
Logger.getLogger(WorkSpace.class.getName()).log(Level.SEVERE, null, ex);
}
外键约束失败
通常发生在您尝试向父表中不存在的子表插入数据时。与在seance
表中一样,id\u teacher
是引用teacher
表中的id
的外键,那么作为id\u teacher
插入到seance
表中的id必须作为主键id
出现在teacher
表中
更新:
在代码中,使用ResultSet con=stat.executeQuery(re)执行查询之后代码>,使用id=con.getInt(“id”)直接获取值代码>
但如果您看到的官方文档中有:
ResultSet对象维护一个光标,该光标指向其当前的数据行
数据。最初,光标位于第一行之前。这个
next方法将光标移动到下一行,因为它返回
false当ResultSet对象中没有更多行时,可以将其删除
在while循环中用于迭代结果集
所以,这一行应该可以解决你的问题。由于您没有使用任何next()
方法,因此光标位于第一行之前,这是外键的无效数据。这就是为什么你会出错
要解决这个问题,如果您的查询应该返回多行,或者您可以使用while循环和con.next()
迭代所有行
con.next()
一次,如果它只返回一行数据。也许你可以从我放代码的图像开始是的,我放了,但它不起作用,并且有“教师”表的结构:带图像的代码很难调试。你能在这里或其他地方发布完整的代码并提供链接吗?@TimaFatimz我已经更新了答案,看看它…希望这能解决你的问题:)谢谢你,我想是的,但尝试后仍然会出现同样的错误,不知道为什么