Línia de CódigoAprende a Programar

Programació en Java

Tenim diverses maneres de fer un insert contra una base de dades mitjançant JDBC. Però la més senzilla de totes és executar una sentència INSERT de SQL.

És per això que el primer que veurem és l’estructura d’aquesta sentència:

INSERT INTO tabla (campo1, campo2,... campoN) VALUES (valor1, valor2,... valorN)

On camp (s) són els noms de les columnes de la taula en els quals volem inserir valors. Si volem omplir totes les dades de les columnes no cal a posar aquests camps. Els valors seran, en rigorós ordre, els que corresponguin amb les columnes de les taula.

En l’exemple utilitzarem la taula de llibres. La qual passem a detallar una mica més:

LIBROS isbn: char(13) idAutor: int(10) categoría: varchar(45) titulo: varchar(50) descripción: text

Vegem els passos que caldria donar per executar el INSERT mitjançant una connexió JDBC.

El primer és realitzar la connexió sobre la base de dades. Per això necessitem conèixer la URL i els drivers de la base de dades. En el nostre cas, que ens recolzem en MySQL, seria alguna cosa com el que segueix:

// Definimos el driver y la urlString sDriver = "com.mysql.jdbc.Driver";String sURL = "jdbc:mysql://localhost:3306/lineadecodigo";

Amb els drivers i la URL simplement haurem d’obtenir la connexió (classe connection) mitjançant usuari i password.

Connection con = null;Class.forName(sDriver).newInstance(); con = DriverManager.getConnection(sURL,"root","password");

Un cop obtinguda la connexió, passarem a preparar la sentència INSERT mitjançant un PreparedStatement

stmt = con.prepareStatement("INSERT INTO libros VALUES (?,?,?,?,?)");

Una cosa molt important és que a l’muntar la sentència INSERT no definim els valors de la sentència. En el seu lloc posem interrogacions (?) Que seran substituïdes posteriorment per valors.

Això es fa perquè la sentència INSERT pugui ser reutilitzada amb diferents valors i ser escorcollada pels diferents punts (memòria cau de connexió dels drivers , memòria cau de la base de dades, …).

Per omplir els valors simplement ens podem valer dels mètodes setXXX sobre el PreparedStatement. El valor de XXX dependrà de l’tipus de dada que manegem: setString, setDate, setInt, …

Vegem com ho assignaríem en el nostre exemple:

String sISBN = "84-9815-212-7";String sTitulo = "Yo, Claudio";String sDescripcion= "Supuesta autobiografía de Claudio...";String sCategoria = "novela histórica";int idAutor = 3; stmt.setString(1,sISBN);stmt.setInt(2,idAutor);stmt.setString(3,sTitulo);stmt.setString(4,sDescripcion);stmt.setString(5,sCategoria);

Ja només ens quedarà executar la sentència. Quan la sentència a executar no retorna un conjunt de resultats no haurem d’usar executeQuery (), sinó que deurem utilitzar executeUpdate (). Això és aplicable a INSERT, UPDATE i DELETE.

stmt.executeUpdate();

El valor retornat per aquesta sentència és 1 per a sentències INSERT, UPDATE i DELETE i 0 per sentències SQL que no tornen res.

a la fin del nostre programa no se’ns pot oblidar en tancar les connexions de la base de dades 😉

Però, què passa si el valor a inserir (en la seva clau) ja existeix a la base de dades? Doncs que ens saltarà una sentència SQLException. En aquesta excepció podem recuperar el SQLSTATE i el SQLErrorCode, els quals donaran informació de l’error.

33 Compartir

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *