Avatar billede nfssister Forsker
01. november 2005 - 16:54 Der er 11 kommentarer og
1 løsning

Java og database

Hej

Jeg sidder med et lille problem.... jeg har en database, den database har nogen tabeller og kolonner.... jeg skal kunne åbne den via Java (Bruger bluej så skal helst kunne åbnes i det)...

Jeg har databasen: Bondegaarden
nogen tabeller der hedder: Grise, koer, hons, heste
inde i hver tabel er der følgende kolonner:
ID, navn, kg, hojde pris.

Java programmet skal kunne:
Gemmes data
Slettes data
Opdatere data
Hente data
Hvis en tabel ikke findes skal man også kunne lave en selv

og den sidste ting, man skal kunne vælge database og tabel navne frit, altså hvis jeg også har en database der hedder lejligheden, så skal jeg også kunne hente den. Er det noget der kan lade sig gøre ? :)... for jeg er lidt lost hvad angår java og database....

vil være kanont hvis det er delt i klasser og lavet så jeg kan åbne det med BlueJ eller Jbuilder
Avatar billede arne_v Ekspert
01. november 2005 - 16:57 #1
du skal igang med JDBC !

der er en tutorial her:

http://java.sun.com/docs/books/tutorial/jdbc/basics/index.html

prøv og gå igang - og så hjælper vi når du kører fast
Avatar billede mikkelbm Nybegynder
01. november 2005 - 16:57 #2
Beder du om et færdigt program?
Avatar billede nfssister Forsker
01. november 2005 - 17:11 #3
nej ikke færdig program... bare en skabelon... nu er det ikke lige bondegårde og lejligheder jeg skal lave det med.... men jeg kan simpelthen ikke over/gennemskue det java nu... syntes alle de variabler og metoder glider helt sammen .....

men hvis folk har et eksempel på det overnævnte, så vil jeg blive mægtig glad.....

og Arne V, jeg kan godt finde ud af at connecte, og hente data ud af databasen og indsætte.... men at lave tabeller lykkedes ikke godt, og skifte mellem databaserne kludrer fuldstændig....
Avatar billede arne_v Ekspert
01. november 2005 - 17:13 #4
lave tabeller

Statement stmt = new Statement("CREATE TABLE tabelnavn (feltnavn1 type1 PRIMARY KEY, feltnavn2 type2)");
stmt.executeUpdate();

bør virke
Avatar billede arne_v Ekspert
01. november 2005 - 17:14 #5
skifte database

for mange database så angiver du database i din connection URL

for andre database kalder du:

dinconnection.setCatalog("navn");
Avatar billede nfssister Forsker
01. november 2005 - 17:16 #6
jeg har det her, det virker fint med det, det skal, men jeg vil gerne noget mere.. og jeg kan ikke rigtig få den til det..... så hvis jeg skal lave så jeg kan oprette tabel og database.. hvad skal jeg så skrive ud over det her:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.util.*;

public class Accounts extends JFrame {

  private JButton getAccountButton,
                  insertAccountButton,
                  deleteAccountButton,
                  updateAccountButton;
  private JList  accountNumberList;
  private Connection connection;
  private JTextField accountIDText,
                    usernameText,
                    passwordText,
                    tsText,
                    activeTSText;
  private JTextArea  errorText;

