Avatar billede romanov Nybegynder
07. juli 2004 - 10:30 Der er 15 kommentarer og
1 løsning

JBuilder9 i samarbejde med DataBase(Billeder)

Hej jeg kan godt skriv og hen data fra min database filen. Men problemet kommer der hvor jeg også vil kunne hente Billede fra database og self. lægge ind i databasse. Her er min problem. Håber det nedstående vil hjelpe.
----------------------------------------------------------------
  protected  Object  convertToObject (ResultSet resultSet)
  {
    try
    {
      Person person = new Person ( resultSet.getInt("Id"),
                                                  resultSet.getString("Navn"),
resultSet.getString("CPR"),
                                                  resultSet.getImage("B")//<----Det kan man ikkeGetImage!!!!
                                                  );
      return (person);
    }
    catch (SQLException e)
    {
      System.out.println("Fejl ved convertToObject fra "+table);
      return (null);
    }
  }

Skriv evt. til Roma_V_B@hotmail.com
Tak på forhånd.
//Romanov
Avatar billede arne_v Ekspert
07. juli 2004 - 10:35 #1
Jeg har gode erfaringer med MySQL og setBytes/getBytes.

Ellers er der jo altid setBlob/getBlob.
Avatar billede arne_v Ekspert
07. juli 2004 - 10:35 #2
Eksempel:

CREATE TABLE blobtest (
  ID INTEGER NULL,
  Picture BLOB NULL
);

import java.io.*;
import java.sql.*;

public class BlobTest {
  public static void main(String[] args) throws Exception {
      byte[] b = new byte[(int)(new File("C:\\elogo.png")).length()];
      InputStream is = new FileInputStream("C:\\elogo.png");
      is.read(b);
      is.close();
      Class.forName("com.mysql.jdbc.Driver");
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost/Test", "", "");
      PreparedStatement ins = con.prepareStatement("INSERT INTO BlobTest VALUES (?,?)");
      ins.setInt(1, 123);
      ins.setBytes(2, b);
      ins.executeUpdate();
      PreparedStatement sel = con.prepareStatement("SELECT Picture FROM BlobTest WHERE ID=?");
      sel.setInt(1, 123);
      ResultSet rs = sel.executeQuery();
      rs.next();
      byte[] b2 = rs.getBytes(1);
      con.close();
      OutputStream os = new FileOutputStream("C:\\elogo2.png");
      os.write(b2);
      os.close();
  }
}
Avatar billede romanov Nybegynder
07. juli 2004 - 10:37 #3
Ser lige på det ;)
Avatar billede arne_v Ekspert
07. juli 2004 - 10:41 #4
Jeg ligger lige et svar - just in case
Avatar billede romanov Nybegynder
07. juli 2004 - 10:48 #5
Arne...Prøv se det her
import java.util.Iterator;
import java.sql.Timestamp;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Blob;

public class Person {

  public int id;
  public String navn;
  public String cpr;
  public String adresse;
  public String by;
  public String tellefon;
  public String email;
  public String sidstUpDato;
  public String beskrivelse;
  public Blob b;


  public Person(int id, String navn, String cpr, String adresse,
                String by, String tellefon, String email, String sidstUpDato,
                String beskrivelse,Blob b) {
    this.id = id;
    this.navn = navn;
    this.cpr = cpr;
    this.adresse = adresse;
    this.by = by;
    this.email = email;
    this.tellefon = tellefon;
    this.email = email;
    this.sidstUpDato = sidstUpDato;
    this.beskrivelse = beskrivelse;
    this.b=b;
  }


  public Person(int id, String navn, String cpr, String adresse,
                String by, String tellefon, String email,
                String beskrivelse,Blob b) {

    this.id = id;
    this.navn = navn;
    this.cpr = cpr;
    this.adresse = adresse;
    this.by = by;
    this.email = email;
    this.tellefon = tellefon;
    this.email = email;
    this.beskrivelse = beskrivelse;
    this.b=b;


  }

  public int getId() {
    return id;
  }

  public String getNavn() {
    return navn;
  }

  public String getCPR() {
    return cpr;
  }

  public String getAdresse() {
    return adresse;
  }

  public String getBy() {
    return by;
  }

  public String getTellefon() {
    return tellefon;
  }

  public String getEmail() {
    return email;
  }

  public String getCpr() {
    return cpr;
  }

  public String getsidstUpDato() {
    return sidstUpDato;
  }

