JAVA – JSP Bazy Danych MySQL, JDBC, Select, Insert, Update,Delete 181 JDBC • • • • • • Narzędzia Połączenie z bazą danych Select Insert Update Delete 182 Narzędzia • XAMP => MySql + PhpAdmin – http://www.apachefriends.org/en/xampp.html – http://www.apachefriends.org/en/xamppwindows.html#641 183 MySql JDBC Driver • http://www.mysql.com/products/connector/ • http://dev.mysql.com/downloads/connector/j 184 Dodanie biblioteki do projektu 185 Ustawienie classpath dla serwera 186 Import class import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.PreparedStatement; import java.sql.Statement; import java.util.ArrayList; import java.util.List; 187 Obiekty do obsługi operacji JDBC private java.sql.Connection connect = null; private Statement statement = null; private PreparedStatement preparedStatement = null; private ResultSet resultSet = null; 188 Połączenie z bazą danych protected void LoadDataBase() { Baza danych użytkownik try { Class.forName("com.mysql.jdbc.Driver"); connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_test", "root",""); hasło statement = connect.createStatement(); // resultSet zawiera wynik zapytania0 SQL resultSet = statement .executeQuery("select * from java_test.osoba_test "); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } Brak klasy sterownika Błąd w zapytaniu } 189 Pobranie listy osób public List<Osoba> GetOsobyFromJDBCDataBase(){ LoadDataBase(); List<Osoba> result = new ArrayList<Osoba>(); try { while (resultSet.next()) { String id = resultSet.getString("id"); // można podawać nr kolumny String imie = resultSet.getString("imie"); String nazwisko = resultSet.getString("nazwisko"); result.add(new Osoba(Integer.parseInt(id), imie, nazwisko) ); } } catch (SQLException e) { e.printStackTrace(); } return result; } 190 Pobranie rekordu i umieszczenie w obiekcie (PreparedStatement) public Osoba GetOsoba(int id){ Osoba result = new Osoba(); try { Class.forName("com.mysql.jdbc.Driver"); connect = DriverManager .getConnection("jdbc:mysql://localhost:3306/java_test" , "root",""); preparedStatement = connect .prepareStatement("select * from java_test.osoba_test where id = ?"); Zapytanie preparedStatement.setInt(1, id); resultSet = preparedStatement.executeQuery(); resultSet.next(); result.setId( resultSet.getInt("id") ); result.setImie(resultSet.getString("imie")); result.setNazwisko(resultSet.getString("nazwisko")); } catch (…..) { ….} return result; } Ustawienie parametrów zapytania Wykonanie operacji Wpisanie do obiektu 191 Insert public void InsertOsoba(String imie, String nazwisko){ Zapytanie try { preparedStatement = connect .prepareStatement("insert into java_test.osoba_test (id, imie, nazwisko) values (default, ?, ?)"); preparedStatement.setString(1, imie); preparedStatement.setString(2, nazwisko); //preparedStatement.setDate(4, new java.sql.Date(2009, 12, 11)); // preparedStatement.setInt ( …); Ustawienie parametrów zapytania Inn typy obiektów jako parametry zapytania preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } Wykonanie operacji 192 } Insert - Servelet protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Osoby o = new Osoby(); o.LoadDataBase(); String imie = request.getParameter("Imie"); String nazwisko= request.getParameter("Nazwisko"); o.InsertOsoba(imie, nazwisko); } 193 Edycja - update public void UpdateOsoba(int id, String imie, String nazwisko){ try { preparedStatement = connect .prepareStatement("UPDATE java_test.osoba_test SET imie = ?, nazwisko= ? WHERE id= ?"); preparedStatement.setString(1, imie); preparedStatement.setString(2, nazwisko); preparedStatement.setInt(3, id); preparedStatement.executeUpdate(); } catch (SQLException e) { } } 194 Edycja – strona JSP <% pf.fdwp.Osoba osobaInp; pf.fdwp.Osoby ososby= new pf.fdwp.Osoby(); pf.fdwp.Osoba o= ososby.GetOsoba(Integer.parseInt( request.getParameter("id") )); Wyciągniecie danych osobaInp = o; na podstawie danych %> przesłanych w requescie <form action="EditOsoba" method="post"> Id: <input name="Id" type="text" value='<%= osobaInp.getId() %>' /> Imie: <input name="Imie" type="text" value='<%= osobaInp.getImie() %>'/> Nazwisko: <input name="Nazwisko" type="text" value='<%= osobaInp.getNazwisko() %>'/> Wypełnienie formularza <button type="submit" >Apply</button> </form> 195 Przejście do formularza z edycją <table border="2"> <thead> <tr><td> Id</td><td> Imie </td><td> Nazwisko</td></tr></thead> <tbody> <% for(Osoba o: osoby.GetOsobyFromJDBCDataBase()) { %> <tr> <td><%= o.getId() %> </td> <td><%=o.getImie() %> </td> <td><%= o.getNazwisko() %> </td> <td> <a href="OsobaEdit.jsp?id=<%= o.getId() %>"> Edit</a> </td> </tr> <% } %> </tbody> </table> Generowanie linka do formularza z edycją 196 Kasowanie - Delete public void DeleteOsoba(int id){ try { preparedStatement = connect .prepareStatement("delete from java_test.osoba_test where id= ? ; "); preparedStatement.setInt(1, id); preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } 197