post icon

Insertar datos desde un csv a mysql con java

A continuacion veremos una forma sencilla, para insertar o actualizar los datos en una db mysql desde un archivo csv para ello necesitaremos una librería externa que pueden descargarla desde aqui:
http://oss.mars.asu.edu/trac/jmars/browser/trunk/lib/javacsv.jar?rev=1

Para esto supongamos que nuestro archivo csv este ordenado asi:

100,"Juan","Gonzalez",123454,"5ta avenida c/Artigas 1560","59521-345445";

Con este ejemplo nosotros insertamos y actualizamos los datos en la db por medio de procedimientos almacenados. El nombre de los sp pueden variar, y la logica es casi lo mismo para insertar o actualizar en otros motores de bases de datos.

 import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import conexionDB.ConexionMySQL;
//libreria que obtuvimos.
import com.csvreader.CsvReader;
public static void Insertardesdecsv() throws Exception {
	//declaramos las variables que vamos a usar en esta clase. En dichas variables vamos cargar los datos que lee
	//leemos desde nuestro archivo .csv
	int cod_usuario = 0;
	String cin = null;
	String nombre = null;
	String apellido = null;
	String direccion = null;
	String telefono = null;
	//100,"Juan","Gonzalez",123454,"5ta avenida c/Artigas 1560","59521-345445";
	CsvReader reader = null;{
	try {
		//aqui le ponemos el path donde esta ubicado el archivo. OJO..
		//para colocar los path de ubicaciones en windows ahi que poner // en ves de /
		reader = new CsvReader("c:\\archivo.csv");
		reader.setDelimiter(',');
		while(reader.readRecord()){
			//aqui mostramos en pantalla los datos que leemos del archivo.
			System.out.println("Nombre: "
			+ reader.get(2) + " " + "Apellido: "+ reader.get(3) + " CIN: " + reader.get(1));
			//aqui cargamos las variables con los datos que estan dentro del archivo
			cod_usuario = Integer.parseInt(reader.get(0));
			nombre = reader.get(2);
			apellido = reader.get(3);
			cin = reader.get(1);
			direccion = reader.get(4);
			telefono = reader.get(5);
			//aqui establecemos la conexion con la base de datos.
			Connection connMY = null;
			{
				try {
					String url = "127.0.0.1:3306";
					String user = "usuario";
					String password = "contraseña";
					// conexion a mysql
					connMY = ConexionMySQL.conectar(url,user,password);
					connMY.setAutoCommit(false);
					String strSQL = "call cism.NOM_SLC_USUARIOS(?)";
					PreparedStatement psMY = connMY
					.prepareStatement(strSQL);
					// paso el parametro de usuario necesario para
					// verificar si existe
					psMY.setInt(1, cod_usuario);
					// comunes.ResultSet para usuarios del cism
					ResultSet rsUsuarios = psMY.executeQuery();
					// objeto para ejecutar SP
					CallableStatement prcSubeUsuario = null;

					// si no es eof() existe, por lo tanto hacer
					//update si es eof() no existe, hacer insert

					if (rsUsuarios.next()) {
						// asignar SP
						prcAddUsuario = connMY
						.prepareCall("{ call db.UPDATE_USUARIOS(?,?,?,?,?,?) }");
					} else {
						// asignar SP
						prcAddUsuario = connMY
						.prepareCall("{ call db.INSERTAR_USUARIOS(?,?,?,?,?,?) }");
					}// end if existe usuario
						// cargar parametros al SP
						//tiene que estar ordenados de acuerdo la orden en que recibe los parametros el sp
						//con este ejemplo el orden de entrada de parametros para los dos sp seria asi:
						//(CodUsuarios,Nombres,Apellidos,vcin,vdireccion,vtelefono)
						prcAddUsuario.setInt("CodUsuario", cod_usuario);
						prcAddUsuario.setString("Nombres", nombre);
						prcAddUsuario.setString("Apellidos", apellido);
						prcAddUsuario.setString("vcin", cin);
						prcAddUsuario.setString("vdireccion", direccion);
						prcAddUsuario.setString("vtelefono", telefono);
						// procedemos a ejecutar el sp
						prcAddUsuario.execute();
						connMY.commit();
						// informar
						System.out.println(" Alzado o actualizado Correctamente!");
					} catch (Exception e) {
						// informar
						System.out
						.println(" WTF!!?... Ocurrio un error al subir..");
						System.out.println(e.getMessage());
						e.printStackTrace();
						connMY.rollback();
					} finally {
						if (!connMY.isClosed())
							connMY.close();
					}// end try mysql coneccion.
				}//end connection ConnMY
			}//end while readrecord
		} catch (Exception e) {
		}// end try leer csv
	}// end csv reader
}// end SubirPersonalcsv 

Comentarios desde Facebook:

  1. avatar
    Your Name MEXICO Mozilla Firefox Ubuntu Linux
    21 marzo 2013 at 20:02 #

    Disculpa la pregunta pero yo empieso en esto
    el codigo se tiene que compilar o de que forma lo ejecuto

Responder