  public String getBeskrivelse(){
    return beskrivelse;
  }


  public Blob getBillede(){
    return b;
  }

  public String toString() {
    return "Personnens nr: " + getId() + " - " +
        "Navn: " + getNavn()+"\n";
  }

  private  static  PersonAdministrator  getPersonAdministrator(){
    return (PersistensAdministrator.getPersonAdministrator());}

  public void retStamdata(String navn, String cpr, String adresse,
                          String by, String tellefon, String email,
                          String sidstUpDato, String beskrivelse, Blob b) {


  this.navn = navn;
  this.cpr = cpr;
  this.adresse = adresse;
  this.by = by;
  this.email = email;
  this.tellefon = tellefon;
  this.email = email;
  this.sidstUpDato = sidstUpDato;
  this.beskrivelse = beskrivelse;
  this.b=b;



  PersonAdministrator personAdministrator = getPersonAdministrator();
  personAdministrator.replace(this);
}

}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Det er min person beskrivelse
////////////////////////////////////////////////////////////////////////////////
Her kommer PersonAdmistrator
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

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



public class PersonAdministrator  extends DBObjectAdministrator
{
  private  int  lastKey  = 0;
  public  PersonAdministrator (DBAdministrator    dbAdministrator,
                              String table)
  {
    super (dbAdministrator, table, "Id","SELECT * FROM "+table);
    lastKey = getLastKey();
  }


  public  Object  get (int key, int key2)
  {
    System.out.println("Fejl: der skal anvendes metode med eet nøglerfelt");
    throw new UnsupportedOperationException();
  }


  public  boolean  contains ( Object object )
  {
    Person  person = (Person)object;
    return get(person.getId()) != null;
  }


  public  boolean  add ( Object object )
  {
  Person  person = (Person)object;

    String sql  = "INSERT INTO "+table
                + " ("
                + "  [Id]"
                + "  ,[Navn]"
                + "  ,[CPR]"
                + "  ,[Adresse]"
                + "  ,[By]"
                + "  ,[Tellefon]"
                + "  ,[Email]"
                + "  ,[sidstUpDato]"
                + "  ,[Beskrivelse]"
                + "  ,[B]"
                + " ) VALUES "
                + " ("
                + "  "  +person.getId()      +""
                + ", '"  +person.getNavn()      +"'"
                + ", '"  +person.getCPR()      +"'"
                + ", '"  +person.getAdresse()      +"'"
                + ", '"  +person.getBy()      +"'"
                + ", '"  +person.getTellefon()      +"'"
                + ", '"  +person.getEmail()      +"'"
                + ", '"  +person.getsidstUpDato()    +"'"
                + ", '"  +person.getBeskrivelse()    +"'"
                + ", '"  +person.getBillede()    +"'"
                + " )";


    return ( executeUpdate (sql) );
  }



  public  boolean  remove ( Object object )
  {
  Person  person = (Person)object;
    String sql  = "DELETE * FROM "+table
                + " WHERE [Id]="  +person.getId()    +""
                ;
    return ( executeUpdate (sql) );
  }


  protected  Object  convertToObject (ResultSet resultSet)
  {
    try
    {
      Person person = new Person ( resultSet.getInt("Id"),
                                                  resultSet.getString("Navn"),
                                                  resultSet.getString("CPR"),
                                                  resultSet.getString("Adresse"),
                                                  resultSet.getString("By"),
                                                  resultSet.getString("Tellefon"),
                                                  resultSet.getString("Email"),
                                                  resultSet.getString("sidstUpDato"),
                                                  resultSet.getString("Beskrivelse"),
                                                  resultSet.getBlob("B")
                                                  );
      return (person);
    }
    catch (SQLException e)
    {
      System.out.println("Fejl ved convertToObject fra "+table);
      return (null);
    }
  }
  public  boolean  replace ( Object object )
  {
    Person  person = (Person)object;

    String sql  = "UPDATE "+table+" SET"
                + " [Navn]='"  +person.getNavn()    +"'"
                + ", [CPR]='"  +person.getCPR()    +"'"
                + ", [Adresse]='"  +person.getAdresse()    +"'"
                + ", [By]='"  +person.getBy()    +"'"
                + ", [Tellefon]='"  +person.getTellefon()    +"'"
                + ", [Email]='"  +person.getEmail()    +"'"
                + ", [sidstUpDato]='"  +person.getsidstUpDato()  +"'"
              + ", [Beskrivelse]='"  +person.getBeskrivelse()  +"'"
                + ", [B]='"  +person.getBillede()  +"'"
              + " WHERE [Id]="  +person.getId()    +""
                ;
    return ( executeUpdate (sql) );
  }


