Avatar billede andersdp Nybegynder
02. august 2004 - 14:45 Der er 10 kommentarer og
1 løsning

Opdatere flere felter i database via for-løkke

Jeg prøver at opdatere flere rækker i min database via en for-løkke:

---------------------------------------------------
<%
int aa = 0;
for (int a=1; a <= count; a++)
{
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_name","user","pass");
String query = "SELECT * FROM table where id = "+ idarray[aa];   
Statement Stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = Stmt.executeQuery(query);

rs.next();
rs.updateString("contentorder",orderarray[aa]);

rs.updateRow();

con.close();
aa++;
}
%>
---------------------------------------------------

Meeen, selvklart findes rs, con og query jo ved andet gennemløb af for-løkken. Kan jeg på en måde komme ud over dette? Enten ved at slette de 3 variabler til slut i for-løkken, eller dynamisk navngive dem fortløbende?
Avatar billede arne_v Ekspert
02. august 2004 - 17:26 #1
Jeg ville flytte getConnection og close udenfor for løkken og lade løkken bruge aa.
Avatar billede arne_v Ekspert
02. august 2004 - 17:28 #2
<%
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_name","user","pass");
for (int aa=0; aa = count; aa++)
{
    Statement Stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    ResultSet rs = Stmt.executeQuery("SELECT * FROM table where id = "+ idarray[aa]);
    rs.next();
    rs.updateString("contentorder",orderarray[aa]);
    rs.updateRow();
}
con.close();
%>
Avatar billede arne_v Ekspert
02. august 2004 - 17:28 #3
Jeg har også flyttet SQL'en direkte ind i execuetQuery.
Avatar billede arne_v Ekspert
02. august 2004 - 17:29 #4
Hvorfor bruger du iøvrigt updatable resultset fremfor en UPDATE statement ?
Avatar billede arne_v Ekspert
02. august 2004 - 17:29 #5
Og et svar
Avatar billede andersdp Nybegynder
02. august 2004 - 17:36 #6
"Hvorfor bruger du iøvrigt updatable resultset fremfor en UPDATE statement ?"
- har bare pastet noget gammel kode ind fra et noget ældre site...

Dit forslag fjerende da én fejl, men "con" og "rs" er stadig "already defined in this method"....
Avatar billede arne_v Ekspert
02. august 2004 - 17:40 #7
Det lyder som at du allerede har con og rs defineret i din JSP side.

Enten genbruger du de variable (altså fjerner typen foran dem i dette kode
fragment)

Eller så kalder du dem con2 og rs2 i dette kode fragment.
Avatar billede arne_v Ekspert
02. august 2004 - 17:47 #8
Med UPDATE:

<%
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_name","user","pass");
Statement Stmt = con.createStatement();
for (int aa=0; aa < count; aa++)
{
    Stmt.executeUpdate("UPDATE table SET contentorder='" + orderarray[aa] + "' WHERE id=" + idarray[aa]);
}
con.close();
%>
Avatar billede arne_v Ekspert
02. august 2004 - 17:47 #9
Jeg flyttede også lige createStatement udenfor løkken.
Avatar billede arne_v Ekspert
02. august 2004 - 17:48 #10
Der er iøvrigt en fejl i mit 17:28:19

for (int aa=0; aa = count; aa++)

skal selvfølgelig være

for (int aa=0; aa < count; aa++)
Avatar billede andersdp Nybegynder
02. august 2004 - 17:57 #11
Helt perfekt!! Det virker som ønsket...
Var lige nået til problemer med mit updatable resultset...;)

Mange mange tak for hjælpen!!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester