webForumDet fria alternativet

Problem med en ' i en sql sats

11 svar · 380 visningar · startad av tosses

tossesMedlem sedan aug. 2003190 inlägg
#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!

SPiNMedlem sedan mars 20005 832 inlägg
#2

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.

ViktorMedlem sedan aug. 20021 710 inlägg
#3

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

tossesMedlem sedan aug. 2003190 inlägg
#4

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!

PHP.net kan man hitta allt + exempel på hur man gör det!

/Tomas

ViktorMedlem sedan aug. 20021 710 inlägg
#5

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

SPiNMedlem sedan mars 20005 832 inlägg
#6

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...

jmeMedlem sedan maj 20011 967 inlägg
#7

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å)

andreascarlssonMedlem sedan feb. 2003211 inlägg
#8

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!

sgtpepperMedlem sedan apr. 20005 524 inlägg
#9

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.

tossesMedlem sedan aug. 2003190 inlägg
#10

Kan någon skriva en vanlig sqlfråga med preparedStatement methoden. Inklusive att loopa ut resultatet. Var så snill!

/Tomas

ViktorMedlem sedan aug. 20021 710 inlägg
#11

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

tossesMedlem sedan aug. 2003190 inlägg
#12

Tack! va ni är bra!!

/Tomas

Genererad på 383 ms · cache AV · v20260730165559-full.f96bc7eb