package ca.uqam.projet.service; import ca.uqam.projet.repositories.BixiList; import ca.uqam.projet.resources.Bixi; import static ca.uqam.projet.service.BD.connect; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class BDBixi extends BD { private static final String INSERT_BIXI = "INSERT INTO bixi(id, name, geog, ouvert, veloDisponible, emplacementDisponible)" + "VALUES (?,?,ST_GeographyFromText('POINT(' || ? || ' ' || ? || ')'),?,?,?)" + "ON CONFLICT(id)" + "DO UPDATE SET velodisponible = EXCLUDED.velodisponible, " + "emplacementdisponible = EXCLUDED.emplacementdisponible"; private static final String SELECT_PROCHE = "SELECT *,ST_X(geog::geometry) AS longitude, ST_Y(geog::geometry) AS latitude " + "FROM bixi where ST_Distance( geog, ST_GeographyFromText('POINT(' || ? || ' ' || ? || ')')) <= 200 ;"; public static void insertAll(BixiList bixiList) { Connection conn = connect(); for (Bixi bixi : bixiList.getBixiList()) { insertBixi(bixi, conn); } diconnect(conn); } public static List<Bixi> Select(float longitude, float latitude) { List<Bixi> list = new ArrayList<>(); PreparedStatement ps = null; Connection conn = connect(); try { ps = conn.prepareStatement(SELECT_PROCHE); ps.setFloat(1, longitude); ps.setFloat(2, latitude); ResultSet rs = ps.executeQuery(); while (rs.next()) { list.add(new Bixi(rs.getInt("id"), rs.getString("name"), rs.getFloat("longitude"), rs.getFloat("latitude"), rs.getBoolean("ouvert"), rs.getInt("velodisponible"), rs.getInt("emplacementdisponible"))); } } catch (SQLException e) { System.out.println(e.getMessage()); } finally { CloseConnection(ps); } diconnect(conn); return list; } private static void insertBixi(Bixi bixi, Connection conn) { PreparedStatement ps = null; try { ps = conn.prepareStatement(INSERT_BIXI); ps.setInt(1, bixi.getId()); ps.setString(2, bixi.getName()); ps.setFloat(3, bixi.getLongitude()); ps.setFloat(4, bixi.getLatitude()); ps.setBoolean(5, bixi.isOuvert()); ps.setInt(6, bixi.getVeloDisponible()); ps.setInt(7, bixi.getEmplacementDisponible()); ps.executeUpdate(); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { CloseConnection(ps); } } }