Sql Datenbank - variable übergeben?

Tbe

Mitglied
hi zusammen,
lese schon länger mit und bin grad dabei mein eigenes java projekt zu starten.

zur ausgangslage:
ich lese per bufferedreader eine csv(txt egal) ein und speicher diese per splitt(,) in ein array.
aus dem array lese ich die werte wieder aus und übergebe sie an verschiedene variablen.

Java:
		String datum, name, symbol, ask = null, bit, vortagW, vortagP, hochTief; 
		String datei = null;
		String csvSplitBy = ",";
		String linkTeilA ="http://download.finance.yahoo.com/d/quotes.csv?s=";
		String linkTeilV = "ADS.DE+ALV.DE"; // TODO !!! AktienSymbole
		String linkTeilE = "&f=d1nsabpcm&e=.csv"; // AktienWerte - d1-n-s-a-b-p-c-m!
		//END_PART_VARIABLEN		
		String url = "jdbc:mysql://localhost:3306/csvtest";
		String user = "root";
		String pass = "";

		
		try{
			String getAktuellDepot = linkTeilA + linkTeilV + linkTeilE;
			URL link = new URL(getAktuellDepot);
			URLConnection verbinden = link.openConnection();
			InputStreamReader lineReader = new       InputStreamReader(verbinden.getInputStream());
			BufferedReader csvDateiEinlesen = new BufferedReader(lineReader);
			while ((datei = csvDateiEinlesen.readLine()) != null) {
				String[] test = datei.split(csvSplitBy); //ARRAY-8
				datum = test[0]; 		// d1
				name = test[1]; // n
				symbol = test[2]; // s
				ask = test[3]; // a
				bit = test[4]; // b
				vortagW = test[5]; // p
				vortagP = test[6]; // c
				hochTief = test[7]; // m

das funktionniert soweit ganz gut!
jetzt bau ich eine verbindung zur datenbank (mysql) auf und will die werte speichern!

Java:
				Connection dbConn = DriverManager.getConnection(url, user, pass);
				Statement befehl = dbConn.createStatement();
				befehl.execute("INSERT INTO depotaktuell (symbol,name,datum,ask,bit,vortagW,vortagP,hochTief) VALUES(1,2,3,'ask',bit,vortagW,vortagP,hochTief)");
				dbConn.close();
				csvDateiEinlesen.close();

wenn ich in die datenbank schau steht immer "null" als wert drin.

DIE FRAGE: wie kann ich die variablen wert dem sql übergeben?



noch mal der ganze quellcode (will nur auf funktion testen später wird es dann in eigenen klassen unterteilt).

Java:
		//PART_VARIABLEN
		String datum, name, symbol, ask = null, bit, vortagW, vortagP, hochTief; 
		String datei = null;
		String csvSplitBy = ",";
		String linkTeilA ="http://download.finance.yahoo.com/d/quotes.csv?s=";
		String linkTeilV = "ADS.DE+ALV.DE"; // TODO !!! AktienSymbole
		String linkTeilE = "&f=d1nsabpcm&e=.csv"; // AktienWerte - d1-n-s-a-b-p-c-m!
		//END_PART_VARIABLEN		
		String url = "jdbc:mysql://localhost:3306/csvtest";
		String user = "root";
		String pass = "";

		
		try{
			String getAktuellDepot = linkTeilA + linkTeilV + linkTeilE;
			URL link = new URL(getAktuellDepot);
			URLConnection verbinden = link.openConnection();
			InputStreamReader lineReader = new InputStreamReader(verbinden.getInputStream());
			BufferedReader csvDateiEinlesen = new BufferedReader(lineReader);
			//String datum, name, symbol, ask = null, bit, vortagW, vortagP, hochTief; 

			while ((datei = csvDateiEinlesen.readLine()) != null) {
				String[] test = datei.split(csvSplitBy); //ARRAY-8
				datum = test[0]; 		// d1
				name = test[1]; // n
				symbol = test[2]; // s
				ask = test[3]; // a
				bit = test[4]; // b
				vortagW = test[5]; // p
				vortagP = test[6]; // c
				hochTief = test[7]; // m
//				System.out.println(ask); // EinArrayWertAuslesen
//				System.out.println(test[0]+test[1]+test[2]+test[3]+test[4]+test[5]+test[6]+test[7]);
				
				Connection dbConn = DriverManager.getConnection(url, user, pass);
				Statement befehl = dbConn.createStatement();
				befehl.execute("INSERT INTO depotaktuell (symbol,name,datum,ask,bit,vortagW,vortagP,hochTief) VALUES(1,2,3,'ask',bit,vortagW,vortagP,hochTief)");
				dbConn.close();
				csvDateiEinlesen.close();
			}}catch (IOException e){
				//System.out.println(ask);
			}
				
				System.out.println("ende");
			
		
	}

danke fürs lesen und evtl antworten 🙂
mfg
tbe
 
Zuletzt bearbeitet:
Hallo Tbe,
ich hoffe ich hab dein problem verstanden und kann dir helfen.

probiert mal statt
Java:
 Statement befehl = dbConn.createStatement();
                befehl.execute("INSERT INTO depotaktuell (symbol,name,datum,ask,bit,vortagW,vortagP,hochTief) VALUES(1,2,3,'ask',bit,vortagW,vortagP,hochTief)");

Java:
PreparedStatement befehl = dbConn.preparedStatement("INSERT INTO depotaktuell (symbol,name,datum,ask,bit,vortagW,vortagP,hochTief) VALUES(1,2,3,'ask',bit,vortagW,vortagP,hochTief)")
befehl.executeUpdate();
dbConn.commit();

Bei mir führt er dann die inserts einwandfrei aus
hoffe bei dir auch
 
danke für die schnelle antwort! 🙂

code wurde dahingebend geändert
Java:
				Connection dbConn = DriverManager.getConnection(url, user, pass);
//				Statement befehl = dbConn.createStatement();
//				befehl.execute("INSERT INTO depotaktuell (symbol,name,datum,ask,bit,vortagW,vortagP,hochTief) VALUES "
//						+ "(1,2,3,'ask',bit,vortagW,vortagP,hochTief)");
				
			    PreparedStatement befehl = dbConn.prepareStatement("INSERT INTO depotaktuell (symbol,name,datum,ask,bit,vortagW,vortagP,hochTief) "
			    		+ "VALUES(1,2,3,'ask',bit,vortagW,vortagP,hochTief)");
			    	    befehl.executeUpdate();
//			    	    dbConn.commit(); <<----- ohne funktioniert der durchlauf
			    	    dbConn.close();
				csvDateiEinlesen.close();
			}}catch (IOException e){
				//System.out.println(ask);
			}
				
				System.out.println("ende");

