我想获取数据库中的数据,我使用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);
}
1条答案
按热度按时间jv4diomz1#
你的问题在于
而不是
DbUtils.resultSetToTableModel
。当您使用PreparedStatement
时,您应该使用此类型,以使IDE知道可用的方法:然而,在代码中使用
PreparedStatement
是没有意义的,因为你没有提供任何参数,而且语句只执行一次。因此,将代码改为这样可能是最好的解决方案:你应该进一步避免声明像
conn
或stmt
这样的变量作为类成员,除非你有正当的理由这样做。此外,你的代码缺少适当的资源处理,因为数据库连接、语句或结果都没有正确关闭。总而言之,这将是一个正确的实现:
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()