Inhoudsopgave
Java Als veelzijdige taal stelt het ons, naast de verschillende functionaliteiten die we kunnen realiseren, ook in staat om te werken met de persistentie van data, hiervoor kunnen we verbinding maken met de verschillende motoren van Databases die er op de markt zijn.EEN Database Het kan zoiets eenvoudigs zijn als een sleutelwaardesysteem in een gewoon tekstbestand, maar ook complexere en modernere oplossingen zoals niet-relationele oplossingen, waardoor het ontwikkelen van verschillende verbindingsschema's een verplichte functie is.
JDBC zijn een reeks klassen die toestaan Java verbindingen tot stand te brengen met database-engines, dit stelt ons in staat om de resultaten van de zoekopdrachten te verkrijgen in een object met de naam ResultaatSet.
Aangezien elke motor anders is, is het waarschijnlijk dat de ResultaatSet die we ontvangen is er specifiek voor, daarom is het niet handig voor ons om onze applicatie rond dat object te structureren.
Om dit probleem op te lossen kunnen we gebruik maken van wat a . wordt genoemd toegang tot object, waarmee we de verschillende vormen van onze ResultaatSet waardoor uw applicatie binnen ons programma eenvoudiger te implementeren is en de ontwikkelaar dus minder problemen heeft.
Het DAO-ontwerppatroonDe Gegevenstoegangsobject of DAO Het is een ontwerppatroon dat verzamelt wat we in het vorige punt hadden uitgelegd, dit vereist dat we een toegangsklasse maken voor de eigenschappen van onze Database. Om dit te laten werken, moeten we het hele werk maken JDBC en de controller waarmee we verbinding kunnen maken met de specifieke engine die we willen, bovendien moeten we de logische implementatie uitvoeren die we uitleggen om afhankelijkheid van specifieke componenten te voorkomen die het ons alleen maar moeilijk zouden maken om naar een andere database-engine te migreren.
Het eerste wat we moeten doen om een verbinding op te bouwen JDBC is om te identificeren met welke engine we de verbinding willen maken en vervolgens de benodigde klassen voor die verbinding te krijgen, in dit geval gaan we een verbinding maken MySQL, deze engine is licht, gratis en multiplatform, dus we kunnen hem zowel in Windows, Linux of Mac.
Connector / J is de reeks lessen die worden aangeboden door het ontwikkelteam van MySQL, met hen kunnen we maken JDBC werk hier mee samen Databases relationeel, om het in ons project op te nemen, moeten we de volgende stappen volgen.
1- We moeten het bestand downloaden dat overeenkomt met ons platform, ofwel ramen of voor anderen van de officiële website van MySQL Op de volgende link.
VERGROTEN
3- Nu gaan we testen of alles correct werkt op onze computer, hiervoor zullen we een kleine code maken waar we zullen zien of connector / J is succesvol in ons systeem geladen, hiervoor gebruiken we de volgende code:
public class ConnectionTest {public static void main (String [] args) {try {Class c = Class.forName ("com.mysql.jdbc.Driver"); System.out.println ("Geladen klasse:" + c.getName ()); } catch (ClassNotFoundException ex) {System.err.println (ex); }}}
4- Om dit voorbeeld uit te voeren, moeten we de afhankelijkheid opnemen, het wordt aanbevolen dat we de .kan in hetzelfde pad van ons bestand TestConexion.java. Met dit gedekt gaan we verder met het compileren van ons bestand, we openen een console en met de instructie javac en het toevoegen van de .kan naar de klassenpad tijdens runtime met het commando -cp We kunnen het, laten we de opdrachtregel eens bekijken:
javac -cp mysql-connector-java-5.1.34-bin.jar ConnectionTest.java
5- Ten slotte, om ons bestand uit te voeren, hoeven we alleen de volgende instructie uit te voeren:
java -cp mysql-connector-java-5.1.34-bin.jar TestConnection
Als we een resultaat hebben zoals het volgende in onze console, kunnen we beginnen met bewerkingen om Databases:
VERGROTEN
MAAK TABEL INDIEN NIET BESTAAT `gebruikers` (
`id` bigint (20) NIET NULL AUTO_INCREMENT,
`naam` varchar (255) NIET NULL,
`datum` datum NIET NULL,
`state` int (11) NIET NULL,
PRIMAIRE SLEUTEL (`id`)
) MOTOR = InnoDB STANDAARD CHARSET = latin1 AUTO_INCREMENT = 3;
INSERT INTO `users` (` id`, `name`,` date`, `status`) WAARDEN
(1, 'Gebruiker 1', '2015-01-01', 1),
(2, 'Gebruiker 2', '2015-01-01', 1);
Nu in de volgende code van Java we gaan ons richten op het leggen van de verbinding met de Database, hiervoor met een probeer vangblok We zullen valideren dat het effectief en zonder fouten is, en als de verbinding tot stand is gebracht, zullen we een succesbericht afdrukken, laten we eens kijken:
import java.sql.Verbinding; java.sql.DriverManager importeren; public class ConnectionTest {private static final String path = "jdbc: mysql: // localhost"; private static final String gebruiker = "onze gebruiker"; private static final String wachtwoord = "ons wachtwoord"; public static void main (String [] args) {probeer {Connection con = DriverManager.getConnection (pad, gebruiker, wachtwoord); System.out.println ("Verbinding succesvol"); } catch (uitzondering e) {e.printStackTrace (); }}}
Uit deze code kunnen we zien dat we twee bibliotheken uit het pakket moeten importeren java.sql, een is Verbinding die verantwoordelijk is voor het beheer van alle activiteiten om te kunnen communiceren met de database en de andere is Apparaat beheerder die verantwoordelijk is voor de manier waarop we ermee communiceren. Als we de stappen correct hebben gevolgd, zouden we het volgende bericht moeten zien wanneer we ons voorbeeld in de console uitvoeren:
VERGROTEN
import java.sql.Verbinding; java.sql.DriverManager importeren; import java.sql.ResultSet; import java.sql.Statement; public class ConnectionTest {private static final String path = "jdbc: mysql: // localhost / test"; private static final String gebruiker = "onze gebruiker"; private static final String wachtwoord = "ons wachtwoord"; public static void main (String [] args) {probeer {Connection con = DriverManager.getConnection (pad, gebruiker, wachtwoord); Statement query = con.createStatement (); System.out.println ("Verbinding succesvol"); ResultSet result = query.executeQuery ("SELECT * FROM gebruikers"); while (result.next ()) {String name = resultaat.getString ("naam"); String datum = resultaat.getString ("datum"); System.out.println ("Naam:" + naam + "Recorddatum:" + datum); } resultaat.sluiten (); vraag.sluiten (); con.sluiten (); } catch (uitzondering e) {e.printStackTrace (); }}}
Het is belangrijk om te vermelden dat in ons attribuut route We hebben het aangepast en de naam van de Database telefoongesprek toets waar we onze gebruikerstabel moeten laten maken, ons bestand moeten compileren en uitvoeren, zou het resultaat per console zijn zoals te zien is in de volgende afbeelding:
VERGROTEN
VoordeelDit heeft verschillende voordelen, we zeiden al dat de eerste is om iets te kunnen gebruiken zonder het te herhalen, maar het is ook voor de veiligheid, omdat dit ons in staat stelt om de waarden te behandelen die mogelijk afkomstig zijn van gebruikersinvoer om een aanval op ons te voorkomen Database kunnen we daarnaast ook de leesbaarheid van ons programma vergemakkelijken.
In het volgende voorbeeld gaan we een query maken met: Voorbereide verklaring, zodat het meerdere keren tijdens ons programma kan worden gebruikt. Laten we de resulterende code bekijken:
import java.sql.Verbinding; java.sql.DriverManager importeren; import java.sql.ResultSet; import java.sql.PreparedStatement; public class PreparedStatementTest {private static final String path = "jdbc: mysql: // localhost / test"; private static final String gebruiker = "onze gebruiker"; private static final String wachtwoord = "ons wachtwoord"; public static void main (String [] args) {probeer {Connection con = DriverManager.getConnection (pad, gebruiker, wachtwoord); PreparedStatement query = con.prepareStatement ("SELECT * FROM gebruikers Where id =?;"); System.out.println ("Verbinding succesvol"); query.setInt (1, 1); ResultSet resultaat = query.executeQuery (); while (result.next ()) {String name = resultaat.getString ("naam"); String datum = resultaat.getString ("datum"); System.out.println ("Naam:" + naam + "Recorddatum:" + datum); } resultaat.sluiten (); vraag.sluiten (); con.sluiten (); } catch (uitzondering e) {e.printStackTrace (); }}}
We merken dat met behulp van de methode setInt Met het query-object kunnen we de benodigde parameter voor de query doorgeven, hiermee kunnen we deze loskoppelen van de uitvoering van de query, waardoor draagbaarheid en leesbaarheid wordt verkregen. Om te eindigen, compileren en voeren we ons programma uit:
VERGROTEN