Databases Flashcards
Hoe is een url voor een database in java opgebouwd?
- de url begint altijd met jdbc.
- daarna het type database. kan mysql, postgres, mongodb etc zijn.
- en daarna het adres van de database
dus bijvoorbeeld:
jdbc:mysql://localhost:3306/mydatabase
Hoe stellen we een connectie met een database op?
Met de DriverManager.getConnection method aan te trappen en toe te wijzen aan een Connection object. Dit vraagt om een url, user en pass. Bijv:
String url = "jdbc:mysql://localhost:3306/mydatabase"; Connection conn = Drivermanager.getConnection( url, "username", "myPass" );
Hoe close ik een connection met een database?
1) Connection in een try with resources blok zetten (is auto closeable)
2) mijnConnection.close();
Wat is in databases het verschil tussen PreparedStatement en CallableStatement?
PreparedStatement voert een query uit, terwijl CallableStatement een stored procedure aantrapt
Wat zijn de stappen om data uit te lezen uit een database?
1) Maak een Connection object (idealiter in een try-with-resources blok)
2) Maak een PreparedStatement waarin je een query uitvoert.
3) Maak een ResultSet dmv statement.executeQuery();
4) itereer over de resultset met een while loop.
String url = "jdbc:mysql://localhost:3306/mydatabase"; try (Connection conn = DriverManager.getConnection(url, "user", "pass") { String sql = "select name from users" PreparedStatement statement = conn.prepareStatement(sql); Resultset rs = statement.excecuteQuery(); while (rs.next()) { // print row uit } }
Stel, we hebben deze code:
String url = "jdbc:mysql://localhost:3306/mydatabase"; try (Connection conn = DriverManager.getConnection(url, "user", "pass") { String sql = "insert into users values (12, 'Mart')"; PreparedStatement statement = conn.prepareStatement(sql); // jouw code hier }
Wat moet ik doen om de insert uit te voeren?
excecuteUpdate gebruiken:
int result = statement.excecuteUpdate(); while (result > 0) { System.out.println("Rows toegevoegd") }
dit gebruiken we ook ook onder update en delete.
Stel, we hebben een PreparedStatement
~~~
PreparedStatement statement = conn.prepareStatement(sql);
~~~
we kunnen op statement een paar methods aantrappen om het statement uit te voeren. Onder andere executeQuery, executeUpdate en execute.
Wanneer gebruiken we voor databases excecuteQuery en wanneer executeUpdate? En wat doet .execute();?
excecuteQuery voor het uitlezen (R) van data. excecuteUpdate voor het wegschrijven(C, U, D) van data. .excecute() wordt gebruikt voor meerdere statements waarbij we niet weten of dit om een read, write, of delete gaat.
execute returnt een boolean
execureQuery returnt een ResultSet
executeUpdate returnt een int (het aantal aangepaste rows)
Hoe kunnen we in een PreparedStatement parameters van de url meegeven?
String sql = "insert into users (name, age) values (?, ?)"; PreparedStatement statement = conn.prepareStatement(sql); statement.setString(1, "Mart"); statement.setInt(2, 38);
Denk eraan dat dit one based en niet zero index based is!
Stel, we hebben deze code:
String sql = "insert into users (name, age) values (?, ?)"; PreparedStatement statement = conn.prepareStatement(sql); statement.setString(1, "Mart"); statement.setInt(2, 38); statement.executeUpdate(); statement.setString(1, "Henk"); statement.executeUpdate();
wat is de inhoud van de 2 rows?
row 1 heeft als inhoud:{ name: "Mart", age: 38 }
row 2 heeft als inhoud:{ name: "Henk", age: 38 }
Er wordt met hetzelfde object gewerkt, en tenzij we de value overschrijven is de age van 38 nog in tact voor de volgende row.
Stel, we hebben deze code:
String sql = "insert into users (name, age) values (?, ?)"; PreparedStatement statement = conn.prepareStatement(sql); statement.setString(1, "Mart"); statement.executeUpdate();
wat is de inhoud van de row?
Niets. We missen een parameter en dit zal een SQLException geven.
Stel, we hebben deze code:
String sql = "insert into users (name) values (?)"; PreparedStatement statement = conn.prepareStatement(sql); statement.setString(1, "Mart"); statement.setString(2, 38); statement.executeUpdate();
wat is de inhoud van de row?
Niets. We geven een parameter te veel op en krijgen dus een SQLException