SQL Befehl

starbug

Erfahrenes Mitglied
Hallo allerseits,

kann mir vielleicht jemand sagen, wie die Syntaxregeln für SQL in Java sind?

Habe das hier mal versucht:

Code:
static String sqlq = "INSERT INTO TEST_TABELLE" + "VALUES(5, 'MIB', 'mit Will')";

stmt.execute(sqlq);

Funktioniert aber nicht. Die Exception sagt das die Syntax falsch ist.
 

tombe

Erfahrenes Mitglied
1) Warum verknüpfst du die SQL-Anweisung? Schreib es doch einfach ohne das Pluszeichen.

2) Ich vermute mal der Fehler liegt daran das zwischen TEST_TABELLE und VALUES ein Leerzeichen fehlt.
 

starbug

Erfahrenes Mitglied
Ich hab das mit dem + Zeichen in irgdeneinem Tutorium gesehen. Habs jetzt ohne + gemacht und es funktioniert. Vielen Dank für den Tip
 

tombe

Erfahrenes Mitglied
Dort wurden vielleicht die Werte nicht fest in die SQL-Anweisung geschrieben sondern mit Hilfe von Variablen. Dann würde es in etwa so aussehen:

Code:
var1 = 5;
var2 = "MIB";
var3 = "mit Willi";

static String sqlq = "INSERT INTO TEST_TABELLE VALUES (" + var1 + ", '" + var2 + "', '" + var3 + "')";

stmt.execute(sqlq);
 

slowfly

Erfahrenes Mitglied
klugsh***mode=on
Mit java.sql.Statements lassen sich sqj injections durchführen
http://de.wikipedia.org/wiki/SQL-Injection

Darum: Wenn möglich, immer mit PreparedStatements arbeiten. Wenn es keine Webapplikation ist, die "draussen" steht, liesse sich darüber diskutieren, aber bei uns gilt quasi die "prepared statements only" Regel.

Neben der Sicherheit, kann es auch Hilfreich für die Performance sein (Stichwort pre-compilation) und man hat den Vorteil, dass man sich nicht mehr um die "Hochkommas" kümmern muss ;D
/off

Und wer Zugang zu nem Admin eines Reverse Proxies hat, soll sich mal nen "sql-inject-report" generieren lassen, ist immer wieder spannend =)

Gruss
slowy
 

starbug

Erfahrenes Mitglied
HAllo nochmal,

ich hab nun eure Tips befolgt und die DB lief auch wunderbar. Jetzt habe ich mir eine Testdatenbank erstellt, in welcher einfach zufallsgenerierte Namen eingfügt werden sollen.

Hier mal mein Code:


Code:
import java.sql.*;
import java.util.*;

public class Database {

	private Connection con = null;
	private Statement stmt = null;
	private ResultSet rs = null;
        private Namen name;
	
	
	private String sqlq;
	
	public void erstelleDB()
	
	{
		
		
	
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
		}catch(ClassNotFoundException cnfe)
		{
			System.out.println("Die Klasse konnte nicht geladen werden:"+ cnfe.getMessage());
			System.exit(1);
		}
		try 
		{

			con = DriverManager.getConnection("jdbc:mysql://localhost/tdb","root","pw");
			stmt = con.createStatement();
			
			for(int i = 0; i< 15; i++)
			{
			  String nachname = name.createName();
			  String vorname = name.createName();
			  sqlq = "INSERT INTO testdaten VALUES('"+ vorname +"', '"+ nachname +"')";
			  stmt.execute(sqlq);
			}
			
			
			
			
			rs = stmt.executeQuery("SELECT Name, Vorname FROM testdaten");
			System.out.println("Scheint zu laufen");
			
			
			
			while(rs.next())
			{
				System.out.println("NAME......" + rs.getString(1));
				System.out.println("Vorname......" + rs.getString(2));
			}
			
			stmt.close();
			con.close();
			
		}catch(SQLException sqe)
		{
			System.out.println("Hier stimmt was nicht");
			sqe.printStackTrace();
			return;
		}
		
	}
	
	public static void main(String args[])
	{
		Database db = new Database();
		db.erstelleDB();
		
	}
	
	
}


Wenn ich das Programm ausführe, bekomme ich aber immer eine NullPointerException und ich weiß nicht wieso, da ich doch die DB korrekt angegeben habe oder?

Hier nochmal die Fehlermeldung:

Code:
Exception in thread "main" java.lang.NullPointerException
	at Database.erstelleDB(Database.java:48)
	at Database.main(Database.java:83)
 
Zuletzt bearbeitet: