我在创建费用跟踪器时遇到 JDBC 驱动程序错误

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

我正在 Java 中使用 SQLite 创建费用跟踪器,将 JDBC 和 SLF4J 添加到项目类路径后,出现此错误;

未找到适合 jdbc:sqlite:expenses.db 的驱动程序

我已确认 SLF4J 和 JDBC 位于该项目的类路径中。

这是我的代码;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class ExpensesTracker extends JFrame implements ActionListener {
    private JTextField expenseField, amountField;
    private JButton addButton, deleteButton;
    private JTable expenseTable;
    private DefaultTableModel tableModel;
    private Connection connection;

    public ExpensesTracker() {
        setTitle("Expense Tracker");
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        JPanel topPanel = new JPanel(new FlowLayout());
        expenseField = new JTextField(20);
        amountField = new JTextField(10);
        addButton = new JButton("Add");
        deleteButton = new JButton("Delete");
        topPanel.add(new JLabel("Expense:"));
        topPanel.add(expenseField);
        topPanel.add(new JLabel("Amount:"));
        topPanel.add(amountField);
        topPanel.add(addButton);
        topPanel.add(deleteButton);

        String[] columnNames = {"Expense", "Amount"};
        tableModel = new DefaultTableModel(columnNames, 0);
        expenseTable = new JTable(tableModel);
        JScrollPane scrollPane = new JScrollPane(expenseTable);
        add(topPanel, BorderLayout.NORTH);
        add(scrollPane, BorderLayout.CENTER);

        addButton.addActionListener(this);
        deleteButton.addActionListener(this);

        try {
            connection = DriverManager.getConnection("jdbc:sqlite:expenses.db");
            refreshTable();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void refreshTable() {
        tableModel.setRowCount(0);
        try {
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM expenses");
            while (resultSet.next()) {
                String expense = resultSet.getString("expense");
                double amount = resultSet.getDouble("amount");
                tableModel.addRow(new Object[]{expense, amount});
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == addButton) {
            String expense = expenseField.getText();
            double amount = Double.parseDouble(amountField.getText());
            try {
                PreparedStatement statement = connection.prepareStatement("INSERT INTO expenses (expense, amount) VALUES (?, ?)");
                statement.setString(1, expense);
                statement.setDouble(2, amount);
                statement.executeUpdate();
                refreshTable();
                expenseField.setText("");
                amountField.setText("");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        } else if (e.getSource() == deleteButton) {
            int selectedRow = expenseTable.getSelectedRow();
            if (selectedRow != -1) {
                String expense = (String) tableModel.getValueAt(selectedRow, 0);
                try {
                    PreparedStatement statement = connection.prepareStatement("DELETE FROM expenses WHERE expense = ?");
                    statement.setString(1, expense);
                    statement.executeUpdate();
                    refreshTable();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ExpensesTracker().setVisible(true);
            }
        });
    }
}

关于如何解决这个问题有什么想法吗?

我也尝试按照 github 上的建议恢复到 SLF4J 版本 1.7,但仍然遇到相同的错误。

java sqlite jdbc slf4j
1个回答
0
投票

错误消息“没有找到适合 jdbc:sqlite:expenses.db 的驱动程序”表示您的应用程序无法找到适合 SQLite 的 JDBC 驱动程序。要解决此问题,您需要:

  1. 下载 JDBC 驱动程序(可以从 SQLite 官方网站或 Maven Central 获取) 将驱动程序添加到项目中的
    classpath
  2. 检查您的连接 URL SQLite 连接 URL 的格式为:
    jdbc:sqlite:sqlite_database_file_path
    ,其中
    sqlite_database_file_path
    是 SQLite 数据库文件的实际路径。
© www.soinside.com 2019 - 2024. All rights reserved.