IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Milan Gallas
Tvůrce
Avatar
Milan Gallas:27.4.2014 21:47

ahoj mám následující metodu:

public int count(String table) throws SQLException{
        PreparedStatement ps =
                connection.prepareStatement("SELECT COUNT(*) FROM ?");
        ps.setString(1, table);
       ResultSet result = ps.executeQuery();
         result.next();
        return result.getInt(1);
    }

Je to metoda tridy database.

ale když jí zavolám tak to vyhodí chybu a nazev tabulky nedosadi.

        try {
            Database database = new Database("osoby", "root", "");
System.out.println(database.count("programatori"));
  } catch (SQLException ex) {
            System.out.println("error - "+ex.getMessage());
        }

Ale když tam ten název tabulky dosadím natvrdo tak to jde:

public int count(String table) throws SQLException{
       PreparedStatement ps =
               connection.prepareStatement("SELECT COUNT(*) FROM programatori");
      ResultSet result = ps.executeQuery();
        result.next();
       return result.getInt(1);

Nevíte někdo čím to může být?

Editováno 27.4.2014 21:49
 
Odpovědět
27.4.2014 21:47
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Milan Gallas
MrPabloz:27.4.2014 21:49

Já myslím že problem spíš bude v tom, že to budeš muset udělat jako string, a pak teprv vykonat, prepared statement totiž první tabulku předpřipraví, ale když nezná jméno, tak nemá co předpřipravit = preared statement nefunguje :)

Nahoru Odpovědět
27.4.2014 21:49
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na MrPabloz
Milan Gallas:27.4.2014 22:29

Myslíš takhle?

public int count(String table) throws SQLException{
        PreparedStatement ps =
                connection.prepareStatement("SELECT COUNT(*) FROM "+table);
       ResultSet result = ps.executeQuery();
         result.next();
        return result.getInt(1);
}

Ale takhle bych to udělat nemohl. Byla by to bezpečnostní díra.

 
Nahoru Odpovědět
27.4.2014 22:29
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na MrPabloz
Milan Gallas:27.4.2014 22:33

Né vlastně to je blbost. Uživatel nebude komunikovat přímo s Wrapperem a programátor si to při tvorbě uhlídá, takže by v tom neměl být problém. Toto vlákno můžete uzavřít :D

 
Nahoru Odpovědět
27.4.2014 22:33
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.