T tosses Medlem sedan aug. 2003 190 inlägg Frågan 5 nov. 2003 13:29 #1 Jag ska skick in företagsnamn i en db och får error så fort namnet innehåller en ' .
T.ex. MC Donald's
Här är koden:
String lagraQr = "insert into ftglistadeljsp (PEORGNR, NAMN, ADDR, PNR, BEORT, TEL, ANV) values ('"+request.getParameter("PEORGNR")+"' , '"+request.getParameter("NAMN")+"' , '"+request.getParameter("ADDR")+"' , '"+request.getParameter("PNR")+"' , '"+request.getParameter("BEORT")+"' , '"+request.getParameter("TEL")+"' , '"+session.getAttribute("user")+"')";
Finns det någon bra lösning på detta!
Snälla hjälp mig!
S SPiN Medlem sedan mars 2000 7 896 inlägg Ett enkelt sätt är att ta bort den helt, genom metoden replace() i String-klassen:
String string = "MC Donald's";
string = string.replace( '\\'', '' );
Det finns ingen lättare metod, replace() tar nämligen bara emot tecken som parametrar. Då får du använda reguljära uttryck eller skriva en egen metod som escape:ar/byter ut tecknet.
Viktor Medlem sedan aug. 2002 1 752 inlägg Sök och ersätt alla ' med ", tror det ska fungera. När du har en ' i texten så tror SQL servern att det är slut på den strängen.
request.getParameter("BEORT").replace('\'','\"')
:OO SPiN är också ledig idag verkar det som :e
/Viktor
T tosses Medlem sedan aug. 2003 190 inlägg Tack!! Ni är guld värda!!!!!
Finns det någon manual med olika funktioner eller kommandon eller objekt och methoder? Ungefär som php's documentation!
på PHP.net kan man hitta allt + exempel på hur man gör det!
/Tomas
Viktor Medlem sedan aug. 2002 1 752 inlägg Dessa 2 måste man ha om man ska utveckla i Java :)
J2SE 1.4.2 API
J2EE 1.3 API
Du hittar kanske inte så mycket exempel men det är bara att googla lite med funktions namnen så hittar man exempel.
/Viktor
S SPiN Medlem sedan mars 2000 7 896 inlägg
Viktor skrev:
SPiN är också ledig idag verkar det som
Nänä, jag har haft tenta hela morgonen... Ledig existerar inte i min värld! Åtminstone inte längre, nu när Pascal-kursen är avslutad...
J jme Medlem sedan maj 2001 2 237 inlägg Kör med PreparedStatement istället.
String query = "SELECT username from admin where username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(query);
// connection är en Connection-objekt
stmt.setString(1, "O'reilly"); // ersätter första ? med O'reilly
stmt.setString(2, "tripleX"); // ersätter andra ? med "tripleX"
result = stmt.executeQuery();
// result är en ResultSet-objekt
nu behöver du inte ersätta ' med \' för detta sköts automatiskt av PreparedStatement(gissar jag på)
Jag brukar anropa denna metod innan jag slänger in någonting i databasen:
public static String formatString(String str)
{
if(str == null || str.length() == 0)
return "";
str = str.trim();
int len = str.length();
char c;
StringBuffer sb = new StringBuffer(len + 20);
for (int i=0; i<len; i++)
{
c = str.charAt(i);
switch(c)
{
case 39: sb.append("''");
break;
case 34: sb.append("\"");
break;
case 92: sb.append("\\\\");
break;
default: sb.append(c);
}
}
return sb.toString();
}
Denna metod låter dig spara enkelfnuttar i databasen, utan att sabba någonting... De övriga förslagen, (innan detta) var också bra!
Denna metod låter dig spara enkelfnuttar i databasen, utan att sabba någonting... De övriga förslagen, (innan detta) var också bra!
Nej, det enda förslag som var bra var jme:s förslag: ANVÄND PREPAREDSTATEMENT . Det finns ingen anledning att leka ASP-programmerare och fippla med enkelfnuttar när Java API:et ger tillgång till PreparedStatement.
Det finns även en annan stor fördel med PreparedStatement precis som dess namn antyder, den förbereder frågan och man kan sedan köra den upprepade gånger mot databasen med prestandavinst jämfört med om man i en loop skapar ett nytt Statement varje gång.
T tosses Medlem sedan aug. 2003 190 inlägg Kan någon skriva en vanlig sqlfråga med preparedStatement methoden. Inklusive att loopa ut resultatet. Var så snill!
/Tomas
Viktor Medlem sedan aug. 2002 1 752 inlägg
Kan någon skriva en vanlig sqlfråga med preparedStatement methoden. Inklusive att loopa ut resultatet. Var så snill!
Visst :)
PreparedStatement pstmnt=connection.prepareStatement("SELECT PEORGNR, NAME, ADDR, PNR, BEORT, TEL, ANV FROM ftglistadeljsp WHERE BEORT=?");
pstmnt.setString(1,"Stockholm");
ResultSet rs=pstmnt.executeQuery();
System.out.println("Stockholm");
while(rs.next())
{
System.out.println(rs.getString("NAME")+rs.getString("TEL"));
}
pstmnt.setString(1,"Göteborg");
rs=pstmnt.executeQuery();
System.out.println("Göteborg");
while(rs.next())
{
System.out.println(rs.getString("NAME")+rs.getString("TEL"));
}
/Viktor