Salve, ho un problema. Sto creando un'applicazione standard per visualizzare i risultati di tabelle di database in una JTable. La mia applicazione dovrebbe poter connettersi a MySQL e SQLite. Con MySQL riesco a connettermi e ad eseguire query senza problemi. Con SQLite invece ho dei problemi.

Quando tento di eseguire una query con SQLite, viene lanciata una eccezione con il seguente messaggio: "ResultSet is TYPE_FORWARD ONLY". OK allora ho modificato lo statement in questo modo:

Codice PHP:
statement connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVEResultSet.CONCUR_READ_ONLY); 
Ma appena tento di connettermi ad SQLite un'eccezione viene lanciata con il seguente errore: "SQLite only supports TYPE_FORWARD_ONLY cursors".

Ma allora, come devo risolvere?

Se può esservi utile questa è la classe che gestisce la connessione al database che estende AbstractTableModel per i risultati visualizzabili nella JTable:

Codice PHP:
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

public class 
MyTableModel extends AbstractTableModel
{
    private 
Connection connection;
    private 
Statement statement;
    private 
ResultSet resultSet;
    private 
ResultSetMetaData metaData;
    private 
int numberOfRows 0;
    public 
boolean isConnected false;
    
    public 
void connect (String driverString databaseString usernameString passwordthrows Exception
    
{
        Class.
forName(driver);
        
        if (
driver.equals("com.mysql.jdbc.Driver"))
            
connection DriverManager.getConnection("jdbc:mysql://localhost/" databaseusernamepassword);
        else if (
driver.equals("org.sqlite.JDBC"))
            
connection DriverManager.getConnection("jdbc:sqlite:db.db");
        
        
statement connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVEResultSet.CONCUR_READ_ONLY);
        
        
isConnected true;
    }
    
    public 
void setQuery (String query)
    {
        try
        {
            if (
query.toLowerCase().contains("select"))
            {
                
resultSet statement.executeQuery (query);
                
                
metaData resultSet.getMetaData();
                
                
resultSet.last();
                
numberOfRows resultSet.getRow();
                
                
fireTableStructureChanged();
            }
            else
            {
                
statement.execute(query);
            }
        }
        catch (
Exception exception)
        {
            
JOptionPane.showMessageDialog(nullexception.getMessage(), "Errore"JOptionPane.ERROR_MESSAGE);
        }
    }
    
    public Class 
getColumnClass (int column)
    {
        if (
resultSet != null)
        {
            try
            {
                
String className metaData.getColumnClassName(column 1);
                return Class.
forName(className);
            }
            catch (
Exception exception)
            {
                
exception.printStackTrace();
            }
        }
        
        return 
Object.class;
    }
    
    public 
int getColumnCount()
    {
        if (
resultSet != null)
        {
            try
            {
                return 
metaData.getColumnCount();
            }
            catch (
Exception exception)
            {
                
exception.printStackTrace();
            }
        }
        
        return 
0;
    }
    
    public 
String getColumnName (int column)
    {
        if (
resultSet != null)
        {
            try
            {
                return 
metaData.getColumnName (column 1);
            }
            catch (
Exception exception)
            {
                
exception.printStackTrace();
            }
        }
        
        return 
"";
    }
    
    public 
int getRowCount()
    {
        return 
numberOfRows;
    }
    
    public 
Object getValueAt (int rowint column)
    {
        if (
resultSet != null)
        {
            try
            {
                
resultSet.absolute(row 1);
                return 
resultSet.getObject(column 1);
            }
            catch (
Exception exception)
            {
                
exception.printStackTrace();
            }
        }
        
        return 
"";
    }

    public 
void disconnect()
    {
        try
        {
            
resultSet null;
            
fireTableStructureChanged();
            
            if (
connection != null)
                
connection.close();
            if (
statement != null)
                
statement.close();
            
            
isConnected false;
        }
        catch (
Exception exception)
        {
            
exception.printStackTrace();
        }
    }