在下面的代码中,我试图访问一个特定的数据库行,并将它的所有元素放在一个组合框中,但组合框显示[Ljava.lang.String,...
而不是字符串值。请帮助在组合框中显示字符串值。
void defaulters()
{
try
{
Connection con = DriverManager.getConnection(url, user, password);
final Statement stmt = con.createStatement();
ArrayList <String[]> result = new ArrayList<String[]>();
ResultSet rs = stmt.executeQuery( "SELECT c_name FROM customers" );
int columnCount = rs.getMetaData().getColumnCount();
while(rs.next())
{
String[] row = new String[columnCount];
for (int i=0; i <columnCount ; i++)
{
row[i] = rs.getString(i + 1);
}
result.add(row);
}
final JComboBox cb=new JComboBox();
JFrame f=new JFrame();
JLabel amt= new JLabel("Pending Amount: ", JLabel.RIGHT);
JLabel cid= new JLabel("Customer ID: ", JLabel.RIGHT);
final JTextField pamt = new JTextField(10);
cb.setModel(new DefaultComboBoxModel(result.toArray()));
JButton sumbit = new JButton("Sumbit");
f.add(cid);f.add(cb);f.add(amt);f.add(pamt);f.add(sumbit);
f.setSize(400, 400);
f.setLayout(new FlowLayout());
f.setTitle("Defaulters");
f.setVisible(true);
String row = (String)cb.getSelectedItem();
sumbit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
try {
stmt.executeUpdate
("insert into buyers values('"+cb.getSelectedItem()+"','"+pamt.getText()+"');");
} catch (SQLException e1) {
e1.printStackTrace();
}
System.out.println("Success");
};
});
}
答案 0 :(得分:3)
此处:cb.setModel(new DefaultComboBoxModel(result.toArray()));
您调用的result.toArray()
又是String[][]
数组。您在组合框中看到了这一点,因为Java添加了String[]
的字符串表示形式,而不是实际内容。
答案 1 :(得分:2)
您将在组合框模型中存储字符串数组(即String[]
个实例)。数组的toString()
方法会产生您所看到的内容。
如果你真的想让你的组合框包含字符串数组(我不建议这样做:你最好使用定义良好的类的实例),你需要在组合框上set a renderer告诉你如何渲染String数组的方框。
如果您不打算在组合框中使用String数组(并且您似乎想要使用字符串,而不是String数组),那么您需要将行列表转换为String数组,而不是String []。
的数组无关:你最好学会使用prepared statements。