gpt4 book ai didi

java - 在java中显示数据库表

转载 作者:行者123 更新时间:2023-12-02 04:26:28 24 4
gpt4 key购买 nike

我正在尝试从我的数据库中获取一个表来填充。我按照教程操作,我的代码显示在下面,但是我收到此错误并且无法弄清楚原因。在我的数据库中,我有“名字、姓氏、地址、城市、州、邮政编码”,不确定是否需要此信息来帮助我解决问题

有人可以帮忙吗

提前感谢您的帮助。

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);
});

}
}

最佳答案

您的消息“使用未经检查或不安全的操作。注意:使用 -Xlint:unchecked 重新编译以获取详细信息”不是错误,而是警告。 Vector 类是泛型的(泛型是在 1.5 中添加到 Java 中的),这意味着它需要一个类型参数。这里,它指的是它可以容纳的物体类型。

如果您按照警告提示使用命令行选项“-Xlint:unchecked”重新编译,编译器将为您提供有关警告的更多详细信息,包括有问题的行。

您没有为任何 Vector 提供类型参数,因此它们是原始,这意味着未提供类型参数。编译器警告您正在使用原始类型,并且您的类型安全面临风险。

您可以提供适当的类型参数来消除警告。在 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 接口(interface))取代。事实上,Vector 当时经过了改造,以实现当时新的 List 接口(interface)。看起来您不需要 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 开始,您可以使用“菱形运算符”,并删除赋值运算符右侧的类型参数,让 Java 推断出正确的类型,例如:

List<String> columnNames = new ArrayList<>();
List<Vector<Object>> data = new ArrayList<>();

List<Object> row = new ArrayList<>(columns);

关于java - 在java中显示数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com