Trädvy Permalänk
Medlem
Registrerad
Jun 2008

Restful webservice med java

Hej!

Jag behöver hjälp, tanken är att man ska hämta ApotekService?ort=
och därefter så ska den skriva ut resultaten beroende på vilken ort som söker efter, tex göteborg, utskriften av alla apotek görs i form av json som ni ser vid jsonwriter. Jag vill fortfarande att alla attribut ska skriva ut men att den ska sortera utifrån ort.
Jättetacksam för lite vägledning.

String ort = request.getParameter("ort");
String sqlOrt = "SELECT postort FROM postadress";
if (ort != null) {

out.println("NAMN: " + convertFromISO8859_1ToUTF_8(ort).toLowerCase());
sqlOrt = sqlOrt + " namn = '" + ort + "'";

Connection con = DriverManager.getConnection(Url, user, password);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sqlOrt);

while (rs.next()) {

apotek feed = new apotek();

feed.setOrt(rs.getString("postort"));

list.add(feed);

}

} else {
out.println("Det finns ingen sådan ort!");

}

Connection con = DriverManager.getConnection(Url, user, password);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT a.namn, a.gatuadress, a.postnummer, k.kommunnamn, l.länsnamn, pa.postort, ä.ägarnamn\n"
+ "FROM apotek a\n"
+ "INNER JOIN kommun k ON k.länskod = a.länskod\n"
+ "AND k.kommunkod = a.kommunkod\n"
+ "INNER JOIN län l ON l.länskod = a.länskod\n"
+ "INNER JOIN postadress pa ON pa.postnr = a.postnummer\n"
+ "INNER JOIN ägare ä ON ä.ägarid = a.ägarid"
);

while (rs.next()) {

apotek feed = new apotek();
feed.setLan(rs.getString("länsnamn"));
feed.setNamn(rs.getString("namn"));
feed.setAdress(rs.getString("gatuadress"));
feed.setPostnummer(rs.getString("postnummer"));
feed.setKommun(rs.getString("kommunnamn"));
feed.setOrt(rs.getString("postort"));
feed.setForsaljningsstalle(rs.getString("ägarnamn"));
list.add(feed);

}

JSONWriter jsonWriter = new JSONWriter(out);

jsonWriter.object();

jsonWriter.key("apotek");

jsonWriter.array();

for (apotek currentApotek : list) {

jsonWriter.object();

jsonWriter.key("lan");
jsonWriter.value(currentApotek.getLan());

jsonWriter.key("kommun");
jsonWriter.value(currentApotek.getKommun());

jsonWriter.key("forsaljningsstalle");
jsonWriter.value(currentApotek.getForsaljningsstalle());

jsonWriter.key("adress");
jsonWriter.value(currentApotek.getAdress());

jsonWriter.key("postnummer");
jsonWriter.value(currentApotek.getPostnummer());

jsonWriter.key("ort");
jsonWriter.value(currentApotek.getOrt());

jsonWriter.key("namn");
jsonWriter.value(currentApotek.getNamn());

jsonWriter.endObject(); //stänger bookmarksposten
}

jsonWriter.endArray();
jsonWriter.endObject();

rs.close();
st.close();

out.close();

} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException ex) {
Logger.getLogger(ApotekService.class.getName()).log(Level.SEVERE, null, ex);
}

}

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

Uppdaterar detta lite för jag har kommit längre.

Hur kan jag kombinera det som användaren skriver i sökfältet, tex om man skriver in köping så ska alla med städer som innehåller köping sökas fram.
String ort = request.getParameter("ort");
http://localhost:8080/Apotek_old/ApotekService?ort=koping

String sql = " SELECT a.namn, a.gatuadress, a.postnummer, k.kommunnamn, l.länsnamn, pa.postort, ä.ägarnamn \n"
+ " FROM apotek a\n"
+ " INNER JOIN kommun k ON k.länskod = a.länskod\n"
+ " AND k.kommunkod = a.kommunkod\n"
+ " INNER JOIN län l ON l.länskod = a.länskod\n"
+ " INNER JOIN postadress pa ON pa.postnr = a.postnummer\n"
+ " INNER JOIN ägare ä ON ä.ägarid = a.ägarid";

Mitt försök men printar inte nånting
if (ort != null) {
sql = sql + " WHERE pa.postort ="+ "'" + convertFromISO8859_1ToUTF_8(ort).toLowerCase() + "'"
+AND (pa.postort='köping' OR pa.postort='norrköping' OR pa.postort='söderköping' OR pa.postort='nyköping' OR pa.postort='malmköping')" ;
}

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av Forbizzn:

Uppdaterar detta lite för jag har kommit längre.

Hur kan jag kombinera det som användaren skriver i sökfältet, tex om man skriver in köping så ska alla med städer som innehåller köping sökas fram.
String ort = request.getParameter("ort");
http://localhost:8080/Apotek_old/ApotekService?ort=koping

String sql = " SELECT a.namn, a.gatuadress, a.postnummer, k.kommunnamn, l.länsnamn, pa.postort, ä.ägarnamn \n"
+ " FROM apotek a\n"
+ " INNER JOIN kommun k ON k.länskod = a.länskod\n"
+ " AND k.kommunkod = a.kommunkod\n"
+ " INNER JOIN län l ON l.länskod = a.länskod\n"
+ " INNER JOIN postadress pa ON pa.postnr = a.postnummer\n"
+ " INNER JOIN ägare ä ON ä.ägarid = a.ägarid";

Mitt försök men printar inte nånting
if (ort != null) {
sql = sql + " WHERE pa.postort ="+ "'" + convertFromISO8859_1ToUTF_8(ort).toLowerCase() + "'"
+AND (pa.postort='köping' OR pa.postort='norrköping' OR pa.postort='söderköping' OR pa.postort='nyköping' OR pa.postort='malmköping')" ;
}

Använd prepared statements till att börja med: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.h...
Joina dina tabeller som vanligt och lägg till en rad

"WHERE pa.postort LIKE ?"

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

Ett annat problem som jag har

String pn = request.getParameter("pn");

String postnummerURL = "%20"; // postnummer som kommer in som url-parameter
String patternStr = "%20"; //sökmönster
String replacementStr = " "; //ersättningsmönster
Pattern patternPostnummer = Pattern.compile(patternStr); // skapar regular-expressions
Matcher matcherPostnummer = patternPostnummer.matcher(postnummerURL); //kopplar regular-expressions till postnumret
String formateratPostnummer = matcherPostnummer.replaceAll(replacementStr); // kör en sök och ersätt av %20 mot blanksteg
System.out.println(postnummerURL + " -> " + formateratPostnummer);
if (pn != null) {

sql = sql + " WHERE a.postnummer = " + "'" +pn+ formateratPostnummer+ "'";
out.println(sql);
}

Utskriften blir:

SELECT a.namn, a.gatuadress, a.postnummer, k.kommunnamn, l.länsnamn, pa.postort, ä.ägarnamn
FROM apotek a
INNER JOIN kommun k ON k.länskod = a.länskod
AND k.kommunkod = a.kommunkod
INNER JOIN län l ON l.länskod = a.länskod
INNER JOIN postadress pa ON pa.postnr = a.postnummer
INNER JOIN ägare ä ON ä.ägarid = a.ägarid WHERE a.postnummer = '15231 '

Jag vill kunna ha mellanslag mellan 152 och 31 så det ser ut såhär: 152 31, fattar inte bara hur jag ska få formateratPostnummer att hamna mittemellan på pn.