1

I have been practicing the use of interfaces in java, but I have a small problem when I want to launch one of my classes. This is the error:

./Jbdc.java:18: error: introducir() in Jbdc cannot implement introducir()  in InterfazBD
public void introducir() throws Exception

overridden method does not throw Exception
 1 error

most of the errors that the compiler shows me come from there. I'm telling you, I'm learning the use of interfaces and I do not really know how to use them correctly.. so I do not know how I could solve this type of error.. this is my code:

 (Principal)
public class App{

public static void main(String arg[]){

    JsonRead json = new JsonRead();
    Jbdc sqlite = new Jbdc();
    grabarJson(json);
    introducirSQL(sqlite);
}

    public static void grabarJson(InterfazGrabar fichero){
    fichero.grabar();
    }

    public static void grabarTxt(InterfazGrabar fichero){
    fichero.grabar();
    }

    public static void introducirSQL(InterfazBD fichero){
    fichero.introducir();
    }
}

and the Jbdc file

 Jbdc (this file enter the data in a database)

public class Jbdc implements InterfazBD{

private static final String URL = "jdbc:sqlite:test.db";
    public void introducir() throws Exception{
        createDb();
        createTable();
        Aula a = null;
        int contador = 0;
        try {
            FileInputStream inFile = new FileInputStream("aula.dat");
            ObjectInputStream in = new ObjectInputStream(inFile);
            while (inFile.available()>0) {
                a = (Aula)in.readObject();
                String materiaslista ="";
                String nombre = a.getNombre();
                String grupo = a.getGrupo();
                int tutor= a.getTutor();
                ArrayList<String> materias = a.getMaterias();
                for (int counter = 0; counter < materias.size(); counter++) {             
                    materiaslista = materiaslista + materias.get(counter) + ",";
                }
                insertDatos(nombre,grupo,tutor,materiaslista);
            }

    }
    catch(IOException e)
    {
        System.err.println("ERROR");
    }
        System.out.println("¡Listo!");
    }

    private static void insertDatos(String nombre,String grupo, int tutor,String materiaslista) {
        final String SQL = "INSERT INTO datos VALUES(?,?,?,?)";
        try (Connection con = getConnection(); PreparedStatement ps = con.prepareStatement(SQL);) {
            ps.setString(1, nombre); 
            ps.setString(2, grupo);
            ps.setInt(3, tutor);
            ps.setString(4, materiaslista); 
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void createTable() {
        final String SQL = "CREATE TABLE IF NOT EXISTS datos (nombre TEXT,grupo TEXT, tutor INTEGER, materiaslista TEXT);";
        // This SQL Query is not "dynamic". Columns are static, so no need to use
        // PreparedStatement.
        try (Connection con = getConnection(); Statement statement = con.createStatement();) {
            statement.executeUpdate(SQL);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void createDb() {
        try (Connection conn = getConnection()) {
            if (conn != null) {
                conn.getMetaData();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL);
    }
}

1 Answers1

1

Here:

public void introducir() throws Exception{
  private static final String URL = "jdbc:sqlite:test.db";

You can't declare a static field inside a method. Either move the field declaration outside of the method, or just make it a local variable, so either

private static final String URL = "jdbc:sqlite:test.db";
public void introducir() throws Exception{

or

public void introducir() throws Exception{
  String URL = "jdbc:sqlite:test.db";
GhostCat
  • 137,827
  • 25
  • 176
  • 248
  • Thanks, but show me another error, this error exactly: ./Jbdc.java:18: error: introducir() in Jbdc cannot implement introducir() in InterfazBD public void introducir() throws Exception{ ^ overridden method does not throw Exception 1 error –  Feb 19 '19 at 18:45
  • @UsuarioConMiga Sorry, but it doesn't work like this. We dont play "more questions in comments" ping pong here. But ok, that one: the message is really clear: when your interface method does NOT have an Exception on its signature, you can NOT just add one when implementing it. It only works the other way round: the interface can throw, and an implementation might decide to not do that. One way around that: dont use checked exceptions! have your implementation throw a runtime exception. And btw: dont go `throws Exception`. Be more specific. – GhostCat Feb 19 '19 at 18:50