Datensätze variabel hinzufügen

Status
Nicht offen für weitere Antworten.

Calimero

Mitglied
Hallo Leute!

Ich bin gerade dabei mich mit DB zu beschäftigen. Habe eine Tabelle angelegt und möchte nun über ein Java Programm neue Datensätze hinzufügen. Das ist soweit auch kein Problem, solange die Daten im Code festgelegt sind. Nur ich möchte, das die Werte über die Konsole eingegeben werden können. Hierzu habe ich entsprechende Variablen deklariert und diese dann in die SQL-Abfrage eingebaut. Es kommt dann zwar keine Fehlermeldung, die Datensätze werden aber auch nicht hinzugefügt.

Code:
package mysql;
import java.sql.*;
import java.io.*;
import java.util.*;

public class Bundesländer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
Scanner sc = new Scanner(System.in);
		// Treiber laden
		
try{
	 Class.forName("com.mysql.jdbc.Driver");
	System.out.println("Treiber wurde erfolgreich geladen!");
}
catch (ClassNotFoundException e){
	System.out.println("Fehler beim Laden des JDBC-Treibers");
	return;
}

// Verbindung zur Datenbank aufbauen

	String url ="jdbc:mysql://127.0.0.1:8889/bund";
	String benutzername ="root";
	String passwort ="root";
	int p;
	String region;
	int zahl;
	

	Statement befehl  = null;
	Connection verbindung = null;
	
	try {
		verbindung = DriverManager.getConnection(url,benutzername,passwort);
		befehl = verbindung.createStatement();
		}
	catch (Exception e){
		System.err.println("Verbindung zu " + url + " konnte nicht hergestellt werden");
		}
	
// Datensätze hinzufügen
	
	while (true){
		System.out.println("Geben Sie die Position ein: ('0' für Ende)");
		p = sc.nextInt();
		if (p==0)
			break;
		System.out.println("Geben Sie das Land ein: ");
		region = sc.next();
		System.out.println("Geben Sie die Einwohnerzahl ein: ");
		zahl = sc.nextInt();
	
	try {
		verbindung.setReadOnly(false);
		int anz = befehl.executeUpdate("insert into land values (p, region, zahl);");
		verbindung.commit();
		System.out.println("Eingefügte Datensätze: " + anz);
		}
	
	catch (Exception e){	
		}
	
	}
// Daten auslesen
	
	try {
		ResultSet datenmenge;
		datenmenge = befehl.executeQuery("select * from land");
		
// Einzelne Datensätze ausgeben
		String land;
		int einw;
		System.out.println("");
		System.out.println("------------------------------------------");
		System.out.println("Bundesland          Einwohner");
		System.out.println("------------------------------------------");
		while(datenmenge.next()){
			land = datenmenge.getString("Land");
			einw = datenmenge.getInt("Einwohner (in Mio)");
			System.out.println(String.format("%1$-20s%2$-20s", land,einw));
		}
		verbindung.close();
	
	}
	catch (Exception e){
		e.printStackTrace();
	}
	}}

Also wie oben bereits erwähnt: mit
int anz = befehl.executeUpdate("insert into land values (1, 'Umbrien', 7);");
funktioniert das Ganze.
Aber mit mit Variablen, also mit
int anz = befehl.executeUpdate("insert into land values (p, region, zahl);");
hat es nicht geklappt.

Kann mir jemand von Euch sagen, wie ich Datensätze variabel über die Konsole in die DB einfügen kann, bzw. was ich am Code ändern muß?

Vielen Dank schon mal im Voraus!

Mit freundlichen Grüßen, Calimero! :?:
 

nols

Mitglied
wie wäre es mit
Code:
int anz = befehl.executeUpdate("insert into land values (" + p +", " + region + ",  "+ zahl + ");")
Das sollte dann funktionieren, in deinem Beispiel übergibst du einen festen String in dem die Variablen nicht ersetzt werden.
 

kleiner_held

Top Contributor
Du musst schon das Statement richtig zusammenbauen - wie soll Java wissen, dass das p in dem String deiner variable p entspricht? (wir sind hier doch nicht bei Perl :)
Also:
Code:
String statement = "insert into land values ("+p+", '"+region+"', "+zahl=")"
Besser ist aber definitiv mit PreparedStatements zu arbeiten:
Code:
PreparedStatement preparedStatement = connection.prepareStatement("insert into land values (?, ?, ?)");
preparedStatement.setInt( 1, p); 
preparedStatement.setString( 2, region); 
preparedStatement.setInt( 3, zahl); 
preparedStatement.executeUpdate();
 

Calimero

Mitglied
Vielen herzlichen Dank für die raschen Antworten!
Hab´s gerade ausprobiert und mich über den Erfolg gefreut!
 

HoaX

Top Contributor
Code:
   try {
      verbindung.setReadOnly(false);
      int anz = befehl.executeUpdate("insert into land values (p, region, zahl);");
      verbindung.commit();
      System.out.println("Eingefügte Datensätze: " + anz);
      }
   
   catch (Exception e){   
      }

wenn du die geworfenen exceptions verschluckst wird klar kein fehler ausgegeben, auch wenn einer da war. ein e.printStackTrace() ist das mindeste was man beim exceptionhandling machen sollte.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Datensätze in DataGrip (IntelliJ) Datenbankprogrammierung 1
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
R MySQL Datensätze in Textdokument Datenbankprogrammierung 7
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
R Große Datensätze, kleine Rechte Datenbankprogrammierung 8
J wie mit resultset.next() über Datensätze iterieren? Datenbankprogrammierung 15
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
B Nur 99% der Datensätze werden in Tabelle geschrieben Datenbankprogrammierung 2
E primaryKey auslesen - Datensätze abgleichen Datenbankprogrammierung 4
S Häufig vorkommende Datensätze Datenbankprogrammierung 4
Kandum MySQL Anzahl gefundener Datensätze bleibt gleich, auch wenn mehr existieren und ausgegeben werden Datenbankprogrammierung 3
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
J Datensätze löschen Datenbankprogrammierung 6
O Löschen vieler Datensätze mit Hibernate Datenbankprogrammierung 11
C Hibernate Datensätze finden Datenbankprogrammierung 17
F [SQLite] Mehrere Datensätze einfügen Datenbankprogrammierung 12
S Anzahl Datensätze in db4o Datenbankprogrammierung 2
D Können nur angesehende Datensätze geloggt werden? Datenbankprogrammierung 4
F NUR 3 datensätze auslesen Datenbankprogrammierung 6
F MySQL Nur die Datensätze zurückgeben, in denen ein anderer Preis steht Datenbankprogrammierung 9
B Aktuellen Stand der Datensätze einer Datenbank anzeigen Datenbankprogrammierung 9
J SQL-Abfrage zur löschung doppelter Datensätze Datenbankprogrammierung 7
J Ausgewählte Datensätze in DB-Tabelle schreiben Datenbankprogrammierung 13
J Datensätze aus der Datenbank holen Datenbankprogrammierung 3
S MySQl - Neue Datensätze "on the Fly" verarbeiten Datenbankprogrammierung 8
M Keine doppelten Datensätze einfügen Datenbankprogrammierung 24
N Oracle DB liefert nicht alle Datensätze Datenbankprogrammierung 3
C Doppelte Datensätze Datenbankprogrammierung 11
T Datensätze effektiv einlesen Datenbankprogrammierung 4
ARadauer viele datensätze. Datenbankprogrammierung 3
I Anzahl unterschiedlicher Datensätze ausgeben Datenbankprogrammierung 2
D mehrere Datensätze in ein Listenfeld Datenbankprogrammierung 2
S 50.000 updates auf 50.000 Datensätze Datenbankprogrammierung 3
A SELECT-Anweisung liefert keine Datensätze zurück Datenbankprogrammierung 9
M Datensätze zählen. Datenbankprogrammierung 6
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
M JDBC: Viele Datensätze in Tabelle einfügen: Wie? Datenbankprogrammierung 7
K Ältere Datensätze archivieren Datenbankprogrammierung 4
C Datensätze in einer JComboBox auflisten Datenbankprogrammierung 2
V Anzahl der Datensätze abfragen Datenbankprogrammierung 9
W Datensätze v. SQL-Datenbank i. JTextFields ausgeben/updaten Datenbankprogrammierung 12
D Anzahl der zurückgelieferten Datensätze Datenbankprogrammierung 2
S ResultSet variabel auslesen Datenbankprogrammierung 4
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
W Access DB Metainfo hinzufügen Datenbankprogrammierung 8
I MySQL Verständnisfrage bei neuem Feld hinzufügen Datenbankprogrammierung 2
E Wie kann man in DB2 TIMESTAMP Werte hinzufügen? Datenbankprogrammierung 2
I Hibernate / JPA Index hinzufügen Datenbankprogrammierung 1
M Daten nachträglich hinzufügen Datenbankprogrammierung 6
R PostgreSQL Tabellen hinzufügen, falls nicht vorhanden Datenbankprogrammierung 3
P DB4o Attribute hinzufügen Datenbankprogrammierung 5
F Daten in die DB hinzufügen Datenbankprogrammierung 7
R Property Hinzufügen Datenbankprogrammierung 21
P JPA Connection dynamisch hinzufügen Datenbankprogrammierung 2
R Wie zweite DB hinzufügen? Datenbankprogrammierung 6
M [Hibernate] Nachträgliches Hinzufügen einer Spalte Datenbankprogrammierung 7

Ähnliche Java Themen


Oben