Som jag nämnt i en annan tråd har jag tagit mig till final i en tävling för idéer
till mobila tjänster (MISA) där jag nu håller på
att utveckla min applikation själv via Java/MySQL. Tyvärr är jag helt novis på
JAVA/SQL och har därför lyckligtvis fått hjälp från ett par personer att komma igång
lite med min tjänst.
Men eftersom de jobbar under dagarna och tiden börjar bli knapp (deadline på söndag
kl 23:59) lägger jag ett inlägg här och hoppas på att någon är snäll nog att hjälpa
mig vidare. De som hjälpt mig har även sagt att det inte rör sig om någon speciellt
svår programmering som ska behövas för att min lösning ska fungera.
Det som ska hända i servletkoden är att:
1. Orden i ett inkommande SMS, vars text ligger i "message", ska genomsökas och sedan
styras vidare till aktuellt ett SQL-uttyck som utför en manipulering av databasen om
kommandona "reg", "exp", "mobnr", "del", "deluser" finns i den inskickade texten. Om
"exp"-kommandot anges ska det även vara ett datum efter (YYMMDDHHMM), vilket
stringen "arg" anger i koden nedan.
2. OM inget av ovanstående kommando anges styrs koden till ett annat SQL-uttryck.
3. Manipulering av databasen via SQL-uttryck (som är färdiga)
4. Ivägskickning av SMS-meddelande till avsändaren med inlagd eller hämtad text.
Jag har som sagt redan fått lite hjälp kring koden till
delningen/kontrollen/styrningen och den skulle kunna se ut ungefär så här:
String cmd="";
String arg="";
if (message.startsWith("misa17")) {
message = message.substring(7).toLowerCase().trim();
int splitPos = message.indexOf(" ");
if (splitPos != -1) {
cmd = message.substring(0, splitPos);
arg = message.substring(splitPos+1);
} else {
cmd = message;
}
} else {
// Meddelandet börjar inte med misa17, skicka felmeddelande.
}
if ("reg".equals(cmd)) {
// Här ska SQL för REGISTRERING ska placeras
} else if ("exp".equals(cmd)) {
// Här ska SQL för INSKICKNING AV MEDDELANDE ska placeras
} else if ("del".equals(cmd)) {
// Här ska SQL för RADERING ska placeras
} else if ("deluser".equals(cmd)) {
// Här ska SQL för RADERING AV KONTO ska placeras
} else {
// Om inget kommando angivet, kolla om kommandot är ett telefonnummer
// och isf SQL för kontroll och utplockning från databasen
här
}
Problemet är nu hur jag ska lägga in denna kod i själva servletkoden så att den
"flyter". Jag vet VAR i serlvetkoden ovanstående kod ska placeras, men inte hur jag
ska integrera/implementera den i koden. Det är säkert "jätteenkelt", men jag är som
sagt okunnig på Java. Här är den kod där delnings/styrningskoden ska läggas in. Just
nu sker endast en inläggning av någr poster i DBn, som inte påverkas av vilket
meddelande användaren skickar in. Men jag vill alltså kunna påverka vad som läggs in
i DBn via texten ("message"-variabeln) i det inskickade SMS-meddelandet.
.....
destAddr = origAddr;
// I origAddr ovanfanns avsändarnumret till personen som skickade in SMS:et,
// vilken nu läggs över till den adress "retur"-SMS:et ska skickas till.
String text = "This is the "+this.getClass().getName() + " class";
String mySqlData = "";
// connect to MySql database
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try
{
Class.forName("xxx.xxx.xx.mysql.Driver");
// Koppla upp till min DB
String url = "jdbc:mysql://localhost/misa17";
con = DriverManager.getConnection(url, "misa17", "PasswordTillDatabasen");
// Exempel på SQL-manipulering nedan
stmt = con.createStatement();
rs = stmt.executeQuery("INSERT INTO tabell VALUES (2,'0707777777','xyz')");
String str = "";
while( rs.next() )
{
str = rs.getString("variabel");
// I "variabel" ovan kan t.ex det fält som ska plockas från DBn vid ovanstående
// SQL-fråga placeras för att senare i koden infogas i det SMS som skickas tillbaka.
// Eftersom avsändaren lägger in flera poster i DBn via SMS-medelandet så vill jag
// kunna plocka ut ALLA dessa inlagda posterna till SMS-meddelandet som skickas
// tillbaka till avsändaren.
mySqlData = mySqlData + str ;
}
}
catch( Exception e )
{
mySqlData = e.getMessage();
}
finally
{
try {
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
// could not close connection
}
}
// printPage(response.getWriter(), text, mySqlData);
message = mySqlData;
// I den borttagna koden nedan skickas det som precis tilldelats
// "message" via SMS till avsändaradressen.
// I den färdiga applikationen ska "message" alltså
// innehålla det man lagt in i DBn eller det som man hämtat från DBn.
.....
Fråga gärna om det är nåt som är otydligt/oklart i mitt inlägg. Det är lite svårt att
veta hur mycket man ska förklara. Jag är i alla fall mycket tacksam för alla tips
och all hjälp jag kan få eftersom det som sagt är deadline på söndag och jag märker
att jag faktiskt har en ärlig chans att bli klar med min applikation!