Avatar billede touel Nybegynder
01. oktober 2008 - 21:32 Der er 34 kommentarer og
1 løsning

Oplagt DB til java

hey ppl

Har været inde på MySQL hjm side for at hente db program.

Men de har delt det op i forskellige versioner nu og jeg ved ærlige talt ikke hvilken en jeg skal vælge.

Jeg havde hentet MySQL WorkBench, men den er alt for visuelt, og jeg kan ikke umiddelbart se hvordan jeg indsætter data i den.

Jeg skal kun bruge en db for at indsætte data i den og trække dem igen senere hen i forb med statistik
Avatar billede arne_v Ekspert
01. oktober 2008 - 21:39 #1
Avatar billede touel Nybegynder
01. oktober 2008 - 21:57 #2
tak - lige præcis hva jeg søgte efter arne...

så kommer det dumme spg, kender du et GUI program til dette, så jeg ikke behøver at skrive så meget ?
Avatar billede arne_v Ekspert
01. oktober 2008 - 22:04 #3
http://dev.mysql.com/downloads/gui-tools/5.0.html
evt. http://dev.mysql.com/downloads/workbench/5.0.html som du har kigget paa
eller et af 3. parts produkterne Toad, SQLYog, DBDesigner, PHPMyAdmin etc.
Avatar billede touel Nybegynder
03. oktober 2008 - 00:18 #4
jeg har hentet DBDesigner. Skal høre om jeg på nogen måder skal connecte DBDesigner og mysql 5.0 sammen, så indholdet af tabeller kan ses begge steder ?
Avatar billede touel Nybegynder
03. oktober 2008 - 00:33 #5
skal mysql 5.0 lægges et bestemt sted for at kunne gemme data fra mit java prog ?

jeg har sørget for at mysql-connector-java-5.1.6-bin.jar er tilføjet mit projekt, og

kan ses som jar fil nu.
Avatar billede arne_v Ekspert
03. oktober 2008 - 00:44 #6
MySQL skal installeres og startes.

Connector skal være i classpath.

Og så ellers bare igang med JDBC.
Avatar billede arne_v Ekspert
03. oktober 2008 - 00:45 #7
Det er et stykke tid siden at jeg har installeret DBDesigner, men jeg mener at du første
gang skal angive hvad du vil connecte til.
Avatar billede touel Nybegynder
03. oktober 2008 - 00:51 #8
hvis jeg i mysql opretter et felt som (1)brugernavn, et felt som (2)password, og til disse 2 felter ønsker jeg (3) et felt,hvori der kan indtastes 30 gange (red. felter).

dvs noget a la:

1. Brugernavn    2. Password    3. GentagPwd
                                  GentagPwd
                                  GentagPwd
                                  GentagPwd
                                  GentagPwd
                                      .
                                      .
                                      .
                                  GentagPwd
                                  GentagPwd
                                op til 30 gange

Håber det gav mening ?

Hvordan skriver man det i sql syntaks ???
Avatar billede arne_v Ekspert
03. oktober 2008 - 02:13 #9
Skriver hvad i SQL syntax ?
Avatar billede touel Nybegynder
04. oktober 2008 - 23:26 #10
Altså

jeg vil gerne lave en tabel i SQL, hvor jeg opretter en kolonne med et felt for brugernavn, en kolonne med et felt for password og en kolonne med 30 felter hvor password er blevet gentaget 30 gange.

create table Person(idPerson int primary key not null,Brugernavn VARCHAR(20),

Password VARCHAR(20),GentagPwd VARCHAR(25)?!?!?!?!?!)GentagPwd skal gentages 30 gange ?
Avatar billede arne_v Ekspert
05. oktober 2008 - 00:51 #11
Enter laver du:

CREATE TABLE person (personid INT NOT NULL PRIMARY KEY,..., gentagpwd1 VARCHAR(20), ..., gentagpwd30 VARCHAR(20))

eller bedre:

CREATE TABLE person (personid INT NOT NULL PRIMARY KEY,...)
CREATE TABLE persongentagpwd (personid INT NOT NULL, ix INT NOT NULL, gentagpwd VARCHAR(20), PRIMARY KEY(personid,ix))
Avatar billede touel Nybegynder
07. oktober 2008 - 20:22 #12
I følgende kode får jeg fejl : Incorrect integer value: '' for column 'personid' at row 1, når jeg angiver hvilke værdier der skal indsættes.

