【问题标题】:Sqlite data and Auto created buttons on ScrollPane [closed]ScrollPane 上的 Sqlite 数据和自动创建的按钮 [关闭]
【发布时间】:2025-12-12 23:45:01
【问题描述】:

我正在尝试做一些有点尴尬的事情。 我想检查我的 Sqlite 数据库中是否有数据,并根据表的数量,我想在滚动窗格中创建按钮并使其响应。这只是java“JDBC”而不是android。我知道你们会告诉我展示我尝试过的东西,但我根本不知道。 提前谢谢你。

【问题讨论】:

    标签: java mysql sqlite jdbc


    【解决方案1】:

    也许这会让你开始。

    此代码应在组合框中显示数据库中的表。然后当您从组合框中选择一个表时,应该显示该表中的所有列。

    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;
    
    public class DatabaseInformation extends JFrame implements ActionListener
    {
        DatabaseMetaData dmd;
        ResultSet rs;
        ResultSetMetaData md;
        int columns;
        JComboBox comboBox;
        JTable table;
        String catalog;
    
        public DatabaseInformation()
        {
            comboBox = new JComboBox();
            Vector columnNames = new Vector();
            Vector data = new Vector();
    
            try
            {
                //  Connect to the Database
    
                String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    //            String url = "jdbc:odbc:Teenergy";  // if using ODBC Data Source name
                String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/teenergy/data/teenergy.mdb";
                String userid = "";
                String password = "";
    
                Class.forName( driver );
                Connection connection = DriverManager.getConnection( url, userid, password );
                dmd = connection.getMetaData();
    
                //  Get the first Catalog
                //  Note: the result set can contain multiple catalogs, just look at the first one
    
                rs = dmd.getCatalogs();
    
                if (rs.next())
                {
                    catalog = rs.getObject(1).toString();
                    System.out.println( catalog );
                }
    
                rs.close();
    
                //  Get Tables
    
                rs = dmd.getTables(catalog, null, null, new String[] { "TABLE" });
                md = rs.getMetaData();
                columns = md.getColumnCount();
    
                while (rs.next())
                {
                       comboBox.addItem( rs.getObject(3) );
                }
    
                rs.close();
    
            }
            catch(Exception e)
            {
                System.out.println( e );
            }
    
            comboBox.addActionListener( this );
            getContentPane().add(comboBox, BorderLayout.NORTH);
    
            //  Create table with database data
    
            table = new JTable();
            JScrollPane scrollPane = new JScrollPane( table );
            getContentPane().add( scrollPane );
        }
    
        public void actionPerformed(ActionEvent e)
        {
            String table = (String)comboBox.getSelectedItem();
            displayTableColumns( table );
        }
    
        private void displayTableColumns(String tableName)
        {
            try
            {
                //  Get Columns
    
                rs = dmd.getColumns(catalog, null, tableName, null);
                md = rs.getMetaData();
                int columns = md.getColumnCount();
                Vector columnNames = new Vector(columns);
                Vector data = new Vector();
    
                //  Get column names
    
                for (int i = 1; i <= columns; i++)
                {
                    columnNames.addElement( md.getColumnName(i) );
                }
    
                //  Get row data
    
                while (rs.next())
                {
                    Vector row = new Vector(columns);
    
                    for (int i = 1; i <= columns; i++)
                    {
                        row.addElement( rs.getObject(i) );
                    }
    
                    data.addElement( row );
                }
    
                rs.close();
    
                //  Reset Table
    
                DefaultTableModel model = new DefaultTableModel(data, columnNames);
                table.setModel( model );
            }
            catch(Exception e)
            {
                System.out.println( e );
            }
    
        }
    
        public static void main(String[] args)
        {
            DatabaseInformation frame = new DatabaseInformation();
            frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
            frame.pack();
            frame.setVisible(true);
        }
    }
    

    我只在 Access 数据库上测试过代码,所以我不确定你需要为 SQLite 更改什么。

    【讨论】:

    • JComboBox 的想法很棒。非常感谢!我一定会试试看的。