  public Accounts() {
    try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
    } catch (Exception  e) {
      System.err.println("Unable to find and load driver");
      System.exit(1);
    }
  }

  private void loadAccounts() {
    Vector v = new Vector();
    try {
      Statement statement = connection.createStatement();
      ResultSet rs = statement.executeQuery("SELECT kol_id FROM tabellen");

      while(rs.next()) {
        v.addElement(rs.getString("kol_id"));
      }
      rs.close();
    } catch(SQLException e) {
      displaySQLErrors(e);
    }
    accountNumberList.setListData(v);
  }

  private void buildGUI() {
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
    accountNumberList = new JList();
    loadAccounts();
    accountNumberList.setVisibleRowCount(2);
    JScrollPane accountNumberListScrollPane = new JScrollPane(accountNumberList);

    //Do Get Account Button
    getAccountButton = new JButton("Hent Data");
    getAccountButton.addActionListener (
      new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          try {
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery("SELECT * FROM tabellen WHERE kol_id = " + accountNumberList.getSelectedValue());
            if (rs.next()) {
              accountIDText.setText(rs.getString("kol_id"));
              usernameText.setText(rs.getString("username"));
              passwordText.setText(rs.getString("password"));
              tsText.setText(rs.getString("ts"));
              activeTSText.setText(rs.getString("act_ts"));
            }
          } catch(SQLException selectException) {
            displaySQLErrors(selectException);
          }
        }
      }
    );

    //Do Insert Account Button
    insertAccountButton = new JButton("Indsæt data");
    insertAccountButton.addActionListener (
      new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          try {
            Statement statement = connection.createStatement();
            int i = statement.executeUpdate("INSERT INTO tabellen VALUES(" +
              accountIDText.getText() + ", " +
              "'" + usernameText.getText() + "', " +
              "'" + passwordText.getText() + "', " +
              "0" + ", " +
              "now())");
            errorText.append("Handlinger " + i + " Data sat ind\n");
            accountNumberList.removeAll();
            loadAccounts();
          } catch(SQLException insertException) {
            displaySQLErrors(insertException);
          }
        }
      }
    );

    //Do Delete Account Button
    deleteAccountButton = new JButton("Slet data");
    deleteAccountButton.addActionListener (
      new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          try {
            Statement statement = connection.createStatement();
            int i = statement.executeUpdate("DELETE FROM tabellen WHERE kol_id = " +
              accountNumberList.getSelectedValue());
            errorText.append("handlinger " + i + " Data slettet\n");
            accountNumberList.removeAll();
            loadAccounts();
          } catch(SQLException insertException) {
            displaySQLErrors(insertException);
          }
        }
      }
    );

    //Do Update Account Button
    updateAccountButton = new JButton("Update data");
    updateAccountButton.addActionListener (
      new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          try {
            Statement statement = connection.createStatement();
            int i = statement.executeUpdate("UPDATE tabellen " +
              "SET username='" + usernameText.getText() + "', " +
              "password='" + passwordText.getText() + "', " +
              "act_ts = now() " +
              "WHERE kol_id = " + accountNumberList.getSelectedValue());
            errorText.append("Handling " + i + " Data updateret\n");
            accountNumberList.removeAll();
            loadAccounts();
          } catch(SQLException insertException) {
            displaySQLErrors(insertException);
          }
        }
      }
    );

    JPanel first = new JPanel(new GridLayout(5,1));
    first.add(accountNumberListScrollPane);
    first.add(getAccountButton);
    first.add(insertAccountButton);
    first.add(deleteAccountButton);
    first.add(updateAccountButton);

    accountIDText = new JTextField(15);
    usernameText = new JTextField(15);
    passwordText = new JTextField(15);
    tsText = new JTextField(15);
    activeTSText = new JTextField(15);
    errorText = new JTextArea(5, 15);
    errorText.setEditable(false);

    JPanel second = new JPanel();
    second.setLayout(new GridLayout(6,1));
    second.add(accountIDText);
    second.add(usernameText);
    second.add(passwordText);
    second.add(tsText);
    second.add(activeTSText);

    JPanel third = new JPanel();
    third.add(new JScrollPane(errorText));

    c.add(first);
    c.add(second);
    c.add(third);
    setSize(200,500);
    show();
  }

  public void connectToDB() {
    try {
      connection = DriverManager.getConnection(
        "jdbc:mysql://localhost/database?user=root&password=nfspower");
    } catch(SQLException connectException) {
      System.out.println(connectException.getMessage());
      System.out.println(connectException.getSQLState());
      System.out.println(connectException.getErrorCode());

    }
  }

  private void displaySQLErrors(SQLException e) {
    errorText.append("SQLException: " + e.getMessage() + "\n");
    errorText.append("SQLState:    " + e.getSQLState() + "\n");
    errorText.append("VendorError:  " + e.getErrorCode() + "\n"); 
  }

  private void init() {
    connectToDB();
  }

  public static void main(String[] args) {
    Accounts accounts = new Accounts();
 
    accounts.addWindowListener(
      new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          System.exit(0);
        }
      }
    );

    accounts.init();
    accounts.buildGUI(); 
  }
}
Avatar billede nfssister Forsker
01. november 2005 - 17:17 #7
Skal lige siges det er taget fra et eksempel i en bog jeg har købt... og det virker fint... men hvis jeg udvider går det helt galt for mig.. den nævnet hele tiden en null-pointer i BlueJ
Avatar billede arne_v Ekspert
01. november 2005 - 17:23 #8
kan du give et eksempel på hvad du retter og hvad der så ikke virker ?
Avatar billede nfssister Forsker
01. november 2005 - 17:36 #9
//Do Delete Account Button
    addtableButton = new JButton("Tilføj Tabel");
    addtableButton.addActionListener (
      new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          try {
            Statement statement = connection.createStatement();
            int i = statement.executeUpdate("create table");
            errorText.append("handlinger " + i + " Tabel tilføjet\n");
            accountNumberList.removeAll();
            loadAccounts();
          } catch(SQLException insertException) {
            displaySQLErrors(insertException);
          }
        }
      }
    );

Var noget af det jeg prøvede....
Avatar billede arne_v Ekspert
01. november 2005 - 17:46 #10
og fejlen er ?

(gerne med et stack trace)
Avatar billede nfssister Forsker
01. november 2005 - 18:04 #11
som sagt... noget med en null pointer...  stack trace ? :S mener du hvad linie den melder fejlen i ?, for det fortæller blueJ mig ikke.....
Avatar billede nfssister Forsker
06. april 2006 - 14:39 #12
lukker spørgsmål
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