我正在尝试从我的数据库中填充表格。我按照教程,我的代码显示在下面,但是我收到此错误,无法弄清楚原因。在我的数据库中,我有'名字,姓氏,地址,城市,州,邮编',不确定是否需要此信息来帮助我解决我的问题
有人可以帮忙吗
先谢谢你的帮助。
package medicalrecords;
import java.awt.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
public class TableFromDatabase extends JPanel {
private Connection conexao = null;
public TableFromDatabase() {
Vector columnNames = new Vector();
Vector data = new Vector();
try {
// Connect to an Access Database
conexao = DriverManager.getConnection("jdbc:derby://" + "localhost"
+ ":1527/Medical Records", "root", "password");
// Read data from a table
String sql = "select * from SD2799.PATIENTRECORDS";
try (Statement stmt = conexao.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
// Get column names
for (int i = 1; i <= columns; i++) {
columnNames.addElement(md.getColumnName(i));
}
// Get row data
while (rs.next()) {
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++) {
row.addElement(rs.getObject(i));
}
data.addElement(row);
}
}
conexao.close();
} catch (Exception e) {
System.out.println(e);
}
// Create table with database data
JTable table = new JTable(data, columnNames) {
@Override
public Class getColumnClass(int column) {
for (int row = 0; row < getRowCount(); row++) {
Object o = getValueAt(row, column);
if (o != null) {
return o.getClass();
}
}
return Object.class;
}
};
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
JPanel buttonPanel = new JPanel();
add(buttonPanel, BorderLayout.SOUTH);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Patient Records");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
TableFromDatabase newContentPane = new TableFromDatabase();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
});
}
}
答案 0 :(得分:2)
您的消息&#34; 使用未经检查或不安全的操作。注意:使用-Xlint重新编译:未选中以获取详细信息&#34;不是错误,但它是一个警告。 Vector
类是通用的(泛型在1.5中添加到Java中),这意味着它需要一个类型参数。这里,它意味着它可以容纳的对象类型。
如果要使用命令行选项&#34; -Xlint:unchecked&#34;重新编译?如警告所示,编译器将为您提供有关警告的更多详细信息,包括违规行。
您没有为任何Vector
提供类型参数,因此它们是 raw ,这意味着没有提供类型参数。编译器警告您使用原始类型,并且您的类型安全性存在风险。
您可以提供相应的类型参数以消除警告。在TableFromDatabase
构造函数中,顶部:
Vector<String> columnNames = new Vector<String>();
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
以及稍后在同一个构造函数中:
Vector<Object> row = new Vector<Object>(columns);
但是,Vector
在Java 1.2中被ArrayList
(及其List
接口)取代。实际上,Vector
已经过改进,然后实现了新的List
接口。您似乎不需要Vector
的线程安全,因此建议您使用ArrayList
代替。
List<String> columnNames = new ArrayList<String>();
List<Vector<Object>> data = new ArrayList<List<Object>>();
和
List<Object> row = new ArrayList<Object>(columns);
从Java 1.7开始,您可以使用&#34;菱形运算符&#34;,并删除赋值运算符右侧的类型参数,让Java推断出正确的类型,例如:
List<String> columnNames = new ArrayList<>();
List<Vector<Object>> data = new ArrayList<>();
和
List<Object> row = new ArrayList<>(columns);