Avatar billede dannv Nybegynder
24. marts 2004 - 10:19 Der er 11 kommentarer og
1 løsning

Logik - oprettelse af felter i db.

Hejsa,

Jeg har et problem mht. oprettelse af noget logik til nogle felter som skal oprettes i min db.

En bruger kan tilører en bestemt gruppe, og dette har jeg en side hvor man kan ændre tilhørsforhold. Det vil sige at brugeren kan være uændret, kan få tilføjet og kan få fjernet grupper efter opdatering.

---------- Kode ----------
Vector checked = new Vector();//en vector som har de grupper som vedkommende er medlem af (fx, 1 3 4 6). (før værdier)

//the groups the user has entered as the new groups.
//String group = er en streng af typen  "1,2,3...." og har alle de grupper som vedkommende skal være del af efter opdatering

boolean insert = false;
boolean delete = false;
stmt.clearBatch();
String insertGroup = null;
StringTokenizer tokens = new StringTokenizer(group, ",", false);
while(tokens.hasMoreElements())
{
  String token = tokens.nextToken();
  token.trim();
  for (i = 0; i < checked.size(); i++)
  {
      if(token.equals((String) checked.elementAt(i)))
          break;
      else if(!token.equals((String) checked.elementAt(i)))
            {
              //ny skal indsættes hvis den ikke eksiterer i forvejen!!
              insert = true;
            }
      else if(!((String) checked.elementAt(i)).equals(token))
      {
          delete = true;
      }
  }

  if(insert)
  {
    //udført INSERT INTO
  }
  else
      //udfør DELETE og slet hvor relevant

  stmt.addBatch(insertGroup);
}

----- ***** -----
Så det ovenstående skal gøre er:
1. Hvis den eksistere break ud af løkken og gør ingenting.
2. Hvis den er ny sæt opdater flag, og foretag opdatering.
3. Skal kunne finde ud af om der er blevet fjernet grupper, og så delete disse...

--------- ***** ---------

Håber at ovenstående er forståeligt....
Avatar billede arne_v Ekspert
24. marts 2004 - 11:01 #1
Det må kunne gøres på mange måder.

Den her er simpel at overskue:

import java.util.*;

public class VV {
    public static void main(String[] args) {
        Vector gamle = new Vector();
        gamle.add("a");
        gamle.add("b");
        String nye = "b,c";
        StringTokenizer st = new StringTokenizer(nye, ",");
        Vector nye2 = new Vector();
        while(st.hasMoreTokens()) {
            nye2.add(st.nextToken());
        }
        for(int i = 0; i < nye2.size(); i++) {
            if(!gamle.contains(nye2.get(i))) {
                System.out.println("INSERT " + nye2.get(i));
            }
        }
        for(int i = 0; i < gamle.size(); i++) {
            if(!nye2.contains(gamle.get(i))) {
                System.out.println("DELETE " + gamle.get(i));
            }
        }
    }
}
Avatar billede dannv Nybegynder
24. marts 2004 - 12:01 #2
Arne, nedenstående på baggrund af dit indlæg, men giver nogle fejl:

Hvis min bruger tidligere var reg. i 4 grupper og jeg tilføjer een, så bliver den nye gruppe registreret 5 gange. Min vector new2 indeholder ALLE grupper som vedkommende nu er registreret i!

                String insertGroup = null;
                StringTokenizer tokens = new StringTokenizer(group, ",", false);
                while(tokens.hasMoreElements())
                {
                    String token = tokens.nextToken();
                    token.trim();
                    new2.add(token);
                }               
               
                for (int n = 0; n < new2.size(); n++)
                {
                    if(!checked.contains(new2.elementAt(i)))
                    {
                        //Insert
                        System.out.println("Insert : "+new2.elementAt(i));
                        //insertGroup =
                        //stmt.addBatch(insertGroup);
                    }
                }
               
                for (i = 0; i <checked.size(); i++)
                {
                    if(!new2.contains(checked.elementAt(i)))
                    {
                        //Delete
                        System.out.println("Delete : "+checked.elementAt(i));
                        //insertGroup =
                        //stmt.addBatch(insertGroup);
                    }
                }
Avatar billede dannv Nybegynder
24. marts 2004 - 12:04 #3
Når jeg sletter en gruppe fåes følgende... (går fra at være reg. i 4 til 3)

java.lang.ArrayIndexOutOfBoundsException: 4 >= 3
Avatar billede arne_v Ekspert
24. marts 2004 - 12:13 #4
Du må ikke rette i Vector'erne inde i løkkerne. Men ellers bør de virke.
Avatar billede arne_v Ekspert
24. marts 2004 - 12:14 #5
(helt urelateret til det egentlige problem)

token.trim();

gør ingenting.

Du mener sikkert:

token = token.trim();
Avatar billede dannv Nybegynder
24. marts 2004 - 12:47 #6
ja da klart... :-(
Avatar billede dannv Nybegynder
24. marts 2004 - 12:51 #7
Nå men jeg kan ikke lige gennemskue hvorfor det ikke virker. Jeg kan ikke se at jeg ændre i vectorene i løkkerne...
Avatar billede dannv Nybegynder
24. marts 2004 - 12:53 #8
ok insert havde en taste fejl refererede i i stedet for n:
...
for (int n = 0; n < new2.size(); n++)
                {
                    if(!checked.contains(new2.elementAt(i)))
                    {
...
Avatar billede arne_v Ekspert
24. marts 2004 - 12:55 #9
Fik det løst problemet ?
Avatar billede dannv Nybegynder
24. marts 2004 - 13:02 #10
ok tester lige men det ser ud til at virken nu!!
Avatar billede dannv Nybegynder
24. marts 2004 - 14:33 #11
arrgghh der er et eller andet der ikke er helt godt.. Når jeg tilføjer mere end en bliver kun den ene tilføjet. Når jeg sletter en og tilføjer en anden bliver følgende fejl rapporteret 'java.lang.ArrayIndexOutOfBoundsException: 2 >= 2'. Nu smider jeg lige min kode så kan du lige se om der er noget der er helt forrykt..:

Vector new2 = new Vector();
                stmt.clearBatch();
                String insertGroup = null;
                StringTokenizer tokens = new StringTokenizer(group, ",", false);
                while(tokens.hasMoreElements())
                {
                    String token = tokens.nextToken();
                    token = token.trim();
                    new2.add(token);
                }               
               
                for (int n = 0; n < new2.size(); n++)
                {
                    if(!checked.contains(new2.get(n)))
                    {
                        //Insert
                        insertGroup = "INSERT INTO user_group_user_link (user_id, group_id) VALUES("+id+", "+new2.elementAt(i)+")";
                        stmt.addBatch(insertGroup);
                    }
                }
               
                for (i = 0; i <checked.size(); i++)
                {
                    if(!new2.contains(checked.elementAt(i)))
                    {
                        //Delete
                        insertGroup = "DELETE FROM user_group_user_link WHERE user_id = "+id+" AND group_id = "+checked.elementAt(i);
                        stmt.addBatch(insertGroup);
                    }
                }
             
                updateCounts = stmt.executeBatch();
                con.commit();
Avatar billede dannv Nybegynder
24. marts 2004 - 14:52 #12
Ok.. da jeg fik tændt hovedet og pudset brillerne lykkedes det... flere fejl i n og i reference.. lukker, tak!!
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Lead DevSecOps

SOS International

Cloud Native Architect

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger IT-supporter til Lokal IT Servicecenter i Karup