已编辑我已更改了SQL代码并且可以正常运行,但我得到了异常: “无法设置null tableModell
我见过许多非常相似的例子但不是我需要的例子。 因此,我们走了:
很简单 - 在InternalFrame中我插入Code,ProjectName,Teamleiter,Description并单击“Teilnehmer”以列出表“tbl_teinehmer”中所有项目的所有成员。只显示姓氏。
因此,我将对应的数据插入到字段中,列出项目成员并选择将参与我正在创建的新项目的成员。
为了将数据和
private void buttonAnlegenActionPerformed(java.awt.event.ActionEvent evt) {
String data = tbl_teilnehmer.getValueAt(tbl_teilnehmer.getSelectedRow(), 0).toString();
String sql = "INSERT INTO TBL_PROJETO (PROJEKT_ID, PROJEKTNAME, TEAMLEITER, BESCHREIBUNG,**TEILNEHMER**)"; //now it works but I get the exception: cannot set a null TableModell.
+ " VALUES(?,?,?,?,?)";
menu = new HauptMenu();
try{
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, ct.getText());
pst.setString(2, nt.getText());
pst.setString(3, st.getText());
pst.setString(4, beschreibungText.getText());
pst.setString(5, data);
pst.execute();
menu.listaProjetos();
JOptionPane.showMessageDialog(null, "Projekt added to Database");
}
catch(Exception e){
System.out.println(e);
}
try{
conn.close();
}catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage());
}
ct.setText("");
nt.setText("");
st.setText("");
}
这是错误:
java.sql.SQLException: Parameter index out of range (5 > number of parameters, which is 4).
问题可能来自PreparedStatemend声明。 我已经设定了
pst.setString(5, data);
因为它会识别变量数据中的选定行,但我认为这是错误的。
答案 0 :(得分:1)
按如下方式进行
pst.setString(0, ct.getText());
pst.setString(1, nt.getText());
pst.setString(2, st.getText());
pst.setString(3, beschreibungText.getText());
pst.setString(4, data);
答案 1 :(得分:1)
谢谢你的帮助! 我首先通过更改SQL声明来解决问题:
首先在我放置了“+ data +”',这是一个占位符(如果我没记错的话)但我想将所选行设置为相应的列在DB 。 因此,我已将其更改为列名:TEILNEHMER,并将另一个问号“?”设置为 VALUE 。
虽然有效,但我仍然收到错误>> 无法设置null TableModel 并在此错误下>> 不支持的排序规则'Latin7'或者像那样。
所以我已经将我的表的排序从Lati7设置为TableDefault,现在它完全有效。
非常感谢您帮助我!
答案 2 :(得分:0)
5th parameter
查询中没有sql
的占位符:
String sql = "INSERT INTO TBL_PROJETO (PROJEKT_ID, PROJEKTNAME, TEAMLEITER, BESCHREIBUNG,'"+data+"')"
+ " VALUES(?,?,?,?,?)";