package com.trifulcas.country;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class StatementPreparado {
public static void main(String[] args) {
// ¿Qué es un procedimiento preparado?
// Es la manera habitual hoy en día de hacer statements
// Hemos visto en los ejemplos que las sentencias sql
// normalmente las combinamos con variables
// p. ej. "insert into category(name) values ('"+categoria+"')"
// Lo puedo concatenar como estoy haciendo hasta ahora
// pero puedo utilizar en vez de eso PreparedStatements
// que son statements a los que les puedo pasar variables
// 1.- Claridad, yo separo el sql de los valores
// 2.- Eficiencia. Cuando hago un procedimiento preparado, si se repite la BD ya tiene cacheado el esquema
// 3.- Protección contra inyección sql. Yo no sé que tiene la variable, puede tener sentencias sql
// ¿Cómo hacer un procedimiento preparado? Muy parecido a normal
Scanner scanner = new Scanner(System.in);
System.out.println("Introduzca el nombre del país");
String pais = scanner.nextLine();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", "");
// Yo creo un sql y allá donde tengo el parámetro (donde metía la variable)
// Pongo un interrogante
String sql="insert into country (country) values(?)";
// En vez de Statement uso PreparedStatement
PreparedStatement psst=con.prepareStatement(sql);
// Añado los valores de los parámetros
// Posición, valor
psst.setString(1, pais);
// Ejecuto
int res=psst.executeUpdate();
System.out.println("Se han insertado "+res+" registros");
psst.close();
con.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
package com.trifulcas.country;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class AddActors {
public static void main(String[] args) {
Connection con = null;
PreparedStatement st = null;
Scanner scanner = new Scanner(System.in);
System.out.println("Introduzca el número de actores");
int cantidad = scanner.nextInt();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", "");
String sql = "insert into actor (first_name,last_name) values (?,?);";
st = con.prepareStatement(sql);
for (int i = 1; i <= cantidad; i++) {
System.out.println(sql);
st.setString(1, "nombre"+i);
st.setString(2, "apellido"+i);
int res = st.executeUpdate(sql);
System.out.println(res + " registros afectados");
}
st.close();
con.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
try {
st.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
scanner.close();
}
}
}
package com.trifulcas.country;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class AddCategory {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Introduzca el nombre de la categoría");
String categoria = scanner.nextLine();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", "");
String sql = "insert into category (name) values(?)";
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, categoria);
System.out.println(st);
int res = st.executeUpdate();
System.out.println(res + " registros afectados");
st.close();
con.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
package com.trifulcas.country;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class AddCountry {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Introduzca el nombre del país");
String pais = scanner.nextLine();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", "");
String sql="insert into country (country) values(?)";
PreparedStatement st=con.prepareStatement(sql);
st.setString(1, pais);
int res=st.executeUpdate();
System.out.println("Se han insertado "+res+" registros");
st.close();
con.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
package com.trifulcas.country;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class DeleteCountry {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Introduzca el id del país a eliminar");
String pais = scanner.nextLine();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", "");
String sql="delete from country where country_id=?";
PreparedStatement st=con.prepareStatement(sql);
st.setString(1, pais);
int res=st.executeUpdate();
System.out.println("Se han eliminado "+res+" registros");
st.close();
con.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
package com.trifulcas.country;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
public class GetCountries {
public static void main(String[] args) {
// Buscar todos los países que tengan un texto determinado
Scanner scanner = new Scanner(System.in);
// Pido el texto
System.out.println("Introduzca el texto a buscar");
String texto = scanner.nextLine();
try {
// Hago lo estándar
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", "");
// ¿Qué sql necesito?
String sql = "select * from country where country like ?";
System.out.println(sql);
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, '%'+texto+'%');
// Aquí no modificamos sino que seleccionamos, por lo tanto usamos
// executeQuery para ejecutar y un ResultSet para almacenar los resultados
ResultSet rs = st.executeQuery();
// Si yo hago un bucle recorro todos los registros
while (rs.next()) {
System.out.println(rs.getString("country"));
System.out.println(rs.getDate("last_update"));
}
// Al tener el tipo TYPE_SCROLL_INSENSITIVE puedo ir a registros determinados
st.close();
con.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
scanner.close();
}
}