Professional Documents
Culture Documents
UF4:
Hi haur un tipus test que preguntar sobre conceptes de la POO. Static,
abstract, constructors, herncia, polimorfisme, modificadors d'accs, etc. Les
preguntes seran de veritat/fals i test, i s'assemblaran a les que es van anar plantejar al
frum al llarg d'aquesta UF.
Alguna pregunta d'entendre qu fa un codi, o de detectar i arreglar els errors en
un codi.
UF5:
Cal entendre i saber utilitzar les llistes, els conjunts i els diccionaris (List, Set i
Map).
Cal entendre el mecanisme de les excepcions i saber utilitzar-les: try, catch,
throw i throws.
Cal saber crear una interfcie grfica senzilla. Cal entendre el mecanisme dels
layouts i com combinar-los utilitzant JPanel. Els layouts sn els bsics: FlowLayout,
BorderLayout, GridLayout i BoxLayout. Els controls tamb sn els bsics: botons,
etiquetes i quadres de text.
Cal entendre i saber utilitzar el mecanisme d'esdeveniments i listeners: fer que
una classe sigui listener, afegir listeners, respondre esdeveniments. Noms els tipus de
listeners ms comuns.
Cal saber llegir i escriure fitxers de text i binaris.
UF6:
UML: traducci d'un diagrama de BD a un diagrama de classes UML. Noms casos
senzills.
BD relacionals: consultes SQL senzilles, Statement i PreparedStatement,
recuperar dades de la BD.
BD no relacionals: guardar i recuperar objectes utilitzant db4o.
_____________________________________________________________________
UF4:
RESUMEN DE CLASES EN JAVA
Clases
public class Persona {
// Atributos
protected String dni;
protected String nombre;
protected String apellido;
protected short edad;
//Constructores
/**
* Constructor por defecto
*/
public Persona(){
}
/**
* Constructor implementado
*/
public Persona(String dni, String nombre, String apellido, short edad){
this.dni= dni;
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
}
/**
* Mtodo
*/
// Retorna: 0 si s'ha pogut canviar l'edat
// 1 : Error per passar una edat negativa
// 2 : Error per passar una edat "enorme"
int setEdat(int novaEdat) {
if (novaEdat<0) return 1;
if (novaEdat>Short.MAX_VALUE) return 2;
edad = (short)novaEdat;
return 0;
}
/**
* Setters y Geters
*/
public void setDni(String dni) {
this.dni = dni;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public void setEdad(short edad) {
this.edad = edad;
}
public String getDni() {
return dni;
}
public String getNombre() {
return nombre;
}
public String getApellido() {
return apellido;
}
public short getEdad() {
return edad;
}
/**
* Implementacin del toString
*/
public String toString (){
StringBuffer st = new StringBuffer();
st.append("\n\tDni: " + this.dni);
st.append("\n\tNombre: " + this.nombre);
st.append("\n\tApellido: " + this.apellido);
st.append("\n\tEdad: " + this.edad);
return ( st.toString() );
}
Interface
public interface Sobornable {
void sobreB(double cantidad);
}
Clase que extiende de otra clase (Persona)
//obtiene las caractersticas propias y hereda las de su padre
public class Empleado extends Persona {
//Atributos
/**
* Salario del empleado
*/
protected double salario;
//Constructores
/**
* Constructor por defecto
*/
public Empleado(){
}
/**
* Constructor con 1 parametro
* @param salario salario del empleado
*/
public Empleado(double salario){
//Inicializa el constructor de la clase extendida
super();
this.salario=salario;
}
/**
* Constructor con 5 parametros
* @param dni dni del empleado
* @param nombre nombre del empleado
* @param apellido nombre del empleado
* @param edad edad del empleado
* @param salario salario del empleado
*/
public Empleado(String dni, String nombre, String apellido, short edad, double salario){
//Inicializa otro constructor de la clase extendida pasando parmetros
super(dni, nombre, apellido, edad);
this.salario=salario;
}
//Metodos publicos
/**
* Suma un plus al salario del empleado si el empleado tiene mas de 40 aos
* @param sueldoPlus
* @return <ul>
*
<li>true: se suma el plus al sueldo</li>
*
<li>false: no se suma el plus al sueldo</li>
*
</ul>
*/
public boolean plus (double sueldoPlus){
boolean aumento=false;
if (super.getEdad()>40 && compruebaNombre()){
salario+=sueldoPlus;
aumento=true;
}
return aumento;
}
//Metodos privados
/**
* Comprueba que el nombre no este vacio
* @return <ul>
*
<li>true: el nombre es una cadena vacia</li>
*
<li>false: el nombre no es una cadena vacia</li>
*
</ul>
*/
private boolean compruebaNombre(){
if(super.getNombre().equals("")){
return false;
}
return true;
}
//Getters y Setters
/**
* Devuelve el salario de un empleado
* @return salario del empleado
*/
public double getSalario() {
return salario;
}
/**
* Actualiza el salario
* @param salario
*/
public void setSalario(double salario) {
this.salario = salario;
}
public String getDatosPersona() {
return (super.toString() );
}
public String toString() {
return( "\n\tSalario: " + this.getSalario() );
}
}
Clase que implementa una interface (Sobornable) y extiende de otra clase (Empleado) la cual a su vez
extiende de otra clase (Persona)
//obtiene las caractersticas propias y hereda las de su padre (Empleado) y las de su
abuelo(Persona)
public class Comercial extends Empleado implements Sobornable{
//Atributos, aunque no indiquemos nada es como si tuviera los atributos del padre
/**
* Comision por venta del comercial
*/
private double comision;
/**
* Comision por corrupcion del comercial
*/
private double sobreB;
/**
* Constructor por defecto
*/
//Inicializa el constructor propio
public Comercial(){
this.comision=0;
}
/**
* Constructor con 5 parametros
* @param dni dni del comercial
* @param nombre nombre del comercial
* @param apellido apellido del comercial
* @param edad edad del comercial
* @param salario salario del comercial
* @param comision comision del comercial
*/
public Comercial(String dni, String nombre, String apellido, short edad, double salario,
double comision) {
//Inicializa otro constructor de la clase extendida pasando parmetros
super(dni, nombre, apellido, edad, salario);
this.comision=comision;
}
// Getters y Setters
public double getComision() {
return comision;
}
public void setSobreB(double sobreB) {
this.sobreB = sobreB;
}
public double getSobreB(){
return this.sobreB;
}
@Override
public void sobreB(double cantidad) {
this.setSobreB(cantidad);
}
}
Clases y tipos genricos en Java
En Java, cuando definimos una nueva clase, debemos conocer el tipo de dato con el que trabajaremos. Si queremos
realizar una operacin especfica dentro de esta nueva clase, sea cual sea el tipo de datos que va a recibir,
podemos hacer uso de los tipos genricos. Este tipo genrico asumir el tipo de dato que realmente le pasaremos a
la clase.
Unos apuntes:
T es el tipo genrico que ser reemplazado por un tipo real.
T es el nombre que damos al parmetro genrico.
Este nombre se sustituir por el tipo real que se le pasar a la clase.
El resultado ser el siguiente:
El tipo de T es java.lang.Integer
El tipo de T es java.lang.String
Hay que tener en cuenta que los genricos de java solo funcionan con objetos. El cdigo siguiente nos mostrar un
error:
ClaseGenerica<int> myOb = new ClaseGenerica<int>(53); // Error, can't use primitive type
Existen una serie de convenciones para nombrar a los genricos:
E - Element (usado bastante por Java Collections Framework)
K - Key (Llave, usado en mapas)
N - Number (para nmeros)
T - Type (Representa un tipo, es decir, una clase)
class ClaseGenerica<T> {
T obj;
public ClaseGenerica(T o) {
obj = o;
}
public void classType() {
System.out.println("El tipo de T es " + obj.getClass().getName());
}
}
public class MainClass {
public static void main(String args[]) {
// Creamos una instancia de ClaseGenerica para Integer.
//El tipo de T es java.lang.Integer
ClaseGenerica<Integer> intObj = new ClaseGenerica<Integer>(88);
intObj.classType();
// Creamos una instancia de ClaseGenerica para String.
//El tipo de T es java.lang.String
ClaseGenerica<String> strObj = new ClaseGenerica<String>("Test");
strObj.classType();
}
}
Ejemplos sobre herencia
Tenemos una clase A
public class A {
protected int d = 10;
public void xxx() { System.out.println ("d en A = " + d); }
public void xxx(int x) {
char aux;
if (this instanceof C)
aux = 'C';
else if (this instanceof B)
aux = 'B';
else
aux = 'A';
System.out.println ("Sc xxx d'A aplicat sobre un objecte de la classe " + aux );
}
}
Una clase B que extiende de A
public class B extends A{
protected int d=20;
public void xxx() {
System.out.println ("d en B = " + d);
super.xxx();
}
}
Y una clase C que extiende de B
public class C extends B{
protected int d = 30;
public void xxx(){
System.out.println ("d en C = " + d);
super.xxx();
}
classes:
tres classes:
classe A
classe B
classe C
_____________________________________________________________________
UF5:
Creacin de un List:
List <Integer> li = new LinkedList<>();
List<String> li = new LinkedList<String>();
Creaccin e inicializacion de un List:
String llenguatges[] = {"Java", "C", "C++", "Visual Basic", "PHP", "Python", "Perl", "C#",
"JavaScript","Delphi"};
List<String> li = Arrays.asList(llenguatges);
List<String> li = new LinkedList<>(Arrays.asList(llenguatges));
List<Integer> li = new ArrayList<Integer>(Arrays.asList(10, 20, 30, 40, 50, 60, 70, 80, 90));
RESUMEN EXCEPCIONES
Captura de una excepcin
try {
System.out.println("Abans d'executar el for");
for (int i=0; i<=t.length; i++)
System.out.println("Posici " + i + " : " + t[i]);
System.out.println("Desprs d'executar el for");
} catch (Exception e) {
System.out.println(e.toString());
System.out.println(e.getLocalizedMessage());
System.out.println("El programador estava a la lluna... S'ha sortir de lmits!!");
}finally{
System.out.println("Sacabao.");
}
--Otra
try {
System.out.println("Entrem en el mtode met01 i anem a executar met02");
met02();
System.out.println("Tornem a estar en met01 desprs de finalitzar met02");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("El programador estava a la lluna... S'ha sortir de lmits!!");
System.out.println(e.getMessage());
e.printStackTrace();
}
Lanzamiento de una Excepcin :
//Metodo con throws para apertura de ficheros
public void metodoconThrows (String nomFitxer) throws FileNotFoundException, IOException{
FileInputStream f = new FileInputStream (nomFitxer);
f.close();
System.out.println ("\n\tEl metodeAmbClausulaThrows ha finalitzat.");
}
--Otra
--Mtode que avalua si la taula t t n celles, provocant, en cas de ser avaluada com a fals, una
excepci d'obligada gesti: Exception */
public void verificaLengthTaula (int n, String t[]) throws Exception {
if (t.length!=n) throw new Exception ("La taula no t la llargada indicada.");
System.out.println ("Sortida de verificaLengthTaula.");
}
--Otra
int valor = 1;
if (valor!=0)
throw new RuntimeException ("\"1>2\" no puede ser cierto");
Creacin de una Excepcin propia:
public class MiExcepcion extends Exception {
private Integer valor;
public MiExcepcion (int xxx) {
valor = new Integer(xxx);
}
public String toString () {
return "Exception MiExcepcion: Error motivat per valor = " + valor.toString();
}
}
y provoco la excepcion
int valor = 1;
if (valor!=0)
throw new MiExcepcion (valor);
System.out.println ("No s'ha provocat l'excepci.");
Lectura de ficheros XML
Recorrer un fichero XML con una lista de productos y contar cuantos hay a la venta
import javax.xml.parsers.*;
import org.w3c.dom.*;
}
Creacion de ficheros XML
import javax.xml.parsers.*;
import org.w3c.dom.*;
//Creacin del documento
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document doc = builder.newDocument();
//Elemento raiz
Element raiz = doc.createElement("ListaProductos");
doc.appendChild(raiz);
//Elemento hijo de la raiz
Element prod = doc.createElement("Producto");
prod.setAttribute("id", "1");
prod.setAttribute("aLaVenta", "true");
//Elementos hijo del anterior
Element hijo = doc.createElement("Nombre");
hijo.setTextContent("Producto 1");
prod.appendChild(hijo);
hijo = doc.createElement("Precio");
hijo.setTextContent("10.0");
prod.appendChild(hijo);
hijo = doc.createElement("Estoc");
hijo.setTextContent("4");
prod.appendChild(hijo);
raiz.appendChild(prod);
Para grabar el documento XML a un fichero, siempre es lo mismo:
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
...
try {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(doc);
File f = new File("nuevoDocumento.xml");
StreamResult result = new StreamResult(f);
transformer.transform(source, result);
} catch (Exception ex) {
System.out.println("Error guardando fichero: " + ex);
}
showMessageDialog
JOptionPane.showMessageDialog(null, "Hola mundo!!!");
showInputDialog
String ax = JOptionPane.showInputDialog("Ingrese un numero: ");
JOptionPane.showMessageDialog(null, "El numero ingresado es: "+ax);
showConfirmDialog
int ax = JOptionPane.showConfirmDialog(null, "Estas en java?");
if(ax == JOptionPane.YES_OPTION)
JOptionPane.showMessageDialog(null, "Has seleccionado SI.");
else if(ax == JOptionPane.NO_OPTION)
JOptionPane.showMessageDialog(null, "Has seleccionado NO.");
showOptionDialog
int seleccion = JOptionPane.showOptionDialog(
unComponentePadre, "Seleccione opcion", "Selector de opciones",
JOptionPane.QUESTION_MESSAGE, null, new Object[] {
"opcion 1", "opcion 2", "opcion 3" }, opcion 1");
JColorChooser
JColorChooser chooser = new JColorChooser();
Color res = chooser.showDialog(frame, "Tria el color", Color.WHITE);
JLabel label = new JLabel("Un text amb fons de colors");
if (null != res) {
label.setBackground(res);
}
JFileChooser
JFileChooser selector = new JFileChooser();
selector.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filtre = new FileNameExtensionFilter(".lin; Fitxers de llista de lineas.",
"lin");
selector.setFileFilter(filtre);
selector.showOpenDialog(frame);
Estructura bsica de una aplicacin Swing.
Una aplicacin Swing se construye mezclando componentes con las siguientes reglas.
Debe existir, al menos, un contenedor de alto nivel (Top-Level Container), que provee el soporte
que las componentes Swing necesitan para el pintado y el manejo de eventos.
Otros componentes colgando del contenedor de alto nivel (stas pueden ser contenedores o
componentes simples).
Ejemplo 1:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class HolaMundoSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("HolaMundoSwing");
final JLabel label = new JLabel("Hola Mundo");
frame.getContentPane().add(label);
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new java.awt.event.WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
frame.pack();
frame.setVisible(true);
}
}
import
import
import
import
java.awt.*;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
javax.swing.*;
Tipo de listener
ActionListener
WindowListener
MouseListener
MouseMotionListener
ComponentListener
FocusListener
ListSelectionListener
Crear un APPLET:
//Per incloure un applet dins una pgina web cal usar letiqueta o tag HTML:
<HTML>
<HEAD>
<TITLE>
Mi Primer Applet
</TITLE>
</HEAD>
<BODY>
<APPLET
CODEBASE = "."
CODE
= "applet.class"
NAME
= "TestApplet"
WIDTH
= 400
HEIGHT
= 300
HSPACE
= 0
VSPACE
= 0
ALIGN
= middle
>
</APPLET>
</BODY>
</HTML>
//La clase tiene que extender de Applet
import java.applet.*;
public class Applet1 extends Applet {
public void init(){
setBackgroung(Color.white);
}
public void paint(Graphics g){
g.drawString("Primer applet", 10, 10);
}
}
out.close();
in.close();
} catch (IOException) {
System.out.println("Error en entrada/salida del fichero")
}
}
Escritura y lectura de tipos primitivos
DataOutputStream dos = new DataOutputStream(new FileOutputStream(ruta));
dos.writeInt(enter);
dos.writeBoolean(boolea1);
dos.writeBoolean(boolea2);
dos.writeDouble(doble);
dos.close();
DataInputStream dis = new DataInputStream(new FileInputStream(ruta));
double d = dis.readDouble();
boolean b1 = dis.readBoolean();
boolean b2 = dis.readBoolean();
int i = dis.readInt();
dis.close();
Retrocediendo en la lectura de un flujo
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(ruta));
byte[] dades = new int[100];
bis.mark(500); //Marca. El buffer ser de 500 bytes
bis.read(dades); //Llegim els bytes 0-99 del fitxer
bis.read(dades); //Llegim els bytes 100-199 del fitxer
bis.reset(); //Tornem a la marca
bis.read(dades); //Llegim els bytes 0-99 del fitxer
bis.read(dades); //Llegim els bytes 100-199 del fitxer
bis.read(dades); //Llegim els bytes 200-299 del fitxer
bis.read(dades); //Llegim els bytes 300-399 del fitxer
bis.read(dades); //Llegim els bytes 400-499 del fitxer
bis.read(dades); //La marca es perd. Ja no es pot fer reset()
...
bis.close();
Compressi i descompressi de dades
try {
GZIPInputStream gis = new GZIPInputStream(new FileInputStream(ruta));
OutputStream out = new FileOutputStream(outFilename);
byte[] datos = new byte[1024];
int leidos = 0;
while (-1 != (leidos = in.read(datos)))
out.write(datos,0,leidos);
gis.close();
out.close();
} catch (IOException) {
}
De InputStream a Reader
Pasar de flujo orientado a datos a fichero de texto, siempre que se sepa a priori que el fichero
contiene texto.
FileInputStream fis = new FileInputStream (ruta);
FileOutputStream fos = new FileOutputStream (novaRuta);
public void copiaTexto(InputStream in, OutputStream out) {
try {
Reader rd = new InputStreamReader(in);
Writer wr = new OutputStreamWriter(out);
char[] datos = new char[100];
int leidos = 0;
while (-1 != (leidos = rd.read(datos)))
wr.write(datos,0,leidos);
wr.close();
rd.close();
} catch (IOException) {
}
}
Leer linea a linea un fichero de texto
BufferedReader br = new BufferedReader (new FileReader(ruta));
String linea = null;
//Se muestra todo el contenido per pantalla
while (null != (linea = br.readLine()))
System.out.println(linea);
br.close();
Abrir fichero con filtro del tipo de fichero, con java swing:
//Importamos las librerias necerarias
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.*;
private static String abrirLeerArchivo() {
String aux="";
String texto="";
FileReader archivo;
BufferedReader lee=null;
try{
/**llamamos el metodo que permite cargar JFileChooser*/
JFileChooser file=new JFileChooser();
//Determinamos el tipo de fichero que queremos abrir
FileNameExtensionFilter filter = new FileNameExtensionFilter("fitxer .txt", "txt");
//asignamos el filtro a la ventana
file.setFileFilter(filter);
//Ponemos como directorio por defecto el mismo del proyecto
file.setCurrentDirectory(new File("."));
// abrimos la ventana de JFilechooser
file.showOpenDialog(file);
/**abrimos el archivo seleccionado*/
File abre=file.getSelectedFile();
//asignamos al FileReader el archivo abierto
archivo=new FileReader(abre);
//cargamos en el BufferedReader el archivo a leer
lee=new BufferedReader(archivo);
/**recorremos el archivo, lo leemos para plasmarlo
*en la consola*/
while((aux=lee.readLine())!=null){
texto+= aux+ "\n";
}
//lanzamos una excepcion si el fichero no se encuentra
} catch (FileNotFoundException e) {
throw new RuntimeException("Error, El fichero no existe");
//lanzamos una excepcion si el fichero no se puede leer
} catch (IOException e) {
throw new RuntimeException("Error, No se puede leer el fichero");
// lanzamos una excepcion si el error no es ninguno de los anteriores
} catch (Exception e) {
throw new RuntimeException("Error, desconocido");
} finally {
// Cerramos el fichero
// En el finally cerramos el fichero, para asegurar que se cierra
// tanto si todo va bin como si salta una excepcin.
try{
// si el BufferedReader no es nulo
if( null != lee ){
// cerramos el fichero
lee.close();
}
// capturamos una posible excepcion al cerrar el fichero
_____________________________________________________________________
UF6
:
RESUMEN DE STATEMENT UTILITZANT DB4O
/**
* Connexi a la base de dades. Ha de valer null quan no hi hagi cap connexi
* establerta.
*/
private Connection conn;
/**
* Consulta SQL.
*/
private static String consultaSQL = "" +
"SELECT * \n" +
"FROM TABLA1 T1 \n" +
" JOIN TABLA2 T2 ON ( T1.ID = T2.ID ) \n" +
"WHERE COSA = ? \n" +
"ORDER_BY COSA";
/**
* Sentncia SQL que insereix una cosa a la BD.
*/
private static String consultainsereixSQL = "" +
"INSERT INTO TABLA1 " +
"( ID ) " +
"VALUES ( ? )";
/*
* Sentncies preparades corresponents a les anteriors consultes SQL
*/
private PreparedStatement consultaSt;
private PreparedStatement ConsultaInsereixSt;
/**
* Constructor. Carrega el driver per accedir a la BD. Obre la connexi
* amb la BD.
*
* @throws JocsDeTaulaException
si no s'ha pogut carregar el driver o establir la connexi.
*/
public AccesBD() throws JocsDeTaulaException {
try {
Class.forName("org.apache.derby.jdbc.ClientDriver");
estableixConnexio();
} catch (ClassNotFoundException ex) {
throw new JocsDeTaulaException(ex.getMessage(), ex);
} catch (SQLException ex) {
throw new JocsDeTaulaException(ex.getMessage(), ex);
}
}
/**
* Estableix la connexi amb la base de dades. Crea les sentncies preparades.
*
* @throws SQLException Si es produeix una excepci a l'establir la connexi (en
* aquest cas, posa la referncia a la connexi a null).
*/
private void estableixConnexio() throws SQLException {
String urlBaseDades = "jdbc:derby://localhost:1527/eac11";
String usuari = "root";
String contrasenya = "root123";
try {
conn = DriverManager.getConnection(urlBaseDades , usuari, contrasenya);
consultaSt = conn.prepareStatement(consultaSQL);
ConsultaInsereixSt = conn.prepareStatement(consultainsereixSQL,
Statement.RETURN_GENERATED_KEYS);
} catch (SQLException e) {
conn = null;
throw e;
}
}
/**
* Tanca la connexi i posa la referncia a la connexi a null.
*
* @throws SQLException
*/
public void tancaConnexio() throws SQLException {
if (conn != null) {
try {
conn.close();
} finally {
conn = null;
}
}
}
/**
* Obt les dades d'una cosa donat part de una cosa
*
*/
public void consultaCosa1(String cosa) {
try {
consultaSt.setString(1, "%"+cosa+"%");
ResultSet rs = consultaSt.executeQuery();
// Agafem tots els resultats
while (rs.next()) {
System.out.println(rs.getInt("cosa1")
, rs.getString("cosa2")
, rs.getInt("cosa3")
, rs.getInt("conaN"));
}
} catch (SQLException ex) {
System.err.println(ex.getMessage());
}
}
/**
* Obt una dada d'una cosa donat part de una cosa
*
*/
public void consultaCosa2(String cosa) {
try {
consultaSt.setString(1, "%"+cosa+"%");
ResultSet rs = consultaSt.executeQuery();
// Agafem sempre el primer resultat
rs.next(); // sempre t un nic resultat de la consulta
System.out.println(rs.getInt("cosa1")
, rs.getString("cosa2")
, rs.getInt("cosa3")
, rs.getInt("cosaN"));
}
} catch (SQLException ex) {
System.err.println(ex.getMessage());
}
}
/**
* Pinta una llista amb totes les coses donat part de una cosa
*
* Noteu que aquest s un mtode molt ineficient: es recupera la BD sencera i
* molts registres es recuperen diversos cops
*
*/
public void consultaCosa3() {
String cosa;
List<String> coses = new ArrayList<String>();
try {
consultaSt.setString(1, "%"+cosa+"%");
ResultSet rs = consultaSt.executeQuery();
// Agafem tots els resultats
while (rsPartides.next()) {
coses.add(rs.getString("cosa2"));
}
} catch (SQLException ex) {
System.err.println(ex.getMessage());
}
System.out.println( coses );
}
/**
* Insereix una nova partida a la BD.
*
* @param partida La Partida a inserir.
* @throws JocsDeTaulaException si la partida no s'ha pogut guardar a la BD.
*/
public void guardaCosa() throws JocsDeTaulaException {
try {
ConsultaInsereixSt.setInt(1, partida.getJoc().getId());
ConsultaInsereixSt.executeUpdate();
// inserim la partida i recuperem la clau id que se li ha generat.
ResultSet rsGeneratedKeys = ConsultaInsereixSt.getGeneratedKeys();
rsGeneratedKeys.next(); // Noms t un resultat
int id = rsGeneratedKeys.getInt(1);
System.out.println ("La id de la insercion es " + id)
} catch (SQLException ex) {
throw new JocsDeTaulaException(ex.getMessage(), ex);
}
}