Bom, estava fazendo um aplicativo e criei uma classe pai, Gerenciar, que tem como classes filhas GerenciarAutor e GerenciarLivro.
Ambas as classes filhas usam um objeto preparedStatement. Por isso, coloquei no construtor de gerenciar a chamada de um metodo que cria um prepared statement de acordo com a conexao, que é gerada por um metodo estatico em outra classe. Enfim, quando executo o programa ele da o seguinte log de erro:
Exception in thread “main” java.lang.ClassCastException: com.mysql.jdbc.StatementImpl cannot be cast to java.sql.PreparedStatement
at sql.Gerenciar.prepareStatement(Gerenciar.java:34)
at sql.Gerenciar.(Gerenciar.java:13)
at sql.GerenciarAutor.(GerenciarAutor.java:10)
at main.Executar.menu(Executar.java:19)
at main.Main.main(Main.java:7)
Ai vai o codigo da classe “executar” que define a conexao e cria os “gerenciar”:
public class Executar {
public void menu()
{
int opcao = 0;
GerenciarConexao.createConnection();
GerenciarAutor gerAutor = new GerenciarAutor();
GerenciarLivro gerLivro = new GerenciarLivro();
Autor autor = new Autor();
Livro livro = new Livro();
do
{
opcao = lerInt("Digite a opcao desejada\n" +
"1- Cadastrar Livro\n" +
"2- Consultar Livros\n" +
"3- Alterar Livros\n" +
"4- Deletar Livro\n" +
/*"5- Consultar Autor\n" +*/
"6- Sair");
if (opcao == 1) {
autor.setDados();
livro.setDados();
gerAutor.cadastrar(autor);
gerLivro.cadastrar(livro);
} else if (opcao == 2) {
gerLivro.consultar();
} else if (opcao == 3) {
gerLivro.alterar();
} else if (opcao == 4) {
gerLivro.deletar();
}
}while(opcao != 6);
GerenciarConexao.fecharConexao();
}
}
Codigo da classe pai Gerenciar:
public abstract class Gerenciar {
public Gerenciar()
{
prepareStatement();
}
protected String sqlSelect;
protected String sqlCreate;
protected String sqlUpdate;
protected String sqlDelete;
protected PreparedStatement pstm;
public void prepareStatement(String comando)
{
try {
pstm = GerenciarConexao.getConexao().prepareStatement(comando);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void prepareStatement()
{
try {
pstm = (PreparedStatement) GerenciarConexao.getConexao().createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
}
public String lerString(String mensagem)
{
return JOptionPane.showInputDialog(mensagem);
}
public int lerInt(String mensagem)
{
return Integer.parseInt(JOptionPane.showInputDialog(mensagem));
}
public abstract void mostrarInformacoes(ResultSet rs);
public void closeStatement(){
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
E, por fim, o codigo da classe que cria a conexao com o banco de dados (mySql) pelo metodo estatico:
public class GerenciarConexao {
private static Connection conn;
public static Connection getConexao()
{
return conn;
}
public static void createConnection()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbLibrary", "root", "renato");
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void fecharConexao()
{
try
{
conn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Espero ajuda aew galera o/.
Abraços,
Renato
