Java - Insertar un registro a mysql desde un txt.

 
Vista:

Insertar un registro a mysql desde un txt.

Publicado por marcel (6 intervenciones) el 27/03/2015 20:44:27
amigos tengo un problema quiero insertar un registro de datos que obtengo de un txt lo cual ya me funciona toma las variables del txt pero nose xq no me lo inserta a MYSQL este es.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package InsertarRegistro ;
 
import java.lang.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
import java.sql.Statement;
 
 
 
 
 
 
public class InsertarRegistro  {
 
private String rutaArchivo;
private String linea;
 
String[] parts;
String part1 ;
String part2 ;
String part3 ;
String part4 ;
String servidor ;
String usuarioDB ;
String passwordDB ;
 
    protected Connection conn = null;
 
    protected Statement stmt = null;
 
    /**

     * Conecta con la base de datos 'cliente' de un servidor

     * MySQL local.
     * @throws java.lang.Exception
     */
 
    public void conectar() throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
 
           servidor = "jdbc:mysql://localhost:3306/ecos";
          usuarioDB="root";
           passwordDB="";
 
        this.conn = DriverManager.getConnection(servidor,usuarioDB,passwordDB);
 
        this.stmt = conn.createStatement();
 
    }
 
 
 
 
public void leerArchivo(){
 
try{
 
this.rutaArchivo="c:/ecografia/archivo.txt";
 
FileReader fr=new FileReader(rutaArchivo);
BufferedReader entradaArchivo=new BufferedReader(fr);
linea=entradaArchivo.readLine();
while (linea != null) {
 
 
 
 
parts = linea.split("\\|");
part1 = parts[0]; // 004
part2 = parts[1]; // 034556
part3 = parts[2]; // 004
part4 = parts[3]; // 004
 
System.out.println(linea);
System.out.println(part1);
System.out.println(part2);
System.out.println(part3);
System.out.println(part4);
 
linea=entradaArchivo.readLine();
}
}catch(IOException ex){
System.out.println("Error en la apertura del archivo "+ex.toString());
}
 
}
 
    /**

     * @throws Exception DOCUMENT ME!

     */
 
    @SuppressWarnings("empty-statement")
    public void desconectar() throws Exception {
 
        if (this.stmt != null) {
 
            try {
 
                this.stmt.close();
 
            } catch (SQLException SQLE) {
 
                ;
 
            }
 
        }
 
        if (this.conn != null) {
 
            try {
 
                this.conn.close();
 
            } catch (SQLException SQLE) {
 
                ;
 
            }
 
        }
 
    }
 
 
 
    protected void insertarUnCliente() throws SQLException {
 
          String sql = "insert into  semst01 " +  "(CEDPAC, NOMPAC, DIRPAC, TELPAC) "  + " values ('"+part2+"','"+part4+"','"+part1+"','"+part3+"')";
 
          stmt.execute(sql);
 
    }
 
 
 
 
 
    public static void main(String[] args)  throws ClassNotFoundException, SQLException{
 
      InsertarRegistro ie = new InsertarRegistro();
 
      try {
 
        ie.conectar();
        ie.leerArchivo();
        ie.insertarUnCliente();
        ie.desconectar();
 
      }  catch (Exception e) {
      }
 
      System.out.println("Ok!");
 
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alberto
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Insertar un registro a mysql desde un txt.

Publicado por Alberto (303 intervenciones) el 27/03/2015 22:35:19
1.- El método split() te devuelve un Arreglo de un String de acuerdo al separador que hayas definido, por lo tanto, para recuperar todos los valores que se encuentran dentro del arreglo tendrías que recorrerlo: Ejemplo:

1
2
3
for(int i = 0; i < parts.length; i++){
	System.out.println(parts[i]);
}

En donde el contenido del recorrido no sería una impresión en pantalla, mas bien, sería la consulta para insertar en la base de datos.

Sin embargo, dado tu caso, en vez de utilizar un ciclo for implementaremos un while ya que mientras haya linea en tu archivo, se leen y se van guardando en tu base de datos

3.- PreparedStatement es una forma mas eficiente de realizar transacciones a la base de datos, ya que además de heredar de la clase Statement, es una versión mas poderosa en todos los sentidos de dicha clase, entre ellas la facilidad de hacer realizar consultas parametrizadas. No es necesario que separes tu consulta múltiples veces, puedes dejarlo todo en un String y esta se ejecutara de manera correcta (Regularmente se separa cuando la consulta es muy grande y tienes que mover el Scroll para poder verla), a continuación tu consulta:

"INSERT INTO semst01(CEDPAC,NOMPAC,DIRPAC,TELPAC) VALUES (?,?,?,?)"


Los ? son interpretados como parametros, por lo tanto, únicamente es cuestión de colocar los valores a una de ellos.

1
2
3
4
st.setString(1,  part2);
st.setString(2,  part4);
st.setString(3,  part1);
st.setString(4,  part3);

En donde el primer valor significa la posición del parámetro y el segundo el String a pasar, que en este caso viene siendo tus variables, cabe mencionar que no solo hay setString, sino tambien setInteger, setFloat, entre otros. Además, es importante que recuerdes que en este caso, el valor inicial siempre sera 1, por lo tanto no aplica el index 0.

Finalmente solo es cuestión de ejecutar la consulta y cerrar los recursos necesarios.

Aquí el código de como quedaría mas o menos tu proceso para insertar los registros, supongo que si falta algo podrías acomodarlo a tu gusto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while(linea != null){
	palabras = linea.split(" ");
	part1 = palabras[0];
	part2 = palabras[1];
	part3 = palabras[2];
	part4 = palabras[3];
	PreparedStatement st = conn.prepareStatement("INSERT INTO semst01(CEDPAC,NOMPAC,DIRPAC,TELPAC) VALUES (?,?,?,?)");
	st.setString(1, part2);
	st.setString(2, part4);
	st.setString(3, part1);
	st.setString(4, part3);
	st.executeUpdate();
	linea = br.readLine();
}
conn.close();

Cualquier duda y/o comentario, estamos para ayudarte, suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar