Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Intestazione colonne database

    ho scritto questo per connettermi e leggere dati da un db:
    codice:
    public class Leggi {
    
        static final String DRIVER = "com.mysql.jdbc.Driver";
        static final String DATABASE_URL = "jdbc:mysql://......";
    
        public static String leggi() {
            String line = "";
            String colonne = "";
            Connection connection = null;
            Statement statement = null;
            ResultSet resultSet = null;
    
            try {
                Class.forName(DRIVER);
                connection = DriverManager.getConnection(DATABASE_URL);
                statement = connection.createStatement();
                resultSet = statement.executeQuery("select * from movimenti");
                String i = "";
                String e = "";
                String u = "";
                String c = "";
                String d = "";
                while (resultSet.next()) {
                    i = resultSet.getString(1);
                    e = resultSet.getString(2);
                    u = resultSet.getString(3);
                    c = resultSet.getString(4);
                    d = resultSet.getString(5);
                    line += i + ": " + e + ", " + u + ", " + c + ", " + d + "\n";
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } catch (ClassNotFoundException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } finally {
                try {
                    resultSet.close();
                    statement.close();
                    connection.close();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e.getMessage());
                }
                return colonne + "\n" + line;
            }
        }
    tutto ciò verrà caricato in una textarea.
    l'unica cosa che mi manca è il nome delle colonne.
    cioè, sopra ai risultati vorrei stampare il nome delle colonne.
    ma come faccio a prenderli??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Intestazione colonne database

    Originariamente inviato da fermat
    l'unica cosa che mi manca è il nome delle colonne.
    cioè, sopra ai risultati vorrei stampare il nome delle colonne.
    ma come faccio a prenderli??
    Dai "metadati" del resultset.

    ResultSetMetaData rsmd = resultSet.getMetaData();

    E se vai a vedere il javadoc di ResultSetMetaData i metodi sono davvero molto semplici (e intuitivi): puoi sapere il numero di colonne e per la colonna i-esima puoi ottenere nome, tipo, precisione, se con segno, ecc....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    eccomi con qualche problemino:
    codice:
    public static String leggi() {
            String line = "";
            int colonne = 0;
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            ResultSetMetaData rsmd = null;
            try {
                Class.forName(DRIVER);
                conn = DriverManager.getConnection(DATABASE_URL);
                stmt = conn.createStatement();
                rs = stmt.executeQuery("select * from movimenti");
                rsmd = rs.getMetaData();
                colonne = rsmd.getColumnCount();
                for (int i = 1; i <= colonne; i++) {
                    rsmd.getColumnName(i);
                }
                String i = "";
                String e = "";
                String u = "";
                String c = "";
                String d = "";
                while (rs.next()) {
                    i = rs.getString(1);
                    e = rs.getString(2);
                    u = rs.getString(3);
                    c = rs.getString(4);
                    d = rs.getString(5);
                    line += i + ": " + e + ", " + u + ", " + c + ", " + d + "\n";
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } catch (ClassNotFoundException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } finally {
                try {
                    rs.close();
                    stmt.close();
                    conn.close();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e.getMessage());
                }
                return rsmd + "\n" + line;
            }
        }
    la parte iniziale che mi compare è questa:
    codice:
    com.mysql.jdbc.ResultSetMetaData@3e152f4 - Field level information: 
    	com.mysql.jdbc.Field@3e0d1329[catalog=banca,tableName=movimenti,originalTableName=movimenti,columnName=id,originalColumnName=id,mysqlType=3(FIELD_TYPE_LONG),flags= AUTO_INCREMENT PRIMARY_KEY, charsetIndex=63, charsetName=US-ASCII]
    	com.mysql.jdbc.Field@4c650892[catalog=banca,tableName=movimenti,originalTableName=movimenti,columnName=entrate,originalColumnName=entrate,mysqlType=3(FIELD_TYPE_LONG),flags=, charsetIndex=63, charsetName=US-ASCII]
    	com.mysql.jdbc.Field@7d15d06c[catalog=banca,tableName=movimenti,originalTableName=movimenti,columnName=uscite,originalColumnName=uscite,mysqlType=3(FIELD_TYPE_LONG),flags=, charsetIndex=63, charsetName=US-ASCII]
    	com.mysql.jdbc.Field@2326a29c[catalog=banca,tableName=movimenti,originalTableName=movimenti,columnName=causale,originalColumnName=causale,mysqlType=253(FIELD_TYPE_VAR_STRING),flags=, charsetIndex=33, charsetName=UTF-8]
    	com.mysql.jdbc.Field@3d7dc1cb[catalog=banca,tableName=movimenti,originalTableName=movimenti,columnName=data,originalColumnName=data,mysqlType=10(FIELD_TYPE_DATE),flags= BINARY, charsetIndex=63, charsetName=US-ASCII]
    insomma devo forse formattare l'output in qualche modo??

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    eccomi con qualche problemino:

    insomma devo forse formattare l'output in qualche modo??
    Hai usato rsmd.getColumnName(i); da solo .... che non so a cosa ti serva.

    Nel tuo caso puoi usare getColumnName o getColumnLabel, che ritornano String (quindi non vedo dubbi .... puoi stamparlo). La differenza tra i due è quando si usa la clausola AS per le colonne es. SELECT xyz AS titolo ..... e getColumnLabel fornisce "titolo".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    giusto hai ragione:
    codice:
    public static String leggi() {
            String line = "";
            int numcolonne = 0;
            String nomecolonne = "";
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            ResultSetMetaData rsmd = null;
            try {
                Class.forName(DRIVER);
                conn = DriverManager.getConnection(DATABASE_URL);
                stmt = conn.createStatement();
                rs = stmt.executeQuery("select * from movimenti");
                rsmd = rs.getMetaData();
                numcolonne = rsmd.getColumnCount();
                for (int i = 1; i <= numcolonne; i++) {
                    nomecolonne = rsmd.getColumnName(i);
                }
                String i = "";
                String e = "";
                String u = "";
                String c = "";
                String d = "";
                while (rs.next()) {
                    i = rs.getString(1);
                    e = rs.getString(2);
                    u = rs.getString(3);
                    c = rs.getString(4);
                    d = rs.getString(5);
                    line += i + ": " + e + ", " + u + ", " + c + ", " + d + "\n";
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } catch (ClassNotFoundException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } finally {
                try {
                    rs.close();
                    stmt.close();
                    conn.close();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e.getMessage());
                }
                return nomecolonne + "\n" + line;
            }
        }
    giustamente stampandolo da solo nn veniva letto bene.
    ho creato una stringa apposita inizializzata vuota.
    solo che adesso mi stampa solo l'ultima colonna.
    nn riesco a capire perchè però, in teoria essendo scandagliato dal for dovrebbe leggerle tutte.

  6. #6
    fatto!!:
    codice:
                for (int i = 1; i <= numcolonne; i++) {
                    nomecolonne += rsmd.getColumnLabel(i) + ": ";
                }
    grazie!!

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.