11package ru .javawebinar .basejava .storage ;
22
33import ru .javawebinar .basejava .exception .NotExistStorageException ;
4- import ru .javawebinar .basejava .exception .StorageException ;
54import ru .javawebinar .basejava .model .Resume ;
6- import ru .javawebinar .basejava .sql .ConnectionFactory ;
5+ import ru .javawebinar .basejava .sql .SqlHelper ;
76
8- import java .sql .*;
7+ import java .sql .DriverManager ;
8+ import java .sql .ResultSet ;
9+ import java .util .ArrayList ;
910import java .util .List ;
1011
1112public class SqlStorage implements Storage {
12- public final ConnectionFactory connectionFactory ;
13+ public final SqlHelper sqlHelper ;
1314
1415 public SqlStorage (String dbUrl , String dbUser , String dbPassword ) {
15- connectionFactory = ( ) -> DriverManager .getConnection (dbUrl , dbUser , dbPassword );
16+ sqlHelper = new SqlHelper (( ) -> DriverManager .getConnection (dbUrl , dbUser , dbPassword ) );
1617 }
1718
1819 @ Override
1920 public void clear () {
20- try (Connection conn = connectionFactory .getConnection ();
21- PreparedStatement ps = conn .prepareStatement ("DELETE FROM resume" )) {
22- ps .execute ();
23- } catch (SQLException e ) {
24- throw new StorageException (e );
25- }
21+ sqlHelper .execute ("DELETE FROM resume" );
2622 }
2723
2824 @ Override
2925 public Resume get (String uuid ) {
30- try (Connection conn = connectionFactory .getConnection ();
31- PreparedStatement ps = conn .prepareStatement ("SELECT * FROM resume r WHERE r.uuid =?" )) {
26+ return sqlHelper .execute ("SELECT * FROM resume r WHERE r.uuid =?" , ps -> {
3227 ps .setString (1 , uuid );
3328 ResultSet rs = ps .executeQuery ();
3429 if (!rs .next ()) {
3530 throw new NotExistStorageException (uuid );
3631 }
3732 return new Resume (uuid , rs .getString ("full_name" ));
38- } catch (SQLException e ) {
39- throw new StorageException (e );
40- }
33+ });
4134 }
4235
4336 @ Override
4437 public void update (Resume r ) {
45-
38+ sqlHelper .execute ("UPDATE resume SET full_name = ? WHERE uuid = ?" , ps -> {
39+ ps .setString (1 , r .getFullName ());
40+ ps .setString (2 , r .getUuid ());
41+ if (ps .executeUpdate () == 0 ) {
42+ throw new NotExistStorageException (r .getUuid ());
43+ }
44+ return null ;
45+ });
4646 }
4747
4848 @ Override
4949 public void save (Resume r ) {
50- try (Connection conn = connectionFactory .getConnection ();
51- PreparedStatement ps = conn .prepareStatement ("INSERT INTO resume (uuid, full_name) VALUES (?,?)" )) {
50+ sqlHelper .<Void >execute ("INSERT INTO resume (uuid, full_name) VALUES (?,?)" , ps -> {
5251 ps .setString (1 , r .getUuid ());
5352 ps .setString (2 , r .getFullName ());
5453 ps .execute ();
55- } catch (SQLException e ) {
56- throw new StorageException (e );
57- }
58-
54+ return null ;
55+ });
5956 }
6057
6158 @ Override
6259 public void delete (String uuid ) {
63-
60+ sqlHelper .execute ("DELETE FROM resume WHERE uuid=?" , ps -> {
61+ ps .setString (1 , uuid );
62+ if (ps .executeUpdate () == 0 ) {
63+ throw new NotExistStorageException (uuid );
64+ }
65+ return null ;
66+ });
6467 }
6568
6669 @ Override
6770 public List <Resume > getAllSorted () {
68- return null ;
71+ return sqlHelper .execute ("SELECT * FROM resume r ORDER BY full_name,uuid" , ps -> {
72+ ResultSet rs = ps .executeQuery ();
73+ List <Resume > resumes = new ArrayList <>();
74+ while (rs .next ()) {
75+ resumes .add (new Resume (rs .getString ("uuid" ), rs .getString ("full_name" )));
76+ }
77+ return resumes ;
78+ });
6979 }
7080
7181 @ Override
7282 public int size () {
73- return 0 ;
83+ return sqlHelper .execute ("SELECT count(*) FROM resume" , st -> {
84+ ResultSet rs = st .executeQuery ();
85+ return rs .next () ? rs .getInt (1 ) : 0 ;
86+ });
7487 }
75- }
88+ }
0 commit comments