Ordenar archivo xlsx alfabéticamente mediante java

Buenos días

quien me puede ayudar con algo, estoy subiendo un archivo de excel a un jsp para guardarlo en MySQL, el archivo de excel tiene 8 columnas y se descarga de una plataforma que se llama jira con el registro de las labores de los empleados, el archivo se descargar totalmente en desorden, la idea es que al momento de subirlo al jsp para guardarlo en MySQL quede ordenado alfabéticamente por la columna de nombre_empleado
ya que la tabla de MySQL donde va a quedar guardado el archivo tiene una clave primaria compuesta por tres columnas y una de esas columnas es un auto_increment que habría que reiniciarlo por cada nombre registrado
alguien me puede decir por favor como ordenar el archivo de excel mediante la lectura de el en java para insertarlo en MySQL ya ordenado gracias

si no me hecho entender bien me dicen por favor

aca es donde el leo el archivo de excel

package models;

import dao.TablaJiraDao;
import dao.TablaNovedadesDao;
import dao.TablaNovedadEmpleadoDao;
import entidades.TablaJira;
import entidades.TablaNovedadEmpleado;
import entidades.TablaNovedades;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Date;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcel2 {

    public static void leerArchivoExcel2(FileInputStream inputStream) throws IOException {

        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
        Sheet firstSheet = workbook.getSheetAt(0);

        for (int i = 1; i < firstSheet.getLastRowNum(); i++) {
            Row fila = firstSheet.getRow(i);

            TablaJira ji = new TablaJira();
            // Recorremos las celdas

            int j = 0;
            int cont = 0;
            for (j = 0; j < fila.getLastCellNum(); j++) {
                Cell celda = fila.getCell(j);
               
                if (j == 0) {

                    if (celda == null || celda.getCellType() == Cell.CELL_TYPE_BLANK) {
                        break;
                    }
                }

                switch (j) {

                    case 0:
                        if (celda.getCellType() == Cell.CELL_TYPE_STRING) {
                            ji.setProyecto(celda.getStringCellValue());

                        }

                        //   n.setNovedad(celda.getStringCellValue());
                        break;

                    case 1:
                        if (celda.getCellType() == Cell.CELL_TYPE_STRING) {
                            ji.setTipo(celda.getStringCellValue());
                        }
                        //ne.setFecha_inicio(celda.getStringCellValue());
                        break;

                    case 2:
                        if (celda.getCellType() == Cell.CELL_TYPE_STRING) {
                            ji.setClave(celda.getStringCellValue());
                        }
                        //ne.setFecha_fin(celda.getStringCellValue());

                        break;

                    case 3:
                        if (celda.getCellType() == Cell.CELL_TYPE_STRING) {
                            ji.setTitulo(celda.getStringCellValue());
                        }
                        //ne.setAño(celda.getStringCellValue());

                        break;
                    case 4:
                        if (celda.getCellType() == Cell.CELL_TYPE_STRING) {
                            ji.setNombres(celda.getStringCellValue());

                        }

                        // nombreant = nombresc;
                        //ne.setDias(celda.getStringCellValue());
                        break;
                    case 5:
                        if (celda.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                            ji.setTiempo_horas((int) celda.getNumericCellValue());
                        } //else if (celda.getCellType()== Cell.CELL_TYPE_STRING){
                        //ne.setHoras(celda.getStringCellValue());
                        break;
                }
            }

            //Se guardan los datos por cada fila
            //guardarTablaNovedadEmpleado(ne);
            //guardarTablaNovedades(n);
            if (j > 0) {
                guardarTblJira(ji);
            }
        }
    }

    private static void guardarTblJira(TablaJira ji) {
        TablaJiraDao dao = new TablaJiraDao();
        dao.insertarTablaJira(ji);

    }

    /* private static void guardarTablaNovedadEmpleado(TablaNovedadEmpleado ne) {
        TablaNovedadEmpleadoDao dao = new TablaNovedadEmpleadoDao();
        dao.insertarTablaNovedadEmpleado(ne);
    }

    private static void guardarTablaNovedades(TablaNovedades n) {
        TablaNovedadesDao dao = new TablaNovedadesDao();
        dao.insertarTablan(n);//To change body of generated methods, choose Tools | Templates.
    }*/
}

Y ACÁ ES DONDE LO GUARDO

package dao;

import entidades.TablaJira;
import java.io.PrintWriter;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import models.Conexion;