der durchlauf funktioniert und er schreibt halt leider das in die datenbank...

...wie kann ich die variablen vom bufferedreader dem sql befehl übergeben???
 
Zuletzt bearbeitet:
PreparedStatement befehl = dbConn.prepareStatement("INSERT INTO depotaktuell (symbol,name,datum,ask,bit,vortagW,vortagP,hochTief) "
+ "VALUES(1,2,3,'ask',bit,vortagW,vortagP,hochTief)");

du musst die anderen Strings wie 'ask' auch in hochkomma stellen dann gehts

wie du die variablen da rein bekommst ist eigentlich ganz leicht

Java:
 PreparedStatement befehl = dbConn.prepareStatement("INSERT INTO depotaktuell (symbol,name,datum,ask,bit,vortagW,vortagP,hochTief) "
                        + "VALUES("+symbol+", "+name+","datum", ' "+ask+" ',' "+bit+" ',' "+vortagW+" ',' "+vortagP+" ', ' "+hochTief+"')");
 
nochmal danke aber ich checks immer noch nicht was falsch ist!
Java:
package in.kgd.db.test1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class TestDb1 {

	public static void main(String[] args) throws SQLException {
		String t1 = "hallo";
		String t2 = "du abc 3";
		String url = "jdbc:mysql://localhost:3306/t";
		String user = "root";
		String pass = "";
		
		Connection dbConn = DriverManager.getConnection(url, user, pass);
		PreparedStatement befehl = dbConn.prepareStatement("INSERT INTO depotaktuell (w1,w2) "+ "VALUES('"+ t1 +"' , '"+ t2 +"');
		
		dbConn.commit();
		dbConn.close();
		System.out.println("Erfolg!");

	}

}
 
arghhh bringt doch niemandem so eine s*****e bei. ;(

mach was richtung:
Java:
public static void main(String[] args) throws Exception {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = getConnection();
      String query = "insert into dept(symbol,name,datum) values(?, ?, ?)";

      pstmt = conn.prepareStatement(query); // create a statement
      pstmt.setInt(1, 1); // set input parameter 1
      pstmt.setString(2, "irgendein Name"); // set input parameter 2
      pstmt.setString(3, "balbalabla"); // set input parameter 3
      pstmt.executeUpdate(); // execute insert statement
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      pstmt.close();
      conn.close();
    }
  }


niemals aber wirklich niemals baut man seinen SQL_STRING mit ""+variable+"" zusammen. Das schreit sonst schon nach SQL-Injection
 
Zuletzt bearbeitet:
danke Basti90!
war tatsächlich ein zeichenfehler durch die auto vervollständigung von eclipse! ;(
läuft jetz!

@Deros ja das ist ein sehr gutes argument und ich werde es demächst umbauen...! 🙂
 

Neue Themen


Zurück
Oben