try
        {
            Class.forName("com.mysql.jdbc.Driver");
            url ="jdbc:mysql://localhost:3306/passwordtest";
           
            forb =DriverManager.getConnection(url,"root", "fesout");
            System.out.println("FORB "  + forb);
            Statement stmt = forb.createStatement();
            stmt.executeUpdate("insert into person(personid,Brugernavn,password,pwd1)" +
                    " values('','"+navn+"','"+pwd+"'"
                    + ",'"+arraylist+"')");
        }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }

bemærk hvor der står "values('???','"+navn+"'", det sted hvor jeg har spg tegn, der ønsker jeg ikke at skrive noget da, brugerid auto. skal tælles op, men det gør den ikke. Hvad skal jeg skrive i values(''  ?
Avatar billede touel Nybegynder
07. oktober 2008 - 20:26 #13
tegnet kan måske misforståes..

values("    -FORKERT

values(' '  - RIGTIGT

dvs det skal læses som det nederste.
Avatar billede arne_v Ekspert
07. oktober 2008 - 20:45 #14
Naar du skal indsaette i et autoincrement/identity felt saa undlader du feltet baade
i feltnavns listen og i values listen.
Avatar billede touel Nybegynder
07. oktober 2008 - 20:51 #15
min autoincrement felt hedder personid, og hvis jeg undlader den får jeg fejl :

Field 'personid' doesn't have a default value
Avatar billede touel Nybegynder
07. oktober 2008 - 21:12 #16
arne de 2 tabeller som du har beskrevet tidligere (05/10-08 00:51:42)

CREATE TABLE person (personid INT NOT NULL PRIMARY KEY,...)

CREATE TABLE persongentagpwd (personid INT NOT NULL, ix INT NOT NULL, gentagpwd VARCHAR(20), PRIMARY KEY(personid,ix))

I den første tabel, efter at du opretter personid og sætter et komma, så skriver du bare ..... hvad skal præcis stå der ?

I den anden tabel, skriver du "ix" i den anden kolonne... hvordan skal den forståes ?

skal jeg gentage 30 felter derinde, eller skal jeg oprette tabellen ordret som du har skrevet ?
Avatar billede touel Nybegynder
07. oktober 2008 - 21:45 #17
jeg havde nemlig valgt din første løsning, men det er blevet alt for bøvlet og nu kan

jeg ikke overskue det længere. håber du svarer snarest
Avatar billede arne_v Ekspert
07. oktober 2008 - 21:54 #18
Hvis et felt er sat til autoincrement i databasen, saa har det en defaukt vaerdi.
Avatar billede arne_v Ekspert
07. oktober 2008 - 21:59 #19
... er en forkortelse for alle de oevrige felter som du nu maate oenske

ix er et tal 1-30 som angiver hvilket gentagpwd det er
Avatar billede touel Nybegynder
07. oktober 2008 - 21:59 #20
det har jeg forstået arne

men jeg dropper min gamle løsning og vil gå over til den anden, som jeg spørger til længere oppe
Avatar billede touel Nybegynder
07. oktober 2008 - 22:08 #21
dvs i mysql skal jeg ordret skrive:

CREATE TABLE person(personid INT NOT NULL PRIMARY KEY,brugernavn VARCHAR(25),password VARCHAR(25),gentagpwd varchar(25));


CREATE TABLE persongentagpwd(personid INT NOT NULL PRIMARY KEY,pwd1 VARCHAR(20),pwd2 VARCHAR(20),pwd3 VARCHAR(20),pwd4 VARCHAR(20),pwd5 VARCHAR(20),pwd6 VARCHAR(20),pwd7 VARCHAR(20),pwd8 VARCHAR(20),pwd9 VARCHAR(20),pwd10 VARCHAR(20),pwd11 VARCHAR(20),pwd12 VARCHAR(20),pwd13 VARCHAR(20),pwd14 VARCHAR(20),pwd15 VARCHAR(20),pwd16 VARCHAR(20),pwd17 VARCHAR(20),pwd18 VARCHAR(20),pwd19 VARCHAR(20),pwd20 VARCHAR(20),pwd21 VARCHAR(20),pwd22 VARCHAR(20),pwd23 VARCHAR(20),pwd24 VARCHAR(20),pwd25 VARCHAR(20),pwd26 VARCHAR(20),pwd27 VARCHAR(20),pwd28 VARCHAR(20),pwd29 VARCHAR(20),pwd30 VARCHAR(20),PRIMARY KEY(personid,???))
Avatar billede arne_v Ekspert
08. oktober 2008 - 01:55 #22
Nej.

CREATE TABLE persongentagpwd (personid INT NOT NULL, ix INT NOT NULL, gentagpwd VARCHAR(20), PRIMARY KEY(personid,ix))


er "as is" !
Avatar billede touel Nybegynder
09. oktober 2008 - 18:50 #23
min funktion som skriver de 30 gange gentagpwd til databasen ser sådan ud :

public String getArrayList(){

        String str="";
        Object [] list= gemstr.toArray();
       
        for(int i=0;i<list.length;i++)
        {
            System.out.println("temp inholder: " + list[i]);
            str=(String)it.next();
       
        }

        return str;

    }

Jeg har før leget med både String [], ArrayList og Object [] som return type for ovenstående funk,men får så fejl om at så mange felter kan den ikke indeholde...

hvis jeg bruger metoden foroven,udskriver den både brugernavn,password og det sidste gentagpwd jeg indtaster, til db, ellers skriver den ikke noget til db.

Hvad kunne jeg gøre for at få db til at acceptere det ?

forresten jeg har begge tabeller (person og persongentagpwd), som du har beskrevet foroven ?
Avatar billede touel Nybegynder
09. oktober 2008 - 22:13 #24
jeg får også fejl vedr ix feltet.

Field 'ix' doesn't have a default value.
Avatar billede arne_v Ekspert
10. oktober 2008 - 04:09 #25
Koden 18:50:13 indeholder ingen database kald overhovedet ????
Avatar billede touel Nybegynder
10. oktober 2008 - 20:27 #26
Her er klassen som opretter forb til db :

import java.sql.*;
import java.util.*;

public class database {
   
    static String navn;
    static String pwd;
    static String arraylist;
   
    public database() {};
   
    public database(String n,String pwd, String arrlist){
        super();
        this.navn = n;
        this.pwd = pwd;
        this.arraylist = arrlist;
       
        final String temp="";
        Connection forb;
        String url="";
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            url ="jdbc:mysql://localhost:3306/passwordtest";
           
            forb =DriverManager.getConnection(url,"root", "fesout");
            System.out.println("Følgend data indsættes: "  +" "+ navn +" " +pwd +" "+ arraylist);
            Statement stmt = forb.createStatement();
            stmt.executeUpdate("insert into person(brugernavn,password,gentagpwd)" +
                    " values('"+navn+"','"+pwd+"'"
                    + ",'"+arraylist+"')");
            stmt.executeUpdate("insert into persongentagpwd(gentagpwd)" + "values('"+arraylist+"')");
        }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
        catch(ClassNotFoundException e)
        {
            System.out.println(e.getMessage());
        }
        System.out.println("URL " + url);
       
    }
   
    public static void main(String[] arg) throws Exception
      {       
        database db = new database(navn,pwd,arraylist);       
      }
}
       

     
   
   
   


   

den sidste parameter som jeg sender til db er som sagt metoden foroven... Enten skal jeg lave den om, så min db accepterer alle 30 inputs, eller også må jeg lave mine tabellers struktur om, men det tror jeg ikke jeg skal, siden du selv har anbefalet hvordan de skulle se ud
Avatar billede touel Nybegynder
10. oktober 2008 - 20:30 #27
database db = new database (pwd.getBrugerNavn(pwd.temp1),pwd.getPassword(pwd.temp2),getArrayList());

denne linie er med i samme klasse hvor metoden getArrayList() også er.
Avatar billede touel Nybegynder
11. oktober 2008 - 00:04 #28
jeg tror ikke problemet lægger i java koden men mere i tabellen hvor jeg har kolonne ix. Den tæller ikk op og der blir heller ikke skrevet noget i tabel persongentagpwd.
Avatar billede touel Nybegynder
11. oktober 2008 - 01:34 #29
i tabel persongentagpwd kan jeg kun sætte personid til auto_increment og ikke ix.(man må kun sætte en). Er det derfor ix ikke tæller op til 30 ?
Avatar billede arne_v Ekspert
11. oktober 2008 - 03:32 #30
Du bruger tabellerne forkert.

Jeg antager at følgende tabeller er oprettet:

CREATE TABLE person (personid INT AUTO_INCREMENT PRIMARY KEY, navn VARCHAR(50))

CREATE TABLE persongentagpwd (personid INT NOT NULL, ix INT NOT NULL, gentagpwd VARCHAR(20), PRIMARY KEY(personid,ix))

og så indsætter du med:

INSERT INTO person(navn) VALUES('Anders And');
INSERT INTO persongentagpwd VALUES(LAST_INSERT_ID(), 1, 'Dette er Anders And nummer 1');
...
INSERT INTO persongentagpwd VALUES(LAST_INSERT_ID(), 30, 'Dette er Anders And nummer 30');
INSERT INTO person(navn) VALUES('Onkel Joakim');
INSERT INTO persongentagpwd VALUES(LAST_INSERT_ID(), 1, 'Dette er Onkel Joakim nummer 1');
...
INSERT INTO persongentagpwd VALUES(LAST_INSERT_ID(), 30, 'Dette er Onkel Joakim nummer 30');
Avatar billede touel Nybegynder
11. oktober 2008 - 14:30 #31
stadig ingen fremskridt...

jeg poster de to klasser som volder mig de her prob:

import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.beans.XMLEncoder;
import java.util.*;
import java.util.Iterator;
import javax.swing.*;

public class IterationGUI extends JFrame implements ActionListener {
   
    public JFrame frame;
    public JPanel p1,p2,p3;
    public JTextField [] felt = new JTextField [30];
    public JTextField output;
    public static String temp;
    static database db;
    private static ArrayList gemstr = new ArrayList();
    static pwdtest pwd;
    static IterationGUI gui;
   
    public IterationGUI(String str){
        frame = new JFrame("Gentag Password");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
        output = new JTextField ();
        output.setSize(0,20);
        add(output,BorderLayout.NORTH);
        this.temp = str.toString();
        output.setText(temp);
        p1 = new JPanel();
        p1.setLayout(new GridLayout(10,2));
        add(p1,BorderLayout.WEST);
        p2 = new JPanel();
        p2.setLayout(new GridLayout(10,2));
        add(p2,BorderLayout.CENTER);
        p3 = new JPanel();
        p3.setLayout(new GridLayout(10,2));
        add(p3,BorderLayout.EAST);   
        for(int i = 0; i < 10; i++) {
            felt[i] = new JTextField(10);
            p1.add(new JLabel("felt" + i + ": "));
            p1.add(felt[i]);
            felt[i].addActionListener(this);
           
        }           
        for(int i = 10; i < 20; i++) {
            felt[i] = new JTextField(10);
            p2.add(new JLabel("felt" + i + ": "));
            p2.add(felt[i]);
            felt[i].addActionListener(this);
        }
           
            for(int i = 20; i < 30; i++) {
            felt[i] = new JTextField(10);
            p3.add(new JLabel("felt" + i + ": "));
            p3.add(felt[i]);
            felt[i].addActionListener(this);
        }
         
        pack();
        setVisible(true);
    }
      //Action Handler
    public void actionPerformed(ActionEvent e){
   
        gemstr.add(e.getActionCommand());
        ((JTextField)e.getSource()).transferFocus();
       
        if(gemstr.size()==30)
        {
            String bsk = "Tak for samarbejdet - Dine data gemmes i XML fil";
            JOptionPane.showMessageDialog(null,bsk);

            pwdtest pwd = new pwdtest();
            database db = new database (pwd.getBrugerNavn(pwd.temp1),pwd.getPassword(pwd.temp2),getArrayList());
            XmlHelper help = new XmlHelper(pwd.getBrugerNavn(pwd.temp1),pwd.getPassword(pwd.temp2),getArrayList());
            XMLEncoder xe = new XMLEncoder(System.out);
            xe.writeObject(help);
            xe.flush();
            System.exit(0);
        }
       
    }
               
/*    public Object [] getArrayList(){

        String [] str=new String[30];
        int n=0;
       
        Object [] list= gemstr.toArray();
       
        for(int i=0;i<gemstr.size();i++)
        {
            System.out.println("temp inholder: " + gemstr.get(i));
            db.add(gemstr.get(i));
       
        }

        return list;
    }*/

/*    public ArrayList getArrayList(){

        String str="";
        Object [] list= gemstr.toArray();
   
        for(int i=0;i<list.length;i++)
        {
            System.out.println("temp inholder: " + list[i]);
            str=(String)list[i];
        }
        return gemstr;
    }*/
       
    public String getArrayList(){
       
        String [] strarr = new String[30];
        Object [] list= gemstr.toArray();       
       
        for(int i=0;i<strarr.length;i++)
        {
            for(int j=0;j<gemstr.size();j++)
            {
                System.out.println("temp indeholder: " + gemstr.get(j));
                if(gemstr.size()==30)
                {
                    strarr[i]=(String)gemstr.get(j);
                   
                }
            }
            return strarr[i];

           
        }
        return "";
    }
   
    public static void main(String [] args){
   
        IterationGUI gui = new IterationGUI (temp);
       
    }
}
           
                   
og database klassen:

import java.sql.*;
import java.util.*;

public class database {
   
    static String navn;
    static String pwd;
    static String  arraylist;
    static ArrayList info;
   
    public database() {};
   
    public database(String n,String pwd, String  arrlist){
        super();
        this.navn = n;
        this.pwd = pwd;
        this.arraylist = arrlist;
       
        final String temp="";
        Connection forb;
        String url="";
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            url ="jdbc:mysql://localhost:3306/passwordtest";
           
            forb =DriverManager.getConnection(url,"root", "fesout");
            System.out.println("Følgende data indsættes: "  +" "+ navn +" " +pwd +" "+ arraylist);
           
            Statement stmt = forb.createStatement();
            stmt.executeUpdate("insert into person(brugernavn,password)" +
                    " values('"+navn+"','"+pwd+"'"
                    + ")");
            stmt.executeUpdate("insert into persongentagpwd(gentagpwd)" + "values('"+arraylist+"')");
        }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
        catch(ClassNotFoundException e)
        {
            System.out.println(e.getMessage());
        }
        System.out.println("URL " + url);
       
    }
   
    static Object add(ArrayList data)
    {
        info=data;
        return info;
    }
   
    public static void main(String[] arg) throws Exception
      {       
        database db = new database(navn,pwd,arraylist);       
      }
}
       

     
   
   
   


   

mine to tabeller i mysql er som du har skrevet foroven
Avatar billede touel Nybegynder
12. oktober 2008 - 00:53 #32
:0)

