Bom dia,
Uma luz por favor, não sei o que a porque o banco de dados SQLite não funciona para carregar os dados no JFrame nos campos já fiz de tudo que eu conheço e pesquisa,
sempre quando cadastro alguma informação quando vou navegar no cadastro vem o seguinte erro (java.sql.sqlexception resultset is type_forward_only sqlite).
Alguem poderia me ajudar?
Segue os prits.
public class BdConexaoDAO {
private static Connection conexao;
public ResultSet resultset;
public PreparedStatement st;
public Statement statement;
public BdConexaoDAO() //Abre a Conexão
{
try
{
Class.forName("org.sqlite.JDBC");
String url = "jdbc:sqlite:C://DRIMONEY/BDDADOS/TBDRIMONEY.db";
conexao = DriverManager.getConnection(url);
//System.out.println("conexao ok");
//JOptionPane.showMessageDialog(null,"conexao ok");
}
catch(Exception erro){
JOptionPane.showMessageDialog(null,
"Ocorreu um erro de conexão. Verifique a Base de Dados indicada !"+"\n" + erro.getMessage(),"Conexão",3);
erro.printStackTrace();
}
}
public void fechaConexao(){
try {
conexao.close();
st.close();
}
catch (SQLException e) {
JOptionPane.showMessageDialog(null,
"Erro ao tentar fechar o banco de dados");
}
}
public void executeSQL(String sql)
{
try
{
statement = conexao.createStatement(
ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
resultset = statement.executeQuery(sql);
}
catch(SQLException sqlex)
{
JOptionPane.showMessageDialog(null,"Não foi possível "+
"executar o comando sql,"+sqlex+", o sql passado foi "+sql);
}
}
// Metodos publicos:
public Connection getConexao()
{
return conexao;
}
private void btnPrimeiroActionPerformed(java.awt.event.ActionEvent evt) {
try {
conecta.executeSQL("SELECT * FROM TB_ABASTECIMENTO");
conecta.resultset.first();
txtCodigo.setText(String.valueOf(conecta.resultset.getInt("ID_ABASTECIMENTO")));
java.sql.Date data = (conecta.resultset.getDate("DATA"));
if(data != null && !data.equals(""))
{
SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
txtData.setDate(conecta.resultset.getDate("DATA"));
}
JComboBoxCategoria.setSelectedItem(conecta.resultset.getString("CATEGORIA"));
txtValorLitro.setText(conecta.resultset.getString("VALOR_LITRO"));
txtValorGasto.setText(conecta.resultset.getString("VALOR_GASTO"));
txtObservacao.setText(conecta.resultset.getString("OBSERVACAO"));
} catch (Exception erro) {
JOptionPane.showMessageDialog(null,"Não foi possível ir para o primeiro registro "+erro);
}
}

Se você ler a documentação do método first()
vai descobrir que ele não pode ser chamado em um ResutSet
do tipo FORWARD_ONLY
.
Ao invés de chamar o first()
, chama o next()
.
Algumas questões referentes a sua classe BdConexaoDAO
:
- Se essa classe não é estática, porque o atributo
Connection
é estático?
- Por que os atributos
ResultSet
, PreparedStatement
e Statement
são públicos? Eles nem deveriam ser atributos, muito menos públicos.
PreparedStatement
e Statement
deveriam ser variáveis locais do método responsável por executar as queries.
ResultSet
deveria ser o retorno do método executeSQL(String)
Bom dia, amigo.
Então chegou a carregar com a informação do banco trocando " first()" por next(); de só que quando pede para ir para a próximo cadastro apresenta a mesma msg “java.sql.sqlexception resultset is type_forward_only sqlite”
Posta o seu código com as alterações
try {
conecta.executeSQL("SELECT * FROM TB_ABASTECIMENTO");
conecta.resultset.first();
txtCodigo.setText(String.valueOf(conecta.resultset.getInt("ID_ABASTECIMENTO")));
java.sql.Date data = (conecta.resultset.getDate("DATA"));
if(data != null && !data.equals(""))
{
SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
txtData.setDate(conecta.resultset.getDate("DATA"));
}
JComboBoxCategoria.setSelectedItem(conecta.resultset.getString("CATEGORIA"));
txtValorLitro.setText(conecta.resultset.getString("VALOR_LITRO"));
txtValorGasto.setText(conecta.resultset.getString("VALOR_GASTO"));
txtObservacao.setText(conecta.resultset.getString("OBSERVACAO"));
} catch (Exception erro) {
JOptionPane.showMessageDialog(null,"Não foi possível ir para o primeiro registro "+erro);
{
if (navega == 1)
JOptionPane.showMessageDialog(null,
"Olha, você já está no primeiro registro");
else if (navega == 2)
JOptionPane.showMessageDialog(null,
"Olha, você já está no último registro");
else
JOptionPane.showMessageDialog(null,
"Não localizou dados "+erro);
navega=0;
}
}
try {
navega=1;
conecta.executeSQL("SELECT * FROM TB_ABASTECIMENTO");
conecta.resultset.previous();
txtCodigo.setText(String.valueOf(conecta.resultset.getInt("ID_ABASTECIMENTO")));
java.sql.Date data = (conecta.resultset.getDate("DATA"));
if(data != null && !data.equals(""))
{
SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
txtData.setDate(conecta.resultset.getDate("DATA"));
}
JComboBoxCategoria.setSelectedItem(conecta.resultset.getString("CATEGORIA"));
txtValorLitro.setText(conecta.resultset.getString("VALOR_LITRO"));
txtValorGasto.setText(conecta.resultset.getString("VALOR_GASTO"));
txtObservacao.setText(conecta.resultset.getString("OBSERVACAO"));
} catch (Exception erro) {
JOptionPane.showMessageDialog(null,"Não pode ir para o registro anterior "+erro);
{
if (navega == 1)
JOptionPane.showMessageDialog(null,
"Olha, você já está no primeiro registro");
else if (navega == 2)
JOptionPane.showMessageDialog(null,
"Olha, você já está no último registro");
else
JOptionPane.showMessageDialog(null,
"Não localizou dados "+erro);
navega=0;
}
}
try {
navega = 2;
conecta.executeSQL(“SELECT * FROM TB_ABASTECIMENTO”);
conecta.resultset.next();
txtCodigo.setText(String.valueOf(conecta.resultset.getInt(“ID_ABASTECIMENTO”)));
java.sql.Date data = (conecta.resultset.getDate("DATA"));
if(data != null && !data.equals(""))
{
SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
txtData.setDate(conecta.resultset.getDate("DATA"));
}
JComboBoxCategoria.setSelectedItem(conecta.resultset.getString("CATEGORIA"));
txtValorLitro.setText(conecta.resultset.getString("VALOR_LITRO"));
txtValorGasto.setText(conecta.resultset.getString("VALOR_GASTO"));
txtObservacao.setText(conecta.resultset.getString("OBSERVACAO"));
} catch (Exception erro) {
JOptionPane.showMessageDialog(null,"Não foi possível ir para o próximo registro "+erro);
{
if (navega == 1)
JOptionPane.showMessageDialog(null,
"Olha, você já está no primeiro registro");
else if (navega == 2)
JOptionPane.showMessageDialog(null,
"Olha, você já está no último registro");
else
JOptionPane.showMessageDialog(null,
"Não localizou dados "+erro);
navega=0;
}
}
try {
conecta.executeSQL("SELECT * FROM TB_ABASTECIMENTO");
conecta.resultset.last();
txtCodigo.setText(String.valueOf(conecta.resultset.getInt("ID_ABASTECIMENTO")));
java.sql.Date data = (conecta.resultset.getDate("DATA"));
if(data != null && !data.equals(""))
{
SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
txtData.setDate(conecta.resultset.getDate("DATA"));
}
JComboBoxCategoria.setSelectedItem(conecta.resultset.getString("CATEGORIA"));
txtValorLitro.setText(conecta.resultset.getString("VALOR_LITRO"));
txtValorGasto.setText(conecta.resultset.getString("VALOR_GASTO"));
txtObservacao.setText(conecta.resultset.getString("OBSERVACAO"));
} catch (Exception erro) {
JOptionPane.showMessageDialog(null,"Não foi possível ir para o ultimo registro "+erro);
{
if (navega == 1)
JOptionPane.showMessageDialog(null,
"Olha, você já está no primeiro registro");
else if (navega == 2)
JOptionPane.showMessageDialog(null,
"Olha, você já está no último registro");
else
JOptionPane.showMessageDialog(null,
"Não localizou dados "+erro);
navega=0;
}
}
Cara, reveja seus códigos.
Tem lugar onde você está chamando o first, tá chamando o last, tá chamando o previous…