我想在我的数据库中获取数据,我使用
MYSQL
作为我的数据库,intellij
作为我的 GUI.
现在我有一个问题,setModel
不工作。我收到错误消息。
java: method executeQuery in interface java.sql.Statement cannot be applied to given types;
required: java.lang.String
found: no arguments
reason: actual and formal argument lists differ in length
不知道是功能过时了还是我写错了。我正在使用 JDK 1.8.0_202 和 Mysql-connector-j-8.0.32.jar 和 rs2xml.jar
这是我的代码。
Connection conn;
Statement stmt;
void table_products(){
try{
conn = DriverManager.getConnection("jdbc:mysql://localhost/MyBakery?serverTimezone=UTC", "root", "");
stmt = conn.createStatement();
Statement stmt = conn.prepareStatement("SELECT * FROM products");
ResultSet rs = stmt.executeQuery();
table_products.setModel(DbUtils.resultSetToTableModel(rs));
}catch(SQLException e){
e.printStackTrace();
}
}
这是我的进口清单:
import net.proteanit.sql.DbUtils;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
这是我的 JFrame:
public Product(JFrame parent){
super(parent);
setTitle("Bakery Inventory System");
setContentPane(registerPanel);
setMinimumSize(new Dimension(550,600));
setPreferredSize(new Dimension(320,200));
setModal(true);
setLocationRelativeTo(parent);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
productAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
registerProduct();
dispose();
}
});
productCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
setVisible(true);
}
你的问题在
ResultSet rs = stmt.executeQuery();
而不是
DbUtils.resultSetToTableModel
。当你使用 PreparedStatement
时,你应该使用这种类型,让 IDE 知道可用的方法:
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM products");
然而,在您的代码中使用
PreparedStatement
是毫无意义的,因为您没有提供任何参数并且该语句仅执行一次。因此,将您的代码更改为此可能是最好的解决方案:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM products");
你还应该避免将像
conn
或 stmt
这样的变量声明为类成员,除非你有正当理由这样做。此外,您的代码缺少正确的资源处理,因为数据库连接、语句或结果都没有正确关闭。
总而言之,这将是一个正确的实施:
try (final Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/MyBakery?serverTimezone=UTC", "root", "");
final Statement stmt = conn.createStatement();
final ResultSet rs = stmt.executeQuery("SELECT * FROM products");) {
table_products.setModel(DbUtils.resultSetToTableModel(rs));
}
https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeQuery(java.lang.String) https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeQuery()