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

问题描述 投票:0回答:1

我想在我的数据库中获取数据,我使用

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);
    }
java mysql jdbc
1个回答
1
投票

你的问题在

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

© www.soinside.com 2019 - 2024. All rights reserved.