Diskuze: login cez mysql
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Nevim jestli to je tim, ale zkus misto
rs = ps.executeQuery(sql);
dat jen
rs = ps.executeQuery();
ty si z stringu priprvis statement, pak ho zcnes plnit a potom das provyst znovu
novej sql (kterej uz asi nebude naplnenej).
Plus ted v dokumentaci ctu ze executeQuery(sql) by nikdy nemelo vratit null (bud Result set nebo vyjimka). Tzn jeste jednou to oddebuguj.
Returns: a ResultSet object that contains the data produced by the given query; never null
pozeram teraz triedu na spojenie s DB a tam mi to takto ide (no ale mam tam Statement nie Prepare..)
public class DBconnect {
public static Connection Connector() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Error");
return null;
}
Connection connection;//=null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/dblogin", "root", "");
Statement stmt;
stmt = connection.createStatement();
String sql = "Select * from login";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String user = rs.getString("user");
String password = rs.getString("password");
System.out.println("ID " + id);
System.out.println("User " + user);
System.out.println("Password " + password);
}
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return connection;
}
}
Statement je zjednodussene jen string s sql ktery se preda DB. PreparedStatement je dvoufazovy. Ty pripravis dotaz a potom do nej vkladas parametry. Dle meho nazoru u prepared statement executeQuery(String sql) zustalo jen jako pozustatek od rodice Statement a dle meho neni dobre ho pouzivat a je lepsi vyuzivat jen executeQuery(). V kazdem pripade to vyresetuje tvoji snahu s pripravou parametru v radcich vyse.
ked mam okno kde su ulozene nejake choiceboxy, textfieldy atd.. po ich vyplneni chcem aby sa udaje zapisali do DB. Je potrbne vzdy nadviazat spojenie??
String sql;
try {
Class.forName("com.mysql.jdbc.Driver");
sql = "select user,password from login where user = ? and password = ?";
// sql="SELECT user, password FROM `login` WHERE user = " + txtUser.getText() " and password = "test"";
ps = conn.prepareStatement(sql);
ps.setString(1, user);
ps.setString(2, pass);
rs = ps.executeQuery(sql);
(nie zrovna tento kod ale princip je rovnaky?)
Principy u databazovych aplikaci jsou nasledujici:
mozes ten posledny bod trocha viac vysvetlit? dik.
no a takto: mam rieseny login cez db (tak ako to je hore). tam som spojenie
uzavrel, ako prebehne login tak sa spojenie ukonci. (tvoj bod c.1). V aplikacii
budem pridavat data do db. Budu v nej textfieldy, comboboxy atd.(v tabulke asi 6
atributov). To budu len inserty do tabulky a potom v aplikaciu budu rozne
reporty(grafy) cize budem tahat z tych udajov co sa vkladali. cize tam bude
lepsie nechat otvorene spojenie?? (teda asi bod 2) mi iba tak v hlave prebehlo
ci by sa to nedalo riesit nejak transakciami (este neviem ako by som to napisal
ale myslienka neni zla ).
toto je troska mimo temy ale je to k aplikacii: Mam textfield kde potrebujem dat ciselne hodnoty s desatinou ciarkou (najlepsie asi double). Je mozno to nejak preparsovat na double?? najlepsie by bolo ak by nenapisalo ziaden iny znak iba cisla (a teda ciarku alebo bodku). S tymito hodnotami potrebujem dalej pracovat (nasobit). Hladal som na nete nejake riesenie ale nejak sa mi nepodarilo. Tam kde bude cisto len int som spravil toto:
tfKurz.textProperty().addListener((observable, oldValue, newValue) -> {
if(!newValue.matches("[0-9]*")) {
tfKurz.setText(oldValue);
// System.out.println(oldValue);
}
});
pre double to ale zatial neviem poriesit
dik za rady a pomoc
to parsovanie som poriesil takto, neviem ci to je dobre riesenie ale ide
@FXML
public void parseDouble (ActionEvent event) throws Exception{
try{
Double kurz = Double.parseDouble(tfKurz.getText());
System.out.println(kurz);
}catch (NumberFormatException e){
System.out.println("chyba v parsovani");
}
}
Ahoj,
Zobrazeno 13 zpráv z 13.