我正在尝试使用鼠标事件来显示其他文本字段中jtable的选定行但是当我运行它并点击任何行时它会出现此消息java.sql.Exception [microsoft] [odbc microsoft access drive ]标准例外中的数据类型不匹配
请任何想法都可以帮助
这是代码:
private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
try
{
int row = jTable1.getSelectedRow();
String Table_Click = (jTable1.getModel().getValueAt(row,0).toString());
String Sql= "SELECT * FROM tblUsers WHERE ID='" + Table_Click +"' ";
pst = con.prepareStatement(Sql);
rs = pst.executeQuery();
if(rs.next())
{
String Add1= rs.getString("ID");
jTextField_ID.setText(Add1);
String AddBrNa= rs.getString("UserName");
jTextField_UN.setText(AddBrNa);
String AddBrAdd= rs.getString("Password");
jPasswordField_Pass.setText(AddBrAdd);
String AddBrYear= rs.getString("FName");
jTextField_FN.setText(AddBrYear);
String AddBrCourse= rs.getString("LName");
jTextField_LN.setText(AddBrCourse);
String AddBrSec= rs.getString("DateCreated");
jTextField_date.setText(AddBrSec);
JOptionPane.showMessageDialog(null, "errorif");
}
else
{
JOptionPane.showMessageDialog(null, "error");
}
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null, e);
}
}
答案 0 :(得分:3)
java.sql.Exception [microsoft ][odbc microsoft access drive] data type mismatch in criteria exception
:与你的桌子无关。检查您的SQL查询。很可能您的ID是整数类型,但您在where
子句中将其检查为字符串:
WHERE ID='" + Table_Click +"'
答案 1 :(得分:3)
尝试使用PreparedStatement
来简化SQL。如果你确实需要按照Sage的建议使用int,那么你可以这样做:
String sql = "SELECT * FROM tblUsers WHERE ID = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, ...)
答案 2 :(得分:3)
我正在尝试使用鼠标事件来显示jtable中的选定行 在其他文本字段
没有必要使用MouseListener
来做到这一点。只需实现一个ListSelectionListener即使通过键盘或代码进行选择更改也会执行:
jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
// Your code here
}
};
如果您仍想使用MouseListener
,我建议您进行此更改:
//int row = jTable1.getSelectedRow();
int row = jTable1.rowAtPoint(evt.getPoint());
因为在触发此事件之前,您无法确定行选择是否会更改。我不确定,但我会说MouseEvent
优先于ListSelectionEvent
。
但请注意,此row
索引属于view
,而不属于模型,因此如果您的表是已排序的,则以下行可能不会返回预期结果:
String Table_Click = (jTable1.getModel().getValueAt(row,0).toString());
应该是:
String Table_Click = (jTable1.getValueAt(row,0).toString());
话虽如此,PreparedStatemen
的正确使用是@camickr刚刚指出的:
String sql = "SELECT * FROM tblUsers WHERE ID = ?";
PreparedStatement pst = con.prepareStatement(sql); //
pst.setString(1, Table_Click) // assuming the ID is a varchar, since you enclosed it into ''
另请注意,您正在Event Dispatch Thread访问您的数据库。您应该在单独的线程中执行此操作并更新EDT中的Swing组件。在这种情况下,SwingWorker听起来很不错。
答案 3 :(得分:0)
谢谢大家,
这很好用:
String Sql =“SELECT * FROM tblUsers WHERE ID =”+ Table_Click;