Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Базы данных (JDBC, JPA, Hibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2017, 11:50   #1
tooBot
Пользователь
 
Регистрация: 10.05.2017
Сообщений: 12
По умолчанию Исключение при выборке данных из таблицы

Доброго времени суток, дорогие форумчане. Изучая Java при работе с БД столкнулся с проблемой:
Текст ошибки:
Код:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
	at java.util.ArrayList.rangeCheck(ArrayList.java:653)
	at java.util.ArrayList.get(ArrayList.java:429)
	at kurs.DatabaseTableModel.getValueAt(DatabaseTableModel.java:29)
	at javax.swing.JTable.getValueAt(JTable.java:2717)
	at javax.swing.JTable.prepareRenderer(JTable.java:5706)
	at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114)
При этом данные возвращаются корректно и заносятся в таблицу.
Ниже коды классов:
Код:
package kurs;

/*****************************
 * @author Sergey Kazimirskiy
 * @version 1.0.0
 * Модуль подключения к базе данных
 *****************************/

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Database {

    private final String URL;
    private final String USER;
    private final String PASSWORD;
    
    private static Connection con;
    private static Statement stmt;
    private static ResultSet rs;

    public Database() {
        this.URL = "jdbc:mysql://localhost:3306/spp";
        this.USER = "root";
        this.PASSWORD = "";
    }
    
    
    public void getConnection(){
        try {
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            Database.con = DriverManager.getConnection(this.URL,this.USER, this.PASSWORD);
        }
        catch (SQLException sqlEx) {
            System.out.println(sqlEx.getErrorCode());
        }
    }
    
    public Statement createStatement() throws SQLException {
        try{
            stmt = con.createStatement();
        }
        catch(SQLException ex){
            System.out.println(ex.getErrorCode());
        }
        finally{
            return stmt;
        }
    }
    
    public void closeConnection(){
        try {
                con.close(); 
            } 
            catch(SQLException se) {
                System.out.println(se.getErrorCode());
            }
            try {
                stmt.close(); 
            } 
            catch(SQLException se) {
                System.out.println(se.getErrorCode());
            }
    }
    
}
Код:
package kurs;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
 
import javax.swing.table.AbstractTableModel;
 
public class DatabaseTableModel extends AbstractTableModel{
    private static final long serialVersionUID = 1L;
    private final ArrayList<String> columnNames = new ArrayList<>();
    private final ArrayList<Class> columnTypes = new ArrayList<>();
    private final ArrayList<ArrayList<Object>> data = new ArrayList<>();
	 
    public int getColumnCount() {
        synchronized (data) {
            return columnNames.size();
        }
    }
 
    public int getRowCount() {
        return columnNames.size();
    }
 
 
    public Object getValueAt(int row, int col) {
        //synchronized (data) {
            return data.get(row).get(col);
        //}
    }
	
    public String getColumnName(int col) {
        return columnNames.get(col);
    }
 
    public Class getColumnClass(int col) {
        return columnTypes.get(col);
    }
 
    public boolean isCellEditable(int row, int col) {
        return true;
    }
 
    public void setValueAt(Object obj, int row, int col) {
        synchronized (data) {
            data.get(row).set(col, obj);
        }
    }
    
    public void setDataSource(ResultSet rs) throws SQLException, ClassNotFoundException {
        ResultSetMetaData rsmd = rs.getMetaData();
        columnNames.clear();
        columnTypes.clear();
        data.clear();
 
        int columnCount = rsmd.getColumnCount();
        for (int i = 0; i < columnCount; i++) {
            columnNames.add(rsmd.getColumnName(i + 1));
            Class type = Class.forName(rsmd.getColumnClassName(i + 1));
            columnTypes.add(type);
        }
        
        fireTableStructureChanged();
        
        while (rs.next()) {
            ArrayList rowData = new ArrayList();
            for (int i = 0; i < columnCount; i++) {
                if (columnTypes.get(i) == String.class)
                    rowData.add(rs.getString(i + 1));
                else
                    rowData.add(rs.getObject(i + 1));
            }
            
            synchronized (data) {
                data.add(rowData);
                this.fireTableRowsInserted(data.size() - 1, data.size() - 1);
            }
        }
    }
}
Код:
package kurs;

import java.awt.BorderLayout;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

 
 
public class Main 
{
   public static void main(String[] args) 
   {
    String query = "SELECT * FROM USers";
    try{
        Database con = new Database();
        con.getConnection();
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(query);
           
        DatabaseTableModel model = new DatabaseTableModel();
           
        model.setDataSource(rs);
        JTable table = new JTable(model);
 
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JScrollPane(table), BorderLayout.CENTER);
 
        JFrame frame = new JFrame("Database Table Model");
        frame.setLocationRelativeTo(null);
        frame.setSize(500, 400);
        frame.setContentPane(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
 
       } catch (SQLException | ClassNotFoundException e) {
           e.printStackTrace();
       }
   }
}
tooBot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исключение повторов при добавлении данных с эдита Staziah2 Общие вопросы Delphi 3 18.08.2015 01:33
Ошибка при Выборке RandomColor C++ Builder 11 23.03.2013 10:36
нумерация строк при выборке iankov SQL, базы данных 7 07.09.2012 12:48
ошибка при выборке текстовых данных в таблице Nikolay88 БД в Delphi 2 21.06.2011 18:25
Не отображаются русские символы при выборке данных из таблиц MySQL. vedro-compota PHP 0 23.09.2010 17:43