# SQL Querry wird nicht abgesetzt, da vorher underlined!



## ven000m (31. Okt 2005)

Hallo,

ich habe folgendes Problem mit diesem Code:

1.) Wieso wird dort die erste Zeile des SQL Strings underlined?
2.) Wie kann ich z.B. das "?" durch ein in der Konsole eingelesenen String ersetzen?
3.) Ist folgender SQL Querry äquivalent dem, den ich aktuell benutze:

```
"select agents.aid, agents.aname,sum(dollars)" +
				"from orders, agents" +
				"where cid=c001 and orders.aid=agents.aid" +
				"group by agents.aid,agents.aname";
```
Besten Dank.  :applaus: 


```
import java.sql.*;
public class Blatt4Aufg5 {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
		String sql = "SELECT ORDERS.PID, ORDERS.AID, Sum(ORDERS.DOLLARS) AS Summe_VK_Produkte
				  +"FROM ((DBI_ORDERS INNER JOIN DBI_CUSTOMERS ON DBI_ORDERS.CID = DBI_CUSTOMERS.CID) INNER JOIN DBI_PRODUCTS ON DBI_ORDERS.PID = DBI_PRODUCTS.PID) INNER JOIN DBI_AGENTS ON DBI_ORDERS.AID = DBI_AGENTS.AID"
				 +"GROUP BY DBI_ORDERS.PID, DBI_ORDERS.AID"
				 +"HAVING (((DBI_ORDERS.PID)=?))"
				 +"ORDER BY DBI_ORDERS.PID";
		Connection con = null;
		Statement stmt;
		try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				con = DriverManager.getConnection(url, "dbi", "dbi");
		} catch (ClassNotFoundException e) {
		} catch (SQLException e1) {
		}
			try { 
				stmt = con.createStatement();
				ResultSet res = stmt.executeQuery(sql);
				while (res.next()) {
					String s1 = res.getString(1);
					String s2 = res.getString(2);
					String s3 = res.getString(3);
					int s4 = res.getInt(4);
					System.out.println(s1 + "\t" + s2 + "\t" + s3 + "\t" + s4);
				}
			} catch (SQLException e2) {
			}
	}
}
```


----------



## robertpic71 (1. Nov 2005)

zu 1: Ich würde sagen, da fehlt das Anführungszeichen zu (") und das Plus (+)

zu 2: Such mal unter preparedStatement (Quick+Dirty zum Testen: Variablen mit + zusammenhängen)

zu 3: Nein, gibt mehrer Unterschiede, Außerdem fehlen mir da einige Leerzeichen --> SQLSyntaxfehler

aus:  ..."from orders, agents" +
            "where cid=c001 and....

wird: .... from orders, a*gentswhere *cid ...

LG Robert


----------



## ven000m (1. Nov 2005)

Mhm... Leerzeichen?


```
"select agents.aid, agents.aname,sum(dollars)" + 
            "from orders, agents" + 
            "where cid=c001 and orders.aid=agents.aid" + 
            "group by agents.aid,agents.aname";
```

Das ist doch so richtig oder!??! Was meinste denn.

Ist er auch noch sachlich falsch? Wie müsste er denn heißen?


----------



## robertpic71 (1. Nov 2005)

Lass dir mal den gebastelten String per System.out ausgeben:

Müsste dann ungefähr so aussehen:

select agents.aid, agents.aname,sum(dollars)from orders, _agents_where cid=c001 and orders.aid=agents.aidgroup by ...

Ich meine damit nur, dass du ein Leerzeichen am Ende der alten Zeile oder am Anfang der neuen Zeile machen mu0t. Sonst kleben die Wörter zusammen (wie oben) und du hast ein SQL-Syntaxfehler.

Das SQL schaut ok aus - ich kenn aber weder die Dateien noch die Erwartungen. Das SQL im Code hat eine (edit: CUSTOMERS) Datei (unnötig, da nicht im Output) mehr verknüpft und Where-Abfrage auf Gruppenebene --> HAVING (= Where für Gruppen)

LG Robert


----------



## Bleiglanz (1. Nov 2005)

in der ersten Zeile fehlen die " am Schluss

und du musst blanks reintun...


```
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
      String sql = "SELECT ORDERS.PID, ORDERS.AID, Sum(ORDERS.DOLLARS) AS Summe_VK_Produkte " // blank am schluss
              +"FROM ((DBI_ORDERS INNER JOIN DBI_CUSTOMERS ON DBI_ORDERS.CID = DBI_CUSTOMERS.CID) INNER JOIN DBI_PRODUCTS ON DBI_ORDERS.PID = DBI_PRODUCTS.PID) INNER JOIN DBI_AGENTS ON DBI_ORDERS.AID = DBI_AGENTS.AID " // blank am schluss
             +"GROUP BY DBI_ORDERS.PID, DBI_ORDERS.AID " // blank am schluss
             +"HAVING (((DBI_ORDERS.PID)=?)) " // blank am schluss
             +"ORDER BY DBI_ORDERS.PID "; // blank am schluss
```


----------



## ven000m (1. Nov 2005)

```
select agents.aid, agents.aname,sum(dollars)from orders, agentswhere pid=? and orders.pid=products.pidgroup by dollars desc
```

Hi,

ich hab mir das jetzt mal ausgeben lassen, aber sieht doch ganz gut aus? So müsste er doch durchkommen..

Gruß


----------



## Mag1c (1. Nov 2005)

Hi,

- es fehlen diverse Leerzeichen.
- die Tabelle "products" taucht im "from" nicht auf.
- die Tabelle "agents" taucht im "where" nicht auf.

Gruß
Mag1c


----------



## ven000m (1. Nov 2005)

Ach ja stimmt, jetzt sehe ich es auch.

Ähm wie soll ich das ändern einfach Leerzeichen in den String, oder kann mir das einer mal als code hier posten ich übernehme das dann?

Gruß


----------



## Mag1c (1. Nov 2005)

Hi,

wenn du SQL-Strings zusammensetzt (mit "+" oder StringBuffer) füge immer am Anfang oder am Ende oder an beiden Seiten ein extra Leerzeichen ein. Damit bist du auf der sicheren Seite. Zu viele Leerzeichen schaden hier nicht.

Gruß
Mag1c


----------