/**
 *
 * @author pcc
 */

public class TablaJiraDao {

    public int insertarTablaJira(TablaJira ji) {
        int bandera = 0;
        Conexion con = null;
        try {
            con = new Conexion();
            String query = "INSERT INTO tbljira (proyecto , tipo , clave , titulo , nombres , tiempo_horas) values (? , ? , ? , ? , ? , ? )";
            PreparedStatement st = con.getConn().prepareStatement(query);
            // Empieza desde 1, cada número coresponde a la posición de cada signo de interrogación (?)
            //  st.setString(1, r.getNro_Documento());
            st.setString(1, ji.getProyecto());
            st.setString(2, ji.getTipo());
            st.setString(3, ji.getClave());
            st.setString(4, ji.getTitulo());
            st.setString(5, ji.getNombres());
            st.setInt(6, ji.getTiempo_horas());

            bandera = st.executeUpdate();

            //System.out.println ("El archivo se a guardado exitosamente");
        } catch (SQLException ex) {

            Logger.getLogger(TablaJiraDao.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (con != null) {
                con.close();
            }

        }
        return bandera;

    }
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

WAT

Pero por qué tienen que insertarlo en orden? Me parece que sería mucho más simple meterlo en desorden a la tabla y tener un índice sobre la columna que les interesa para posteriormente poder hacer consultas ordenando por dicha columna y ya. Incluso MySQL tiene esa funcionalidad, a pesar de ser una base de datos bastante chafona.

Imagen de Jose Manuel

Que tal Sr. Enrique, siempre

Que tal Sr. Enrique, siempre he querido preguntarle porque considera que MySQL es una base de datos, no tan buena. A mi me gusta PostgreSQL.

Imagen de ezamudio

PostgreSQL!

PostgreSQL es la neta. Bien diseñada, bien hecha, excelente desempeño, escalabilidad, configurabilidad, todo.

MySQL por otra parte tiene sus broncas de desempeño, y algo mucho más grave: de integridad. Trabajé con mysql hace ya muchos años, espero que ya hayan arreglado sus broncas, pero pues desde entonces postgresql era infinitamente superior, la verdad no creo que hayan alcanzado ese nivel de calidad porque postgresql sigue avanzando también.

Y siempre queda la sospecha de que si esos problemas de mysql están ahí a propósito, por el rollo de la licencia dual. Tal vez la versión pagada no los tiene?

Imagen de Jose Manuel

Perdon por el offtopic, tengo

Perdon por el offtopic, tengo este libro, pienso imprimirlo para estudiarlo, ¿me servira para aprender PostgreSQL? De no ser asi, ¿existe algun material que me pueda recomendar para ser un buen aministrador de base datos (sobre todo en postgresql)?
Gracias por la respuesta.

Re: imprimirlo

Mmm... ¿Un libro de 3318 páginas?

Imagen de ezamudio

no lo imprimas

Mejor estúdialo sin imprimirlo.

La documentación de postgresql es bastante completa, pero es referencia nada más. Para ser un buen administrador de base de datos vas a necesitar estudiar fundamentos de bases de datos relacionales y luego cosas específicas de las RDBMS que manejes, pero sobre todo mucha, mucha experiencia.

Antes de guardar almacena

Antes de guardar almacena todo en un arreglo y ordena el arreglo

        List<TablaJira> data = new ArrayList<>;
        for (int i = 1; i < firstSheet.getLastRowNum(); i++) {
            TablaJira jira = readRow( firstSheet.getRow(i)); // donde esta todo lo de leer columnas
            data.add( jiraRow );
        }
        // ordena usando los nombres para comparar quien va antes de quien
       Collections.sort( data, ( one, two ) -> one.getNombre().compareTo(two.getNombre());
       // ya ordenado inserta
       for( TablaJira jira : data ) {
           insertaTablaJira( jira );
       }
     ...

Esto tiene la desventaja (quizá imperceptible ) de cargar toda la información en memoria antes de escribirla. Si tienes un par de miles de registros no habría muchos problemas, pero si tienes millones se puede acabar la memoria ( aunque quizá se acabaría de cualquier manera al leer el siguiente archivo )

Tiene un menor desempeño, pero dependiendo de la cantidad de datos puede ser de nuevo imperceptible.

La otra opción es como ya lo dijo ezamudio usa un índice en la base de datos.