Strona 1 z 1

[java] Jak sprawdzić ostatni insert do tabeli MySQL?

: 09 lut 2012, 17:16
autor: tommmmmm
WItam,

Jest problem następującej treści:
Jest sobie Master/Detail Sample Form (ach kochany Netbeans), który działa. Yeah. No i on insertuje do tabeli. Bezbłędnie. Problem pojawia się, gdy chce uzyskać co było tak na prawdę insertowane.
Jest kolumna w tabeli która jest auto_increment (i przy okazji ID) więc chciałbym się dowiedzieć co to za id. Wygooglałem funkcję select insert_lastID() ale ona nie działa. Nie działa, bo gdy connection jest closed to value się traci - tyle że w Master/Detail Sample Form nie ma typowej struktury tak jak np w http://www.devdaily.com/java/edu/JDBC-S ... mple.shtml

No i generalnie ponieważ Netbeansowy kod jest totalnie czarną magią i obscure to nie wiem jak się zabrać do tego. Jak zdobyć to ID ? Mógłbym na pałe zrobić select MAX(ID) ale to jest nieeleganckie no i nie zawsze największe ID będzie ostatnim (bo np. jak był delete i była dziura i teraz tą dziurę się zapełnia to ostatnie id wcale nie jest największe)

Jak z tego wybrnąć?

Re: [java] Jak sprawdzić ostatni insert do tabeli MySQL?

: 09 lut 2012, 17:21
autor: ethanak
Od kiedy to auto_increment zapycha dziury?
Poza tym jeśli masz tego typu problem, to znaczy że aplikacja jest do kwiatka hortensja.

BTW zdecyduj się, albo column, albo kolumna. Słowo "columna" nie istnieje.

Re: [java] Jak sprawdzić ostatni insert do tabeli MySQL?

: 09 lut 2012, 17:37
autor: tommmmmm
k, jest kolumna. Ach Ci puryści......

kwiatka hortensja?

ps: jakby kod był normalny (np taki jak przedstawiłem w linku) to już dawno bym sobie poradził.

Kod: Zaznacz cały

        entityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("UCNGPU").createEntityManager();
        query = java.beans.Beans.isDesignTime() ? null : entityManager.createQuery("SELECT r FROM ResourceClassification r");
        list = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(query.getResultList());
       org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, list, masterTable);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${id}"));
 org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.id}"), idField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
Nie to nie jest czytelne. Wcale a wcale.

Ale to już jak na dłoni ->

Kod: Zaznacz cały

import java.sql.*;

public class BasicJDBCDemo
{
  Connection conn;

  public static void main(String[] args)
  {
    new BasicJDBCDemo();
  }
 
  public BasicJDBCDemo()
  {
    try
    {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      String url = "jdbc:mysql://localhost/coffeebreak";
      conn = DriverManager.getConnection(url, "username", "password");
      doTests();
      conn.close();
    }
    catch (ClassNotFoundException ex) {System.err.println(ex.getMessage());}
    catch (IllegalAccessException ex) {System.err.println(ex.getMessage());}
    catch (InstantiationException ex) {System.err.println(ex.getMessage());}
    catch (SQLException ex)           {System.err.println(ex.getMessage());}
  }

  private void doTests()
  {
    doSelectTest();

    doInsertTest();  doSelectTest();
    doUpdateTest();  doSelectTest();
    doDeleteTest();  doSelectTest();
  }

  private void doSelectTest()
  {
    System.out.println("[OUTPUT FROM SELECT]");
    String query = "SELECT COF_NAME, PRICE FROM COFFEES";
    try
    {
      Statement st = conn.createStatement();
      ResultSet rs = st.executeQuery(query);
      while (rs.next())
      {
        String s = rs.getString("COF_NAME");
        float n = rs.getFloat("PRICE");
        System.out.println(s + "   " + n);
      }
    }
    catch (SQLException ex)
    {
      System.err.println(ex.getMessage());
    }
  }

  private void doInsertTest()
  {
    System.out.print("\n[Performing INSERT] ... ");
    try
    {
      Statement st = conn.createStatement();
      st.executeUpdate("INSERT INTO COFFEES " +
                       "VALUES ('BREAKFAST BLEND', 200, 7.99, 0, 0)");
    }
    catch (SQLException ex)
    {
      System.err.println(ex.getMessage());
    }
  }

  private void doUpdateTest()
  {
    System.out.print("\n[Performing UPDATE] ... ");
    try
    {
      Statement st = conn.createStatement();
      st.executeUpdate("UPDATE COFFEES SET PRICE=4.99 WHERE COF_NAME='BREAKFAST BLEND'");
    }
    catch (SQLException ex)
    {
      System.err.println(ex.getMessage());
    }
  }

  private void doDeleteTest()
  {
    System.out.print("\n[Performing DELETE] ... ");
    try
    {
      Statement st = conn.createStatement();
      st.executeUpdate("DELETE FROM COFFEES WHERE COF_NAME='BREAKFAST BLEND'");
    }
    catch (SQLException ex)
    {
      System.err.println(ex.getMessage());
    }
  }
}
Netbeans po prostu zmyśla sobie jakieś niestworzone rzeczy, tylko po to aby komplikować sytuację i za wszelką cenę unikać prostych i eleganckich rozwiązań...