  public Person NYPerson(
      String navn, String cpr, String adresse,String by, String tellefon, String email, String sidstUpDato,String Beskrivelse,Blob B) {
    ++lastKey;
    Person person = new Person ( lastKey, navn, cpr , adresse, by, tellefon, email, sidstUpDato,Beskrivelse,B );
    return (person);
  }

}
Avatar billede romanov Nybegynder
07. juli 2004 - 10:52 #6
void Findperson_actionPerformed(ActionEvent e ) {
    CLS();
    String HentPerson = JOptionPane.showInputDialog(null, "");
    if (HentPerson == null) {
    return;
    }
    else if(HentPerson.equals(""))    {
    return;
    }
    int x = Integer.parseInt(HentPerson);
    Person person = GlobalModel.getObserverSystem().getPerson(x);
    if (person == null){
    JOptionPane.showMessageDialog(null, "Ingen personer blev fundet i systemet med denne nr. ","", 0);
    return;
    }else
      ID.setText("" + HentPerson);
      Navn.setText("" + GlobalModel.getObserverSystem().getPerson(x).getNavn());
      CPR.setText("" + GlobalModel.getObserverSystem().getPerson(x).getCpr());
      Adresse.setText("" +
                      GlobalModel.getObserverSystem().getPerson(x).getAdresse());
      By.setText("" + GlobalModel.getObserverSystem().getPerson(x).getBy());
      Tellefon.setText("" +
                      GlobalModel.getObserverSystem().getPerson(x).getTellefon());
      EMail.setText("" + GlobalModel.getObserverSystem().getPerson(x).getEmail());
      Beskrivelse.setText("" +
                          GlobalModel.getObserverSystem().getPerson(x).getBeskrivelse());
      UpdDato.setText("" +
                      GlobalModel.getObserverSystem().getPerson(x).getsidstUpDato());
   

  Billede.setIcon(GlobalModel.getObserverSystem().getPerson(x).getBillede());
//Det her er så når jeg henter det fra DB. Jeg ved det ik helt...
//(Billede er et lable)
    }
Avatar billede arne_v Ekspert
07. juli 2004 - 11:05 #7
Hvad er spørgsmålet ?
Avatar billede romanov Nybegynder
07. juli 2004 - 11:09 #8
At beskrive først hvordan Objekt(Person) skal se ud derefter hente den fra databasen.
Resten virker fint,,,men billede kan jeg ikke finde ud af det(resultSet.GETHVAD)
//Romanov
Avatar billede arne_v Ekspert
07. juli 2004 - 11:13 #9
Du gemmer billede i databasen, du henter et byte array ud af result set med
getBytes, du viser billedet ved at bruge ImageIcon constructor med byte[]
som argument.
Avatar billede arne_v Ekspert
07. juli 2004 - 11:14 #10
Jeg ville lade Person indeholde byte[] og ikke ImageIcon (og først
konvertere til ImageIcon når det skal vises. Fordi ellers er der problemer
med gem af billede.
Avatar billede romanov Nybegynder
07. juli 2004 - 11:33 #11
Ev Ev
Fejl ved convertToObject fra QPerson
Men ok tak
Avatar billede arne_v Ekspert
07. juli 2004 - 11:55 #12
Hvilken fejl ?

(og hvad databaser er det ?)
Avatar billede romanov Nybegynder
07. juli 2004 - 11:58 #13
Den siger bare Fejl ved convertToObject fra QPerson
Microsoft Ac. DB.
Avatar billede arne_v Ekspert
07. juli 2004 - 12:07 #14
Kan vi få den præcise fejl tekst copy pastet ind og lige 10 linier før
og 5 .linier efter stedet ?
Avatar billede romanov Nybegynder
08. juli 2004 - 11:41 #15
Ja men Arne det er fejlen når jeg kompejler
Siger den: "Fejl ved convertToObject fra QPerson"
Ik andet.
Avatar billede arne_v Ekspert
08. juli 2004 - 21:56 #16
Ah - det er jo en fejlbesked du skriver.

Prøv og erstat:

System.out.println("Fejl ved convertToObject fra "+table);

med:

System.out.println("Fejl ved convertToObject fra " + table + ": " + e);

så vi kan hvad fejlen er.
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