ok arne - status pt er at jeg nu er i stand til at skrive ud til begge tabeller, og det er jo HERRELIGT.... Jeg brugte dit sidste svar som inspiration og under min db klasse gjorde følgende:

Statement stmt = forb.createStatement();
            stmt.executeUpdate("insert into person(brugernavn,password)" +
                    " values('"+navn+"','"+pwd+"'"
                    + ")");
            for(int i=0;i<arraylist.size();i++)
            stmt.executeUpdate("insert into persongentagpwd(ix,gentagpwd)" + "values('"+i+"','"+arraylist.get(i)+"')");

Det er jo fint....

men det eneste lille nage jeg har nu, er at begge personid prim keys ikke samarbejder.

i persongentagpwd starter personid med 1 og fortsætter til 30. Anden gang jeg indtaster data 30 gange, starter den fra 31 og fortsætter til 60 etc....

Meningen er vel at hvis jeg i min første kolonne i person opretter en person med personid 1, så burde der stå 1 de første 30 gange, og anden gang jeg opretter en person, burde der stå 2 tal hele vejen igennem...
Avatar billede arne_v Ekspert
13. oktober 2008 - 22:24 #33
for(int i=0;i<arraylist.size();i++)
            stmt.executeUpdate("insert into persongentagpwd(personid,ix,gentagpwd)" + "values(last_insert_id(),"+i+",'"+arraylist.get(i)+"')");

Når du er indsætter først person med id 1137 så undsætter du nu 30 rækker med:

1137,1,'bla bla'
1137,2,'noget andre'
...
1137,30,'sidste'

og ix starter forfra for hver person.
Avatar billede touel Nybegynder
13. oktober 2008 - 22:59 #34
yes det virker :0) er mega glad nu.. har brugt flere dage med db delen og endelig virker det - og jeg har igen fået genopfrisket db delen... det er drøn irriterende at man glemmer hvordan tingene skal laves, hvis der går lang tid og man ikk giver det tid.

anywayz - arne, jeg vil gerne give dig ekstra point for al din hjælp her.. du har virkelig været tålmodig med at hjælpe mig igennem... når du har accepteret svaret her, laver jeg nyt spg herinde hvor jeg skriver "Til arne".
Avatar billede arne_v Ekspert
13. oktober 2008 - 23:15 #35
svar

(du kan vistnok justere point i et eksisterende spørgsmål under en "avanceret" mulighed)
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