Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: rob25 en 28 de Octubre 2020, 21:07
-
Buenas me piden lo siguiente: Necesito realizar un programa que me lea un fichero llamado “personas.txt” y introducir estos valores en la tabla clientes de mySql.
El fichero personas.txt tiene varios INSERT INTO CLIENTES de id, nombre y apellidos.
Yo tengo realizado lo siguiente pero no me funciona:
public class Clientes{
public static void main(String[] args) throws SQLException, IOException, ClassNotFoundException {
String nombredriver ="com.mysql.cj.jdbc.Driver";
ResultSet rs = null;
int ID = 0;
String NOMBRE = " ";
String Apellidos= " ";
String[] tokens;
FileReader file1 = new FileReader("src/personas.txt");
BufferedReader buffer1 = new BufferedReader(file1);
String line = buffer1.readLine();
Class.forName(nombredriver);
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3307/clientes" +
"?useUnicode=true"+
"&serverTimezone=UTC", "root", "root");
Statement stmt=con.createStatement();
while((line = buffer1.readLine()) != null)
{
tokens = line.split(",");
ID = Integer.parseInt(tokens[0]);
NOMBRE = tokens[1];
APELLIDOS= tokens[2];
String insertString = "insert into clientes (ID, NOMBRE, APELLIDOS) values ('"+ID+"', '"+NOMBRE+"', '"+APELLIDOS+"'))";
stmt.executeUpdate(insertString);
}
con.close();
stmt.close();
}
}
-
No te funciona, pero... ¿Exactamente que te falla?
¿No encuentra el fichero de texto?
¿Lo encuentra pero no lo lee bien?
¿Lo lee bien pero falla al insertar los datos en la BBDD?
Aparentemente, el código parece estar bien, creo...
Lo único que me llama un poco la atención es que la primera lectura de línea se pierde.
Aquí lees la primera línea (marco en negrita):
FileReader file1 = new FileReader("src/personas.txt");
BufferedReader buffer1 = new BufferedReader(file1);
String line = buffer1.readLine();
Pero lo que se haya leído, se pierde sin haber trabajado con ella, porque luego el bucle while comienzas leyendo otra vez, así que el bucle empieza a trabajar con la segunda línea.
while((line = buffer1.readLine()) != null)
{
tokens = line.split(",");
ID = Integer.parseInt(tokens[0]);
NOMBRE = tokens[1];
APELLIDOS= tokens[2];
String insertString = "insert into clientes (ID, NOMBRE, APELLIDOS) values ('"+ID+"', '"+NOMBRE+"', '"+APELLIDOS+"'))";
stmt.executeUpdate(insertString);
}
Esto puedes evitarlo si en el bucle, haces la lectura de líneas justo al final.
En la condición del while simplemente comprueba si la línea es null. La lectura de nueva línea lo dejas para lo último, cuando ya se haya trabajado con la anterior línea leída
while(line != null)
{
tokens = line.split(",");
ID = Integer.parseInt(tokens[0]);
NOMBRE = tokens[1];
APELLIDOS= tokens[2];
String insertString = "insert into clientes (ID, NOMBRE, APELLIDOS) values ('"+ID+"', '"+NOMBRE+"', '"+APELLIDOS+"'))";
stmt.executeUpdate(insertString);
//Leemos siguiente línea
line = buffer1.readLine()
}
-
Vale gracias ya me funciona, otra duda que te quería preguntar tengo una tabla clientes otra tabla stock y otra tabla pedidos, me piden que a partir de un cliente y un stock que es como un producto inserte datos en pedidos a traves de un metodo. Tengo que hacer uso de los placeholders a la hora de insertar.
Mi problema es que no me da ningun error el programa en sí pero no se insertan los datos en la tabla pedidos.
El for llega hasta 5 que son los clientes y stock que hay
Gracias de nuevo
Te adjunto codigo:
package Cliente;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class clientes2{
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:mysql://localhost:3307/clientes2" +
"?useUnicode=true"+
"&serverTimezone=UTC";
String nombreDriver = "com.mysql.cj.jdbc.Driver";
String sql = ("INSERT INTO VENTAS VALUES (?,?)");
try {
Class.forName(nombreDriver);
Connection con = DriverManager.getConnection(url, "root", "root");
PreparedStatement pstmt = con.prepareStatement(sql);
for(int i=1; i<=5;i++) {
pstmt.setInt(1, i); //ID CLIENTE
pstmt.setInt(1, i); //ID STOCK
}
pstmt.close();
con.close();
}catch(ClassNotFoundException e){
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}