使用Java中的JTable从MySQL数据库显示记录

我想从MySQL数据库将JTable连接到ResultSet ,以便查看数据。

我正在寻找描述此任务的一些链接或代码片段。 我正在使用Netbeans IDE ..

下面是一个类,它将完成从MySQL数据库中读取数据到Java中的JTable时要执行的操作的基础知识。

 import java.awt.*; import java.sql.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; public class TableFromMySqlDatabase extends JFrame { public TableFromMySqlDatabase() { ArrayList columnNames = new ArrayList(); ArrayList data = new ArrayList(); // Connect to an MySQL Database, run query, get result set String url = "jdbc:mysql://localhost:3306/yourdb"; String userid = "root"; String password = "sesame"; String sql = "SELECT * FROM animals"; // Java SE 7 has try-with-resources // This will ensure that the sql objects are closed when the program // is finished with them try (Connection connection = DriverManager.getConnection( url, userid, password ); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery( sql )) { ResultSetMetaData md = rs.getMetaData(); int columns = md.getColumnCount(); // Get column names for (int i = 1; i <= columns; i++) { columnNames.add( md.getColumnName(i) ); } // Get row data while (rs.next()) { ArrayList row = new ArrayList(columns); for (int i = 1; i <= columns; i++) { row.add( rs.getObject(i) ); } data.add( row ); } } catch (SQLException e) { System.out.println( e.getMessage() ); } // Create Vectors and copy over elements from ArrayLists to them // Vector is deprecated but I am using them in this example to keep // things simple - the best practice would be to create a custom defined // class which inherits from the AbstractTableModel class Vector columnNamesVector = new Vector(); Vector dataVector = new Vector(); for (int i = 0; i < data.size(); i++) { ArrayList subArray = (ArrayList)data.get(i); Vector subVector = new Vector(); for (int j = 0; j < subArray.size(); j++) { subVector.add(subArray.get(j)); } dataVector.add(subVector); } for (int i = 0; i < columnNames.size(); i++ ) columnNamesVector.add(columnNames.get(i)); // Create table with database data JTable table = new JTable(dataVector, columnNamesVector) { public Class getColumnClass(int column) { for (int row = 0; row < getRowCount(); row++) { Object o = getValueAt(row, column); if (o != null) { return o.getClass(); } } return Object.class; } }; JScrollPane scrollPane = new JScrollPane( table ); getContentPane().add( scrollPane ); JPanel buttonPanel = new JPanel(); getContentPane().add( buttonPanel, BorderLayout.SOUTH ); } public static void main(String[] args) { TableFromMySqlDatabase frame = new TableFromMySqlDatabase(); frame.setDefaultCloseOperation( EXIT_ON_CLOSE ); frame.pack(); frame.setVisible(true); } } 

在您正在使用的NetBeans IDE中 - 您需要在Project Properties中添加MySQL JDBC Driver ,如下所示:

在此处输入图像描述

否则代码将抛出一个SQLException指出无法找到驱动程序。

现在在我的示例中, yourdb是数据库的名称, animals是我正在执行查询的表的名称。

这是将输出的内容:

在此处输入图像描述

分手记录:

你说你是一个新手,需要一些帮助来理解Java的一些基本类和概念。 我将在此列出一些,但请记住,您始终可以浏览Oracle网站上的文档。

  • 数组列表
  • 向量
  • 尝试使用资源声明

这是简单的方法,您只需要下载jar文件"rs2xml.jar"将其添加到您的项目并执行此操作:1-创建连接2-参数和结果集3-创建jtable 4-给出结果设置为DbUtils.resultSetToTableModel(rs)作为此方法中的定义,您可以轻松获得jtable。

 public void afficherAll(String tableName){ String sql="select * from "+tableName; try { stmt=con.createStatement(); rs=stmt.executeQuery(sql); tbContTable.setModel(DbUtils.resultSetToTableModel(rs)); } catch (SQLException e) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, e); } } 

如果您需要在代码中使用数据库并且知道表的结构,我建议您按照以下方式执行:

首先,您可以定义一个类,它将帮助您创建能够保持表行数据的对象。 例如,在我的项目中,我创建了一个名为Document.java的类来保存我的数据库中的单个文档的数据,并且我创建了这些对象的数组列表,以保存我的表的数据,这是通过查询获得的。

 package financialdocuments; import java.lang.*; import java.util.HashMap; /** * * @author Administrator */ public class Document { private int document_number; private boolean document_type; private boolean document_status; private StringBuilder document_date; private StringBuilder document_statement; private int document_code_number; private int document_employee_number; private int document_client_number; private String document_employee_name; private String document_client_name; private long document_amount; private long document_payment_amount; HashMap document_activity_hashmap; public Document(int dn,boolean dt,boolean ds,String dd,String dst,int dcon,int den,int dcln,long da,String dena,String dcna){ document_date = new StringBuilder(dd); document_date.setLength(10); document_date.setCharAt(4, '.'); document_date.setCharAt(7, '.'); document_statement = new StringBuilder(dst); document_statement.setLength(50); document_number = dn; document_type = dt; document_status = ds; document_code_number = dcon; document_employee_number = den; document_client_number = dcln; document_amount = da; document_employee_name = dena; document_client_name = dcna; document_payment_amount = 0; document_activity_hashmap = new HashMap<>(); } public Document(int dn,boolean dt,boolean ds, long dpa){ document_number = dn; document_type = dt; document_status = ds; document_payment_amount = dpa; document_activity_hashmap = new HashMap<>(); } // Print document information public void printDocumentInformation (){ System.out.println("Document Number:" + document_number); System.out.println("Document Date:" + document_date); System.out.println("Document Type:" + document_type); System.out.println("Document Status:" + document_status); System.out.println("Document Statement:" + document_statement); System.out.println("Document Code Number:" + document_code_number); System.out.println("Document Client Number:" + document_client_number); System.out.println("Document Employee Number:" + document_employee_number); System.out.println("Document Amount:" + document_amount); System.out.println("Document Payment Amount:" + document_payment_amount); System.out.println("Document Employee Name:" + document_employee_name); System.out.println("Document Client Name:" + document_client_name); } } 

其次,您可以定义一个类来处理数据库需求。 例如,我定义了一个名为DataBase.java的类,它处理我与数据库的连接和我需要的查询。 我在我的主要class级中实例化了反对意见。

 package financialdocuments; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Administrator */ public class DataBase { /** * * Defining parameters and strings that are going to be used * */ //Connection connect; // Tables which their datas are extracted at the beginning HashMap code_table; HashMap activity_table; HashMap client_table; HashMap employee_table; // Resultset Returned by queries private ResultSet result; // Strings needed to set connection String url = "jdbc:mysql://localhost:3306/financial_documents?useUnicode=yes&characterEncoding=UTF-8"; String dbName = "financial_documents"; String driver = "com.mysql.jdbc.Driver"; String userName = "root"; String password = ""; public DataBase(){ code_table = new HashMap<>(); activity_table = new HashMap<>(); client_table = new HashMap<>(); employee_table = new HashMap<>(); Initialize(); } /** * Set variables and objects for this class. */ private void Initialize(){ System.out.println("Loading driver..."); try { Class.forName(driver); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Cannot find the driver in the classpath!", e); } System.out.println("Connecting database..."); try (Connection connect = DriverManager.getConnection(url,userName,password)) { System.out.println("Database connected!"); //Get tables' information selectCodeTableQueryArray(connect); // System.out.println("HshMap Print:"); // printCodeTableQueryArray(); selectActivityTableQueryArray(connect); // System.out.println("HshMap Print:"); // printActivityTableQueryArray(); selectClientTableQueryArray(connect); // System.out.println("HshMap Print:"); // printClientTableQueryArray(); selectEmployeeTableQueryArray(connect); // System.out.println("HshMap Print:"); // printEmployeeTableQueryArray(); connect.close(); }catch (SQLException e) { throw new IllegalStateException("Cannot connect the database!", e); } } /** * Write Queries * @param s * @return */ public boolean insertQuery(String s){ boolean ret = false; System.out.println("Loading driver..."); try { Class.forName(driver); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Cannot find the driver in the classpath!", e); } System.out.println("Connecting database..."); try (Connection connect = DriverManager.getConnection(url,userName,password)) { System.out.println("Database connected!"); //Set tables' information try { Statement st = connect.createStatement(); int val = st.executeUpdate(s); if(val==1){ System.out.print("Successfully inserted value"); ret = true; } else{ System.out.print("Unsuccessful insertion"); ret = false; } st.close(); } catch (SQLException ex) { Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex); } connect.close(); }catch (SQLException e) { throw new IllegalStateException("Cannot connect the database!", e); } return ret; } /** * Query needed to get code table's data * @param c * @return */ private void selectCodeTableQueryArray(Connection c) { try { Statement st = c.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM code;"); while (res.next()) { int id = res.getInt("code_number"); String msg = res.getString("code_statement"); code_table.put(id, msg); } st.close(); } catch (SQLException ex) { Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex); } } private void printCodeTableQueryArray() { for (HashMap.Entry entry : code_table.entrySet()){ System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } } /** * Query needed to get activity table's data * @param c * @return */ private void selectActivityTableQueryArray(Connection c) { try { Statement st = c.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM activity;"); while (res.next()) { int id = res.getInt("activity_number"); String msg = res.getString("activity_statement"); activity_table.put(id, msg); } st.close(); } catch (SQLException ex) { Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex); } } private void printActivityTableQueryArray() { for (HashMap.Entry entry : activity_table.entrySet()){ System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } } /** * Query needed to get client table's data * @param c * @return */ private void selectClientTableQueryArray(Connection c) { try { Statement st = c.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM client;"); while (res.next()) { int id = res.getInt("client_number"); String msg = res.getString("client_full_name"); client_table.put(id, msg); } st.close(); } catch (SQLException ex) { Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex); } } private void printClientTableQueryArray() { for (HashMap.Entry entry : client_table.entrySet()){ System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } } /** * Query needed to get activity table's data * @param c * @return */ private void selectEmployeeTableQueryArray(Connection c) { try { Statement st = c.createStatement(); ResultSet res = st.executeQuery("SELECT * FROM employee;"); while (res.next()) { int id = res.getInt("employee_number"); String msg = res.getString("employee_full_name"); employee_table.put(id, msg); } st.close(); } catch (SQLException ex) { Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex); } } private void printEmployeeTableQueryArray() { for (HashMap.Entry entry : employee_table.entrySet()){ System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } } } 

我希望这可能会有所帮助。