Java Intellij - setModel(DbUtils.resultSetToTableModel(rs))不工作

b4qexyjb  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(83)

我想获取数据库中的数据,我使用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_202Mysql-connector-j-8.0.32.jarrs2xml.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);
    }
jv4diomz

jv4diomz1#

你的问题在于

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

你应该进一步避免声明像connstmt这样的变量作为类成员,除非你有正当的理由这样做。此外,你的代码缺少适当的资源处理,因为数据库连接、语句或结果都没有正确关闭。
总而言之,这将是一个正确的实现:

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()

相关问题