MySQL User Eingaben in die DB einfügen

  • Themenstarter Themenstarter MelaniK_55
  • Beginndatum Beginndatum
M

MelaniK_55

Gast
Hallo,
Ich habe folgendes Programmm geschrieben:
Java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
 

 
/**
 * @author Thomas.Darimont
 * 
 */
public class JDBCAutoGenerateKeysExample {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			
			Class.forName ("com.mysql.jdbc.Driver").newInstance();
			Connection con = DriverManager.getConnection(
					"jdbc:mysql://localhost/java", "root","" );
			//con.setReadOnly(true);
			Statement smt = con.createStatement();
			
	              //  Statement.CLOSE_ALL_RESULTS, Statement.RETURN_GENERATED_KEYS);
			
			
			smt.execute("insert into javatest  values (999999, 'dddd','javatest','javatest','javatest','20.08.2010')");
			
			
			 ResultSet generatedKeys = smt.getGeneratedKeys();
		        if(generatedKeys.next()){
		            System.out.println(generatedKeys.getString(1)+ "  " + generatedKeys.getString(2)+ "  " + generatedKeys.getString(3)
		            		+ "  " + generatedKeys.getString(4)+ "  " + generatedKeys.getString(5)+ "  " + generatedKeys.getDate(6));    
		        }
		       // rs.close();
				smt.close();
				con.close();
		}catch (Exception e){
			System.out.println("+++++++ Fehler --> " +e);
		
		
		}
		}}

Im dem jetzigen Programm sind die Daten fest kodiert.

Ich würde gerne das Programm so haben, dass beliebdig viele Daten von der Tastatur gelesen werden und in die DB eingefügt werden.

Danke für eure Hilfe
 
Das musst du mit einem Callable Statement machen:

Java:
CallableStatement cstmt = con.prepareCall("insert into javatest  values (?,?,?,?,?,?)");

cstmt.SetInt(1,999999);
cstmt.SetString(2,"bbbb");

//oder dann halt
int varibale = einlesen von konsole....
cstmt.SetInt(1,Variable);


cstmt.execute();

usw.

die Set methoden überschreiben jedes ? mit dem wert 1 und 2 bedeuten erstes und zweites Fragezeichen.
 
vielen Dank.
also Anfängerin habe ich soweit geschafft scheint auch zu funktionieren:
Java:
import java.sql.*;
import java.util.Scanner;
public class EinfuegenInDB {


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int zahl;
		String str1, str2, str3, str4, str5;
		Date datum;
		
try {
			
			Class.forName ("com.mysql.jdbc.Driver").newInstance();
			Connection con = DriverManager.getConnection(
					"jdbc:mysql://localhost/javatest", "root","" );
			//con.setReadOnly(true);
			CallableStatement cstmt = con.prepareCall("insert into javatest  values (?,?,?,?,?,?)");
			
	              //  Statement.CLOSE_ALL_RESULTS, Statement.RETURN_GENERATED_KEYS);
			
			
			//cstmt.execute("insert into javatest  values (999999, 'bubu','javatest','javatest','javatest','20.02.2010')");
			
			Scanner sc=new Scanner(System.in);
			
			
			 System.out.println( "String eingeben  " );
			zahl= sc.nextInt();
			cstmt.setInt(1, zahl);
			
			 System.out.println( "String 1 eingeben  " );
				str1= sc.next();
				cstmt.setString(2, str1);
				
				
				System.out.println( "String 2 eingeben  " );
					str2= sc.next();
					cstmt.setString(3, str2);
				
				
				
				System.out.println( "String 3 eingeben  " );
					str3= sc.next();
					cstmt.setString(4, str3);
					
				System.out.println( "String 4 eingeben  " );
				str4= sc.next();
				cstmt.setString(5, str4);
				
				
				System.out.println( "datum eingeben  " );
				str5= sc.next();
				
				cstmt.setString(6, str5);
			cstmt.execute();
			
			
			
			ResultSet rs = cstmt.executeQuery("Select *from javatest");
			
			System.out.println("-----------DB-Daten------------");
        	System.out.println("ID\t"+"Name\t" +"Nachname\t" +"Adresse\t");
			while(rs.next()){
				
				
		System.out.println(rs.getString(1)+" " +rs.getString(2) +" "+ rs.getString(3)+" "+ rs.getString(4)+" "+rs.getString(5)+" " +rs.getDate(6));
			
			}
			
			
			
		
		       // rs.close();
				cstmt.close();
				con.close();
		}catch (Exception e){
			System.out.println("+++++++ Fehler --> " +e);
		
		
		}
	}
}

Gibts vorschläge, wie ich besser oder anders auch machen könnte?

Danke
 
Java:
Gibt es Vorschläge, wie ich besser oder anders auch machen könnte?

Nunja zuerst könnte man die Variablennamen besser benennen 🙂

Aber letztendlich läuft hier alles komplett Konsolen basiert und die Frage dabei ist relativ leicht, willst du das?

Außerdem steht momentan alles in der main - Methode was natürlich nicht gerade der Übersichtlichkeit dient. Bei solchen kleinen Programmen macht das zwar nicht viel aus, da man gleich sieht um was es geht, aber später oder mit der Zunahme von Funktionen und somit Code könnte man sicherlich durch Methoden etwas an Übersichtlichkeit gewinnen.
 
Vielen Dank für den Tipp.
Variabelnamen und die Auslagerung von Code werde ich dan berücksichtigen.

Ich wollte schrittweise alles aufbauen sprich ein -und ausgabe aus DB. Nun wollte zum nächsten Punkt kommen und zwar die Daten aus DB in einem Fenster ausgeben und auch über ein GUI die Daten eingeben. Bin nur soweit gekommen:
Java:
import javax.swing.JFrame;
import javax.swing.JLabel;


public class UnserFrame extends JFrame {
	JLabel text;
	
	public UnserFrame (){
		setVisible(true);
		setSize(500, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setTitle("Unser Frame");
		setResizable(false);
		setLayout(null);
		
		text = new JLabel("Hallo");
		text.setBounds(0, 0, 500, 10);
		
		add(text);
		
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	JFrame jf = new UnserFrame();
	}

}
 
Was genau ist der Vorteil von so einem CallableStatement (javadoc gelesen, nur erschließt sich mir da so der Vorteil nicht wirklich). Ich kann doch genausogut die Sql Anweisung erst nach der Konsoleneingabe der Werte zusammenstellen und dann executeUpdate ausführen?
 
Es gibt ZWEI Interfaces die hier von Belang sind

  • PreparedStatement (PS)
    enthalten ein prekompiliertes SQL-Statement das mit verschiedenen Parametern "versorgt" werden kann. Dieses ist das bei Weitem das am häufigsten Nutzung.
  • CallableStatement zur Ausführung von SQL stored procedures.

PS werden daher so häufig eingesetzt, weil damit keine SQL-Injection Angriffe möglich sind, die Performance steigt, weil die DB nicht immer das SQL parsen muss und der Code lesbarer wird, weil keine String-Pfriemelei für die Parameter notwendig ist.
Ich nutze praktisch nie CallableStatements, weil Java plattformunabhängig, stored procedure aber sehr DB-spezifisch sind.

Aber die Nutzung von PS empfehle ich sehr dringend!!!
 

Zurück
Oben