Web-TorMedlem sedan nov. 200013 890 inlägg statement.executeUpdate("INSERT INTO tblBook (colDate, colName, colText) VALUES (1, 2, 3)");
Ovanstående funkar fint men hur gör jag när jag ska ha in variabler i databasen?
En sådan här t.ex:
request.getParameter("fltName")
Man ska väl använda +-tecken på nåt sätt men jag fattar inte hur?
ViktorMedlem sedan aug. 20021 752 inlägg Det finns 2 sätt.
Antingen det "lätta"
int tmp=request.getParameter("fltName");
statement.executeUpdate("INSERT INTO tblBook (colDate, colName, colText) VALUES ("+request.getParameter("fltName")+", "+tmp+", 3)");
Tänk dock på att int inte får vara null (eftersom det är en primitiv datatyp, inget objekt) så du måste vara säker på att det finns data i "fltName".
Ett annat och mycket snyggare sätt är att använda "PreparedStatement". Detta sätt är också mycket efektivare om du måste göra många liknande insert/update, du gör ett preparedstatement och jobbar sedan mot det för alla update/insert.
int tmp1=request.getParameter("fltName1");
int tmp2=request.getParameter("fltName2");
int tmp3=request.getParameter("fltName3");
PreparedStatement s = conn.prepareStatement("INSERT INTO tblBook (colDate, colName, colText) VALUES (?, ?,?)");
s.setInt(1,tmp1);
s.setInt(2,tmp2);
s.setInt(3,tmp3);
s.executeUpdate();
För mer info om PreparedStatment titta här, PreparedStatment
/Viktor
Web-TorMedlem sedan nov. 200013 890 inlägg Tack, jag märker att jag måste börja hålla reda på vilken datatyp informationen har (det slipper man ju med PHP).
Jag ändrade koden för att det skulle passa in på min sida. Ser det bra ut?
String tmp1=request.getParameter("fltName");
String tmp2=request.getParameter("fltMail");
String tmp3=request.getParameter("fltText");
PreparedStatement s = con.prepareStatement("INSERT INTO tblBook (colName, colMail, colText) VALUES (?,?,?)");
s.setString(1,tmp1);
s.setString(2,tmp2);
s.setString(3,tmp3);
s.executeUpdate();
ViktorMedlem sedan aug. 20021 752 inlägg Japp, det ser bra ut :)
När du kör en preparedstatement så behöver du inte heller oroa dig för vad ska ha för fnuttar och typ runt datum och strängar, det fixar preparedstatement till.
/Viktor
Web-TorMedlem sedan nov. 200013 890 inlägg Jag gillade det här med preparedStatement. Kan man använda det även när man söker i databasen?
String givenName = request.getParameter("fltGivenName");
ResultSet rs = statement.executeQuery("SELECT colID FROM tblUsers WHERE colGivenName LIKE '%" + givenName + "%' ORDER BY colSurName");
SPiNMedlem sedan mars 20007 896 inlägg Jäpp:
PreparedStatement preparedStatement = connection.prepareStatement( "SELECT * FROM blah WHERE blih = ?" );
preparedStatement.setString( 1, "bloh" );
ResultSet resultSet = preparedStatement.executeQuery();
Om det var det du menade?
Web-TorMedlem sedan nov. 200013 890 inlägg Ja!
Det funkar ju fint men hur gör jag om jag vill ha in %-tecknena också:
String givenName = request.getParameter("fltGivenName");
PreparedStatement s = con.prepareStatement("SELECT colID FROM tblUsers WHERE colGivenName LIKE ?");
s.setString(1,givenName);
ResultSet rs = s.executeQuery();
SPiNMedlem sedan mars 20007 896 inlägg ...WHERE colGivenName LIKE %?%
Skulle jag gissa på.
ViktorMedlem sedan aug. 20021 752 inlägg Då får du lägga till dem själv
PreparedStatement s = con.prepareStatement("SELECT colID FROM tblUsers WHERE colGivenName LIKE ?");
s.setString(1,"%"+givenName+"%");
PreparedStatement är nog bäst att använda vid insert/update.
/Viktor
Web-TorMedlem sedan nov. 200013 890 inlägg
PreparedStatement är nog bäst att använda vid insert/update.
Varför det?
Jag tycker att det funkar kanon nu när jag ska söka på en massa olika fält.
Man får liksom bättre struktur på koden. :)
SPiNMedlem sedan mars 20007 896 inlägg Fast prestandaökningen sker vid användning av INSERT, DELETE och UPDATE-frågor. Däremot tror jag knappast att det är någon prestandaförlust att använda det vid en SELECT-fråga, så gillar du det bör du använda det. :)
ViktorMedlem sedan aug. 20021 752 inlägg Jag tycker själv inte att det blir bra/snyggt/rent när man kör så som jag skrev (om SPiN's kod fungerar så ser det ju bättre ut) och när du har en Select så är det sällan du ställer flera likadan eftervarandra som du gör med update och insert, det är när du gör det som ett PreparedStatement har en fördel när det gäller prestanda.
och spin är 1 min före igen :x
/Viktor
Web-TorMedlem sedan nov. 200013 890 inlägg Jag håller med om att SPiNs syntax såg trevligare ut men den verkar inte funka:
Syntaxfel i frågeuttrycket 'colGivenName LIKE %Pa_RaM000%'.
Fan vet vad Pa_RaM000 är, men det känns inte bra. :l
ViktorMedlem sedan aug. 20021 752 inlägg Fungerar perfekt för mig :)
PreparedStatement s =conn.prepareStatement("select * from members where username like ?");
s.setString(1,"%vikt%");
ResultSet rs=s.executeQuery();
Fick ut 1 medlem som heter Viktor.
/Viktor
Web-TorMedlem sedan nov. 200013 890 inlägg Jo, din kod funkar Viktor. Det var SPiNs kod som inte funka. ;)
ViktorMedlem sedan aug. 20021 752 inlägg ok, trode du inte kunde få någon kod att fungera
/Viktor