ResultSet rs = stmt.executeQuery("SELECT ID "+ "FROM Medlemmer "+ "WHERE navn ='" + GUI3.jTextField3.getText () + "'");
Hvorfor virker dette ikke.. :S
ResultSet rs = stmt.executeQuery("insert into MEDLEMMER values (100, '" + GUI3.getNavn() + "', '" + GUI3.byTextField.getText () + "')");
Denne benytter jeg før og den fungerer fint.. men hvad skal jeg ændre for at få den select til at fungerer også ?
Select virker hvis jeg erstatter '" + GUI3.jTextField3.getText () + "' med fx 'hansen' ... Den skal blot tage input fra et textfelt og slå id op på det navn jeg der skriver..
den får vel ikke hentet noget ud af dit tekstfelt.. har du forskellige gui'er? siden du ikke skriver jTextField3.getText() eller this.jTextField3.getText()
æh er database-klassen jeg kalder fra.. så derfor.. men hvorfor får den ikke hentet noget så.. ? Hvordan bør jeg så gøre det.. Det fungerer jo når jeg inserter noget.. ?
Når du indsætter kalduer du GUI3.getNavn() og GUI.byTextField.getText() du må kunne se hvad der er anderledes med det tekst felt frem for det du bruger når du indsætter.. det som hedder jTextField3
Har GUI3 en reference til din database klasse? eller er det kun din database klasse som har en reference til GUI3 ? for det kan kun lade sig gøre hvis GUI3 også kender din database klasse..
Hvordan vil du gøre det javaisnice ? Har jo flere metoder i database-klassen der benytter den funktion .. ? kan du komme med et eksempel kode, altså indtaster søge-kriterie i et textfelt i gui3, som sendes til test (database), der her laver en select.. som så skal printes ud i gui3 i fx et jtable ..
Nu har jeg ikke set din kode, men det lyder som dårligt design!! når du har et ResultSet er du nødt til, at kalde rs.next() for at få den første række - derefter kalder du den igen for at få næste række. eks.:
dårligt design .. ?? Har netop fået afvide at jeg skal holde database delen væk fra gui-delen ? Jeg kan godt printe ud i database-klassen, men jeg vil jo netop gerne have det smidt ud i gui i stedet.. ?
Du kan jo bare få din databaseklasse-metode til at returnere ResultSet, og så behandle ResultSet som du vil hvis det skal være forskelligt fra gang til gang....
// Create a connection to the database String serverName = "127.0.0.1"; String portNumber = "1521"; //4500 String sid = "XE"; String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid; String username = "system"; String password = "system"; connection = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { System.out.println("Could not find the db driver"); // Could not find the database driver } catch (SQLException e) { System.out.println("Could not connect to the database"); // Could not connect to the database }
try { // Create a result set containing all data from my_table Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT ID, navn FROM Medlemmer WHERE navn ='" + GUI3.jTextField1.getText () + "'"); // '" + GUI3.jTextField3.getText () + "'
// Fetch each row from the result set while (rs.next()) { // Get the data from the row using the column index String s = rs.getString(1); System.out.println( "ID: " + rs.getString(1) + "\tNavn: " + rs.getString(2)); // Get the data from the row using the column name s = rs.getString("col_string"); // System.out.println (s); } // } catch (SQLException e) { System.out.println(e); }
altså denne funktion i en databaseklasse kalder jeg fra min gui-klasse (gui3), som så læser input fra textfield og slår op på det.. og det kan den fint printe ud i databaseklassen .. men skulle gerne have det ud i gui igen også jo .. :) håber jeg fik gjort det lidt mere klart hvad jeg laver af rod .. :)
Okay det lyder sq fornuftigt nok men lidt grøn til java endnu så skal nok bede om en hjælpende hånd .. :)
Compiling 1 source file to GUI3.java:318: cannot find symbol symbol : class ResultSet .. ( ResultSet rs = test.findMedlem(GUI3.jTextField3.getText());)
glem det .. desværre er min database blevet lukket af uransagelige årsager så vender lige tilbage når jeg har fundet ud af at få den låst op igen.. tak så vidt nu
Nej den hoster over at den mangler et return statement.. men først efter at jeg erstatter med public ResultSet findMedlem(String medlemsNavn) .. er lidt tom for ideer der.. ?
// Create a connection to the database String serverName = "127.0.0.1"; String portNumber = "1521"; //4500 String sid = "XE"; String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid; String username = "system"; String password = "system"; connection = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { System.out.println("Could not find the db driver"); // Could not find the database driver } catch (SQLException e) { System.out.println("Could not connect to the database"); // Could not connect to the database }
try { // Create a result set containing all data from my_table Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT ID, navn FROM Medlemmer WHERE navn ='"+medlemsNavn+"'"); // '" + GUI3.jTextField3.getText () + "' return rs; // // // Fetch each row from the result set // while (rs.next()) { // // Get the data from the row using the column index // String s = rs.getString(1); // System.out.println( "ID: " + rs.getString(1) + "\tNavn: " + rs.getString(2)); // // Get the data from the row using the column name // s = rs.getString("col_string"); // // System.out.println (s); // } // } catch (SQLException e) { System.out.println(e); }
// Create a connection to the database String serverName = "127.0.0.1"; String portNumber = "1521"; //4500 String sid = "XE"; String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid; String username = "system"; String password = "system"; connection = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { System.out.println("Could not find the db driver"); // Could not find the database driver } catch (SQLException e) { System.out.println("Could not connect to the database"); // Could not connect to the database }
try { // Create a result set containing all data from my_table Statement stmt = connection.createStatement(); rs = stmt.executeQuery("SELECT ID, navn FROM Medlemmer WHERE navn ='"+medlemsNavn+"'"); // '" + GUI3.jTextField3.getText () + "' return rs;
String a = rs.getString(1); String b = rs.getString(2);
str = str + a + b;
} jTextField6.setText(str); }
catch (SQLException e) { } } ------------------------- GUI3.java:336: unreported exception java.lang.Exception; must be caught or declared to be thrown
Kan du lige hjælpe med den og så komme med et svar til point :) ?
Denne læser en config fil med: oracle.jdbc.driver.OracleDriver 127.0.0.1 1521 XE system system jdbc:oracle:thin:@serverName:portNumber:" + sid
MEN alt virker indtil jeg rammer url med jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid .. det vil den ikke snuppe og kan ikke connecte til databasen .. hvordan fixer man lige den ?
hvordan kan det være jeg ikke kan benytte denne, virker fint med rs.getString(1 OG 2) .. altså hvis jeg erstatter dit kode blot med et 3'tal i GetString så virker det ikke.. :( .. der er ellers lige en extra column .. ?
glem det hehe bare mig der huskede forkert i min select ..
Nu mangler jeg sårn set kun denne detailje.. import java.awt.*; import java.io.*; import java.sql.*; import java.util.*; import javax.swing.*; import javax.swing.table.*;
public class TableFromDatabase extends JFrame { public TableFromDatabase() { Vector columnNames = new Vector(); Vector data = new Vector();
for (int i = 1; i <= columns; i++) { columnNames.addElement( md.getColumnName(i) ); }
// Get row data
while (rs.next()) { Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++) { row.addElement( rs.getObject(i) ); }
data.addElement( row ); }
rs.close(); stmt.close(); } catch(Exception e) { System.out.println( e ); }
// Create table with database data
JTable table = new JTable(data, columnNames);
JScrollPane scrollPane = new JScrollPane( table ); getContentPane().add( scrollPane );
JPanel buttonPanel = new JPanel(); getContentPane().add( buttonPanel, BorderLayout.SOUTH ); }
public static void main(String[] args) { TableFromDatabase frame = new TableFromDatabase(); frame.setDefaultCloseOperation( EXIT_ON_CLOSE ); frame.pack(); frame.setVisible(true); } }
Her kan jeg fint nok generere en jtable med alt data .. MEN hvorn får jeg ryddet op i dette mix af gui og database .. altså hvordan får jeg vist den jtable i gui3 i stedet for i database-klassen som nu .. :) ?
Det bedste design ville være, at lave en klasse, som returnerer en databaseconnection, og en DatabaseFacade klasse, som har ansvaret for, at udføre queries. I din gui kan du så nøjes med, at kalde databasefacaden...har du brug for kode eksempler??
/** Creates a new instance of DatabaseHandler */ public DatabaseFacade() { }
public ResultSet findMedlem(String medlemsId)throws SQLException{
Connection conn = DataBaseConnection.getInstance().getConnection(); Statement stat = conn.CreateStatement(); ResultSet rs = stat.executeQuery("SELECT * FROM MEDLEM WHERE MEDLEMSID='"+MEDLEMSID+"'");
/*Her kan du alternativt behandle ResultSet og istedet returnere en String eller et Medlem-objekt hvis det er nødvendigt - ideen er så, at du kalder denne metode fra din GUI3*/ return rs; }
Yep nemlig, skal vist være som du nævner til sidst.. Noget med at jeg skal lave et medlems-object.. skal jeg så have en medlems-klasse ? eller hvorn .. :s
Jep...hvis du ikke allerede har en medlems-klasse skal du lave sådan en.
Synes godt om
Ny brugerNybegynder
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.