vagg77 Δημοσ. 4 Αυγούστου 2014 Δημοσ. 4 Αυγούστου 2014 Καλησπερα. Μηπως υπαρχει κανενας τροπος να ψαξω μεσα απο κωδικα JDBC αν υπαρχει ενα string σε μια MySQL DB ωστε να παρω το id στη θεση αυτη? Ουσιαστικα αυτο που θελω να κανω ειναι να εχω ενα κουμπι σε ενα πανελ "Update Name" το οποιο θα αλλαζει το ονομα καποιου entry. Εχω ομως θεμα στην συνταξη του.Επειδη ο χρηστης θα δινει το παλιο string και το ονομα του νεου string, δεν θα ξερει το id, οποτε αναγκαστικα σκεφτηκα αυτο: String name = "UPDATE consoles SET name = ? WHERE name = ?"; Αμα ξερω ομως σε πια θεση ειναι το παλιο ονομα, μπορω να παρω τo id στη θεση αυτη και να κανω το : String name = "UPDATE consoles SET name = ? WHERE id = ?"; Ο υπολοιπος κωδικας παει καπως ετσι try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test1?user=me&password=12345"); String name = "UPDATE consoles SET name = ? WHERE name = ?"; PreparedStatement psname = conn.prepareStatement(name); String strin = JOptionPane.showInputDialog(null,"Previous Name : "); String strout = JOptionPane.showInputDialog(null,"New Name : "); psname.setString(1,strin); psname.setString(2,strout); psname.executeUpdate(); Statement stmtname = conn.createStatement(); ResultSet rsname = stmtname.executeQuery("SELECT * FROM consoles INNER JOIN hardware ON consoles.id=hardware.id"); ResultSetMetaData mdname = rsname.getMetaData(); int columnCount = mdname.getColumnCount(); String[] colsname = new String[columnCount]; for (i=1;i<= columnCount;i++) { colsname[i-1] = mdname.getColumnName(i); } DefaultTableModel model = new DefaultTableModel(colsname,0); while (rsname.next()) { Object[] rowname = new Object[columnCount]; for (i = 1 ; i <= columnCount ; i++) { rowname[i-1] = rsname.getObject(i); } model.addRow(rowname); } JTable table = new JTable(model); model.fireTableDataChanged(); table.setCellSelectionEnabled(true); table.setColumnSelectionAllowed(true); table.setFillsViewportHeight(true); table.setSurrendersFocusOnKeystroke(true); table.setBounds(218,59,529,360); frame.getContentPane().add(table); model.fireTableDataChanged(); conn.close(); stmtname.close(); rsname.close(); psname.close(); } catch (SQLException case1) { case1.printStackTrace(); } catch (Exception case2) { case2.printStackTrace();} } }); Mεχρι τωρα, ο κωδικας αυτο δεν αλλαζει τα στοιχεια στην DB. Δεν πιστευω οτι ειναι θεμα δημιουργιας του κωδικα για το JTable γιατι ο ιδιος κωδικας δουλεψε αλλες 2 φορες για την κατασκευη του JTable. Οποτε η δηλωση της mySQL στην αρχη θα πρεπει να ειναι το θεμα.
mad-proffessor Δημοσ. 4 Αυγούστου 2014 Δημοσ. 4 Αυγούστου 2014 Δες στο 1 sql statement να κανεις select με like
vagg77 Δημοσ. 4 Αυγούστου 2014 Μέλος Δημοσ. 4 Αυγούστου 2014 Δεν επιασε String name = "UPDATE consoles SET name = ? WHERE name LIKE ?"; psname = conn.prepareStatement(name); String strin = JOptionPane.showInputDialog(null,"Previous Name : "); String strout = JOptionPane.showInputDialog(null,"New Name : "); psname.setString(1,strin); psname.setString(2,"%" +strout+ "%"); psname.executeUpdate();
mad-proffessor Δημοσ. 4 Αυγούστου 2014 Δημοσ. 4 Αυγούστου 2014 Πρωτα Select id from consoles where name = ? Or name like ? και μετα update
vagg77 Δημοσ. 4 Αυγούστου 2014 Μέλος Δημοσ. 4 Αυγούστου 2014 Πρωτα Select id from consoles where name = ? Or name like ? και μετα update Οκ αλλα μετα πες θα εχω 2 strings( 1 το SELECT_FROM και ακριβως απο κατω το αλλο με το UPDATE_SET_WHERE). Εγω πιο θα χρησιμοποιω στο PreparedStatement?? Πρεπει να κανω και 2ο PreparedStatement?? Το id που θα κανει SELECT θα το αφηνω ετσι η πρεπει να βαζω και αλλα πραγματακια μετα?? Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test1?user=me&password=12345"); String name_1 = "SELECT id FROM consoles WHERE name LIKE ? "; String name = "UPDATE consoles SET name = ? WHERE name LIKE ?"; PreparedStatement psname = conn.prepareStatement(name); PreparedStatement psname_1 = conn.prepareStatement(name_1); String strin = JOptionPane.showInputDialog(null,"Previous Name : "); String strout = JOptionPane.showInputDialog(null,"New Name : "); psname.setString(1,strin); psname.setString(2,"%" +strout+ "%"); psname_1.setString(1,"%"+strin+"%"); psname.executeUpdate(); psname_1.executeUpdate();
mad-proffessor Δημοσ. 4 Αυγούστου 2014 Δημοσ. 4 Αυγούστου 2014 Θα κανεις update με το id θα χρειαστει πρωτα να ελεγχεις οτι επιστρεφει ενα id το query Και μετα update t set n=? Where id=?.Συνολο 3 queries οχι βελτιστο αλλα σιγουρα ελεγχει για λαθη εισοδου απο το χρηστη κ αν υπαρχει εγγραφη στη βαση.Αφου ξεκινησες με prepared statements ολα ετσι θα τα κανεις 1
Papakaliati Δημοσ. 4 Αυγούστου 2014 Δημοσ. 4 Αυγούστου 2014 UPDATE consoles SET name = ? WHERE IF ( (SELECT ID FROM CONSOLE Where id = ? ) Is not null , id , name like ?) Γιατι τρια queries δεν καταλαβαινω. Το syntax λογικα θα εχει κανενα λαθακι πιθανος, δεν εχω sql available τωρα και δεν εχει και σημασια βασικα. Αν εχω καταλαβει καλα τι θελεις. Αμα δεν πλασαρεις id πολυ απλα δουλευει με το name, αν και προφανος να δουλευεις μονο με μια στηλη ειναι προβληματικο για συνονυμιες, οπως και το να δουλευεις με πολλες ειναι επισης επικινδυνο σε περιπτωσεις πχ που το μικρο ειναι γραμμενο κωστας η κωνσταντινος.
vagg77 Δημοσ. 4 Αυγούστου 2014 Μέλος Δημοσ. 4 Αυγούστου 2014 Για να μην χρειαζεται να ειναι ανοικτο το θεμα, θα ποσταρω την απαντηση. Ρωτησα στο StackOverflow και παρατηρησαν οτι εκανα ακριβως το αντιθετο με τα strin και strout(τα ειχα αναποδα) try { conn = DriverManager.getConnection("jdbc:mysql://localhost/test1?user=me&password=12345"); String name = "UPDATE consoles SET name = ? WHERE name LIKE ?"; psname = conn.prepareStatement(name); String strin = JOptionPane.showInputDialog(null,"Previous Name : "); String strout = JOptionPane.showInputDialog(null,"New Name : "); psname.setString(1,strout); psname.setString(2,"%" +strin+ "%"); psname.executeUpdate(); stmtname = conn.createStatement(); rsname = stmtname.executeQuery("SELECT * FROM consoles INNER JOIN hardware ON consoles.id=hardware.id"); mdname = rsname.getMetaData(); columnCount = mdname.getColumnCount(); String[] colsname = new String[columnCount]; for (i=1;i<= columnCount;i++) { colsname[i-1] = mdname.getColumnName(i); } model = new DefaultTableModel(colsname,0); while (rsname.next()) { Object[] rowname = new Object[columnCount]; for (i = 1 ; i <= columnCount ; i++) { rowname[i-1] = rsname.getObject(i); } model.addRow(rowname); } table = new JTable(model); model.fireTableDataChanged(); table.setCellSelectionEnabled(true); table.setColumnSelectionAllowed(true); table.setFillsViewportHeight(true); table.setSurrendersFocusOnKeystroke(true); table.setBounds(146,59,763,360); frame.getContentPane().add(table); model.fireTableDataChanged(); conn.close(); stmtname.close(); rsname.close(); psname.close(); } catch (SQLException case1) { case1.printStackTrace(); } catch (Exception case2) { case2.printStackTrace();} } });
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα