# datenbank füllen



## core_85 (14. Mai 2012)

hallo,

hab folgenden Quelltext:

```
check.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent arg0) {
                    	
                    	
                    	/*Werte in die Datenbank schreiben*/
                    	
                    	try
                          {
                           Class.forName("org.postgresql.Driver") ;
                           Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5000/postgres","postgres", "xxx") ;
                           Statement stmt = conn.createStatement() ;
 
                           if(men_jt.isSelected()){
                           
                           //String s1 = age.getText();
                           ResultSet rs = stmt.executeQuery("insert into test (sex, age) values ('männlich' " + age.getText() +" );");
                                                                         
                           while(rs.next())
                             
                         	System.out.println(""+ rs.getString(2)
                         		+ " " +(rs.getString(3)));
                      
                           	// Close the result set, statement and the connection
                           
                           rs.close() ;
                           stmt.close() ;
                           conn.close() ;
                          }
```


nun hab ich das problem das age.getText() den wert aus meinen jtext net in die spalte age reinschreibt. wirft die sql exception:  FEHLER: Syntaxfehler bei »23«  Position: 48 kann jem helfen danke


----------



## Gast2 (14. Mai 2012)

core_85 hat gesagt.:


> ```
> ResultSet rs = stmt.executeQuery("insert into test (sex, age) values ('männlich' " + age.getText() +" );");
> ```



Da fehlt ein Komma:


```
ResultSet rs = stmt.executeQuery("insert into test (sex, age) values ('männlich', " + age.getText() +" );");
```

Besser wäre es jedoch gleich PreparedStatements zu verwenden.


----------



## core_85 (15. Mai 2012)

danke danke :toll:

wieso ist preparestatment dafür besser ? ???:L


----------



## cmrudolph (15. Mai 2012)

Ich verwende mittlerweile an nahezu jeder Stelle prepared Statements.
Vorteile:
- SQL Injection nicht mehr möglich
- Wenn das Statement mehrfach ausgeführt wird gibt es eine bessere Performance
- übersichtlichere Schreibweise für die Queries, da die Parameter erst hinterher gebunden werden

Nachteil:
- Wenn das Statement nur einmal ausgeführt wird, ist es etwas langsamer

Den Nachteil nehme ich aber aus Sicherheitsgründen gerne inkauf.


----------



## core_85 (18. Mai 2012)

mhh ja ok danke für die information aber ist nicht wirklich entscheidend, wenn man mit einer lokalen datenbank arbeitet aber werde es in zukuft berücksichtigen.


----------

