06. marts 2003 - 12:43Der er
87 kommentarer og 1 løsning
PreparedStatement
Jeg har lavet en klasse som håndterer databaseforbindelser og som har en række metoder indbygget. På grund af nogle formaterindsproblemer er jeg blevet rådet til at bruge PreparedStatement istedet for Statement. Det er her kæden hopper af :-( Jeg håber der er en som kan hjælpe mig.
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
value er en variabel som du forsøger at tilgå - uden at have den erklæret et sted.
du kunne udvide: public ResultSet select(String sql) til public ResultSet select(String sql, String value) men så skal du huske at overføre den værdi du vil sætte ind i kaldet af metoden
Okay, men jeg forstår stadig ikke hvad jeg skal bruge den til :-) Kan jeg bare undlade pstmt.setString(1, value); ? Hvis jeg nu udvider funktionen hvad skulle jeg så f.eks sætte value til ?
setString public void setString(int parameterIndex, String x) throws SQLExceptionSets the designated parameter to the given Java String value. The driver converts this to an SQL VARCHAR or LONGVARCHAR value (depending on the argument's size relative to the driver's limits on VARCHAR values) when it sends it to the database.
Parameters: parameterIndex - the first parameter is 1, the second is 2, ... x - the parameter value Throws: SQLException - if a database access error occurs
pstmt.setString(1, value) benyttes når dit SQL udtryk indeholder en eller flere parametre.
f.eks. "SELECT felt1, felt2, felt3 FROM mytable WHERE felt4=? AND felt5=?"
Her skal du så tilføje pstmt.setString(1, value2) og pstmt.setString(2, value2) for hhv. første og anden parameter. Hvis du ingen parametre(?) har i din SQL kan/skal du ikke kalde nogen setString (eller setFelttype)
når du benytter preparedstatements, bør du flytte den slags parametre ud af din SQL, så du får: "SELECT * FROM tracks WHERE name=? AND url=?" (bemærk ingen quotes omkring parametrene).
så skal du benytte: pstmt.setString(1, name); pstmt.setString(2, url);
at binde parametrene er især hvis du skal fyre samme sætning af flere gange, da sql-udtrykke bliver oversat på databaser-serveren og så bindes værdierne til denne preparedStatement.
String url = file.getFileName(); // .replaceAll("'",""); ResultSet rs = d.select("SELECT * FROM tracks WHERE name='" + name + "' AND url='" + url + "'" ); if (! rs.next()) { d.insertUpdate("INSERT INTO tracks (name,url) VALUES ('"+name+"','"+url+"')"); System.out.println("raekken fandtes ikke om er oprettet!"); } }
Vector vi = new Vector(); vi.addElement(name); vi.addElement(url); ResultSet rs = d.select("SELECT * FROM tracks WHERE name='" + name + "' AND url='" + url + "'", vi); if (! rs.next()) { d.insertUpdate("INSERT INTO tracks (name,url) VALUES ('"+name+"','"+url+"')"); System.out.println("raekken fandtes ikke om er oprettet!"); } } else { out.println("No uploaded files"); }
if (MultipartFormDataRequest.isMultipartFormData(request)) { // Uses MultipartFormDataRequest to parse the HTTP request. Vector listeners = new Vector(); listeners.addElement(upListener); MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request,listeners); String todo = mrequest.getParameter("todo"); String name = mrequest.getParameter("name");
if ( (todo != null) && (todo.equalsIgnoreCase("upload")) ) { Hashtable files = mrequest.getFiles(); if ( (files != null) || (!files.isEmpty()) ) { UploadFile file = (UploadFile) files.get("uploadfile"); out.println("Form field : uploadfile"+"<BR> Uploaded file : "+file.getFileName()+" ("+file.getFileSize()+" bytes)"+"<BR> Content Type : "+file.getContentType()); // Uses the bean now to store specified by jsp:setProperty at the top. upBean.store(mrequest, "uploadfile"); out.println("<br>Name of song: "+name); Databaseforbindelsemysqlprepared d = new Databaseforbindelsemysqlprepared("jdbc:mysql://URL/DB?user=user&password=pass","org.gjt.mm.mysql.Driver");
JUBIIIIII Nu virker det. Jeg lavede lige et lille Swing Interface og kunne konstaterer at der ikke var nogle problemer. Grunden til at den klippede af ved første ' når den skulle vise det var at jeg havde skrevet således
Så er det jo klart at den tror at der ikke er mere når den løber ind i en '
det har jeg så ændret til out.println("<a href=\"../music/"+url+"\">download");
Hvorfor den ikke ville opdaterer databasen (i forbindelse med en upload) før er et mysterie for mig. Tusinde tak for hjælpen og læg lige et svar så jeg kan give dig pointene
Jeg kunne heller ikke forstå at quotes gav problemer med prepared statement.
Men godt at det virker.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.