Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138

    DatabaseMetaData recuperare campo enum

    salve a tutti ho un problema con i metodi di DataBaseMetaData che sto utilizzando per raccogliere le informazioni su un database mysql.

    Quando mi trovo davanto a un tipo ENUM non riesco a prelevare i valori di default che questo può assumere (ad esempio ad ottenere una stringa che li contenga e che poi posso trattare)

    c'è qualche modo per farlo considerando che faccio

    ResultSet resultSet = metadata.getColumns(null, null, tabName, null);

    String type = resultSet.getString("TYPE_NAME");

    quando quel TYPE_NAME è uguale a ENUM non so come riprendere i valori di defaul che enum può assumere...

    grazie per qualsiasi risposta.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Dopo una breve ricerca - quindi potrei aver tratto le conclusioni sbagliate - non penso si possa.
    sul forum di mysql c'è questo thread (nella pagina di ENUM)

    If you want to get an array in php with all possible values for an ENUM or SET column, you should use: SHOW COLUMNS FROM table_name LIKE 'enum_column_name' (with or without %-wildcards), and parse it with the following php script:

    $result=mysql_query($query);
    if(mysql_num_rows($result)>0){
    $row=mysql_fetch_row($result);
    $options=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row[1]));
    }

    Now $options is an array with all possible values

    Hope it helps.
    Magari lo traduci in java...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138
    dunque, ho risolto, si può .
    Posterò la soluzione non appena avrò terminato l'estrazione dell'array di stringhe contente i valori di default di ENUM

  4. #4
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138
    Dunque la soluzione da me adottata prevede un controllo sul tipo ENUM

    codice:
    if (resultSet.getString("TYPE_NAME").equals("ENUM")){
                            
                            PreparedStatement ps = null;
                            ResultSet rs = null;
                            String sql = "SHOW COLUMNS FROM ".concat(tabName).concat(" LIKE '").concat(name).concat("'");
                            try{
                             // connessione al db
                                    Class.forName(DRIVER);
                                    Connection condb = DriverManager.getConnection(dburl.concat(dbName), dbusername, dbpassword);
                             // estrae il valore dei campi
                                   ps = (PreparedStatement) condb.prepareStatement(sql);
                                   rs = ps.executeQuery();
                                   rs.next();
                                   cenum = rs.getString("Type");
                            }
                            catch (Exception ex) {
                                    throw new LibraryException("dati non pervenuti", ex);
                            }                       
                        }
    con la query
    codice:
    String sql = "SHOW COLUMNS FROM ".concat(tabName).concat(" LIKE '").concat(name).concat("'");
    ottengo una vista il cui secondo campo corrisponde al campo Type e in cui sono contenuti
    i valori di default nel seguente formato

    codice:
    enum('uno','due','tre')
    il cui valore lo riprendo così
    codice:
    cenum = rs.getString("Type");
    è sufficiente trattare questa stringa con stringtokenizer e qualche substring per ottenere tutti gli item corrispondenti ai valori di default dell' enum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.