我正在尝试从Java中获取表中的数据。我已经能够获取数据,但是当它被输出时,它自己连接起来。如果数据是“admin”,则输出为“adminadmin”。下面是代码。有人能告诉我问题是什么吗?
package sample;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.sql.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.proteanit.sql.DbUtils;
public class Table extends JFrame{
JTable table;
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
private int row;
private String name, status;
private void connect(){
conn = myconnection.ConnectDb();
}
public void mouseClicked(MouseEvent e) {
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
int sel = table.getSelectedRow();
name = table.getModel().getValueAt(sel, 0).toString();
System.out.print(name);
}
});
}
private void UpdateJTable(){
String sql = "select firstname, status from tblmember";
try{
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
table.setModel(DbUtils.resultSetToTableModel(rs));
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
public Table(){
setLayout(new FlowLayout());
String [] columnName={"Name", "Status"};
Object [][] data={
{null, null},
{null, null}
};
table = new JTable(data, columnName);
table.setPreferredScrollableViewportSize(new Dimension(400,50));
table.setFillsViewportHeight(true);
JScrollPane sp = new JScrollPane(table);
add(sp);
}
public static void main(String[] args){
Table gui = new Table();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setSize(700, 500);
gui.setVisible(true);
gui.setTitle("AAAAAAAA");
gui.connect();
gui.UpdateJTable();
gui.mouseClicked(null);
}
}
答案 0 :(得分:5)
它是连接的,因为选择事件被触发两次,并且您使用System.out.print()
来显示选择。
如果事件的getValueIsAdjusting()
方法返回true,您应该忽略该事件。
另外,请注意,返回的选定行索引不一定是与表模型索引相同的索引:如果对表进行排序,则两个索引都会有所不同。在从模型中获取数据之前使用JTable的convertRowIndexToModel()
。