HSQLDB SQL ORDER BY nur mit fixen String machbar?

DefconDev

Bekanntes Mitglied
Java:
ResultSet table_01 = statement.executeQuery("SELECT TOP 5 * FROM \"Karten_Siege\" ORDER BY "+this.mapName+" DESC");

Java:
ResultSet table_01 = statement.executeQuery("SELECT TOP 5 * FROM \"Karten_Siege\" ORDER BY \"this.mapName\" DESC");


Beide Statements lassen sich nicht realisieren. Im ersten Fall sagt er mir nur, "user lacks privilege or object not found: AKROPOLIS"

Der Spaltenname existiert , ich habe aber keine Ahnung warum AKROPOLIS komplett groß geschrieben wird.

Beim zweiten Stament sagt er mir nur das this.mapName nicht existiert.


Kann ich da keine variable einfügen nach ORDER BY?
 

taro

Bekanntes Mitglied
Java:
PreparedStatement ps = deineConnection.prepareStatement("SELECT * FROM Karten_Siege ORDER BY ? DESC LIMIT 5");
ps.setString(1, this.mapName);
System.out.println(ps.toString());
ResultSet table_01 = ps.executeQuery();

Was schmeißt es dir denn jetzt um die Ohren?
 
Zuletzt bearbeitet:

DefconDev

Bekanntes Mitglied
wenn ich

Java:
PreparedStatement ps = con.prepareStatement("SELECT * FROM \"Karten_Siege\" ORDER BY ? DESC LIMIT 5");

dein Karten_Siege zu = \"Karten_Siege\" ändere sagt er mir "data type cast needed for parameter or null literal"


wenn ich nur Karten_Siege so stehen lasse wie in deinem Code, dann sagt er mir nur dass er das Object von Karten_Siege nicht kennt.

\"Karten_Siege\" Ich muss alles mit slash angeben, ganz verstehen tu ich das bisher noch nicht.
 

DefconDev

Bekanntes Mitglied
1. ja, habe alles so eingefügt wie du es gepostet hast, dann habe ich ResultSet table_01 = ps.executeQuery(); bzw table_01.next() durch eine While schleife laufen lassen.

2. Ist ein String. Also das casten sollte ich ausschließen können, weil der sonst ne cast Exception auswirft, ist mir heute woanders passiert.

3. siehe unten.

4. HSQLDB bzw. die Datenbank selber habe ich in OpenOffice Base vorbereitet.


Java:
2014-09-07T15:16:28.828+0200  SEVERE  null
java.sql.SQLSyntaxErrorException: data type cast needed for parameter or null literal
	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
	at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
	at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
	at matchMaker_v2.SpielerStatsMap.loadMapStats(SpielerStatsMap.java:45)
	at matchMaker_v2.SpielerStatsMap.<init>(SpielerStatsMap.java:31)
	at matchMaker_v2.PreviewStatsMap.<init>(PreviewStatsMap.java:59)
	at matchMaker_v2.PreviewStatsMap.mousePressed(PreviewStatsMap.java:238)
	at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.hsqldb.HsqlException: data type cast needed for parameter or null literal
	at org.hsqldb.error.Error.error(Unknown Source)
	at org.hsqldb.error.Error.error(Unknown Source)
	at org.hsqldb.ExpressionOrderBy.resolveTypes(Unknown Source)
	at org.hsqldb.QuerySpecification.resolveExpressionTypes(Unknown Source)
	at org.hsqldb.QuerySpecification.resolveTypesPartOne(Unknown Source)
	at org.hsqldb.QueryExpression.resolve(Unknown Source)
	at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
	at org.hsqldb.ParserCommand.compilePart(Unknown Source)
	at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
	at org.hsqldb.Session.compileStatement(Unknown Source)
	at org.hsqldb.StatementManager.compile(Unknown Source)
	at org.hsqldb.Session.execute(Unknown Source)
	... 38 more

java.sql.SQLSyntaxErrorException: data type cast needed for parameter or null literal
	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
	at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
	at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
	at matchMaker_v2.SpielerStatsMap.loadMapStats(SpielerStatsMap.java:45)
	at matchMaker_v2.SpielerStatsMap.<init>(SpielerStatsMap.java:31)
	at matchMaker_v2.PreviewStatsMap.<init>(PreviewStatsMap.java:59)
	at matchMaker_v2.PreviewStatsMap.mousePressed(PreviewStatsMap.java:238)
	at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.hsqldb.HsqlException: data type cast needed for parameter or null literal
	at org.hsqldb.error.Error.error(Unknown Source)
	at org.hsqldb.error.Error.error(Unknown Source)
	at org.hsqldb.ExpressionOrderBy.resolveTypes(Unknown Source)
	at org.hsqldb.QuerySpecification.resolveExpressionTypes(Unknown Source)
	at org.hsqldb.QuerySpecification.resolveTypesPartOne(Unknown Source)
	at org.hsqldb.QueryExpression.resolve(Unknown Source)
	at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
	at org.hsqldb.ParserCommand.compilePart(Unknown Source)
	at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
	at org.hsqldb.Session.compileStatement(Unknown Source)
	at org.hsqldb.StatementManager.compile(Unknown Source)
	at org.hsqldb.Session.execute(Unknown Source)
	... 38 more
 

DefconDev

Bekanntes Mitglied
Soweit komme ich gar nicht.

wenn ich das Statement auf das kürze.
Java:
PreparedStatement ps = con.prepareStatement("SELECT * FROM \"Karten_Siege\"");

Java:
ps.setString(1, this.mapName);

wirft er ab dieser Methode folgende Fehlermeldung:

Invalid argument in JDBC call: parameter index out of range: 1



System.out.println(ps.toString());

wird gar nicht auf der Konsole angezeigt.
 

DefconDev

Bekanntes Mitglied
Java:
PreparedStatement ps = con.prepareStatement("SELECT * FROM \"Karten_Siege\" ORDER BY ? DESC LIMIT 5");

wenn ich das so belasse, dann wirft der hier schon die Exception.

data type cast needed for parameter or null literal



Java:
private String mapName;
	private int[] mapArraySieg;
	private int[] mapArrayNiederlage;
	private int mapMaxWin;
	private int mapMaxLoss;
	private String mapMaxWinName;
	private String mapMAxLossName;
	
	
	public SpielerStatsMap(String mapName) throws IOException{
		this.mapName = mapName;
		loadMapStats();
	}
	
	private void loadMapStats(){
		try{
			String db_file_name_prefix = "c:\\Users\\Hades 2\\Desktop\\database\\mydb";
			Connection con = null;
			Class.forName("org.hsqldb.jdbcDriver");
			con = DriverManager.getConnection("jdbc:hsqldb:file:" + db_file_name_prefix,"SA",""); //SA Username : kein Passwort
			Statement statement = con.createStatement();
			
			mapArraySieg = new int[10];
			mapArrayNiederlage = new int[10];
			
		    PreparedStatement ps = con.prepareStatement("SELECT * FROM \"Karten_Siege\" ORDER BY ? DESC LIMIT 5");
		    ps.setString(1, this.mapName);
		    System.out.println(ps.toString());
		    ResultSet table_01 = ps.executeQuery();
			//ResultSet table_01 = statement.executeQuery("SELECT TOP 10 * FROM \"Karten_Siege\" ORDER BY '"+this.mapName+"' DESC");
			int i=0;
			while(table_01.next()){
				
				mapArraySieg[i] = table_01.getInt(this.mapName);
				i++;
			}
			
			table_01 = statement.executeQuery("SELECT TOP 10 * FROM \"Karten_Niederlage\"");
			i=0;
			while(table_01.next()){
				
				mapArrayNiederlage[i] = table_01.getInt(this.mapName);
				i++;
			}
			String mapname = this.mapName;
			mapname.toUpperCase();
			table_01 = statement.executeQuery("SELECT MAX '(\"Akropolis\")' AS \"Akropolis\" FROM \"Karten_Siege\"");
			i=0;
			while(table_01.next()){
				
				mapMaxWin = table_01.getInt(this.mapName);
				//mapMaxWinName = table_01.getString("Spieler");
				System.out.println("Höchster Sieg "+mapMaxWin+"     Name: ");
				i++;
			}
			statement.close();
			con.close();
		}
		catch (SQLException ex){
	     Logger.getLogger(SpielerStatsMap.class.getName()).log(Level.SEVERE, null, ex);
	     ex.printStackTrace();
	   	} 
		catch (ClassNotFoundException ex){
	     Logger.getLogger(SpielerStatsMap.class.getName()).log(Level.SEVERE, null, ex);
		}
		
	}

	public int[] getMapArraySieg() {
		return mapArraySieg;
	}

	public int[] getMapArrayNiederlage() {
		return mapArrayNiederlage;
	}

	
	
	
}
 

taro

Bekanntes Mitglied
mhm ... entweder bin ich blind oder blöd (oder beides) - ich kann dir jedenfalls momentan nicht weiter helfen ...
 

DefconDev

Bekanntes Mitglied
Sorry, bin auf der Couch eingeschlafen^^

Karten_Siege.jpg

So sieht meine DB aus.

Jetzt ist meine Frage, ist der Name des Spaltenkopf ungleich der Spaltenname?
 

DefconDev

Bekanntes Mitglied
Java:
"SELECT TOP 5 * FROM \"Karten_Siege\" ORDER BY "+this.mapName+" DESC"

Java:
"SELECT TOP 5 * FROM \"Karten_Siege\" ORDER BY \"" + this.mapName + "\" DESC"


Das obere ist das erste gewesen, was nicht funktioniert hat.

Das zweite ist jetzt das Richtige, welches endlich funktioniert.

Ein User aus einem anderen Forum hat mich darauf hingewiesen. Verstehen tu ich es noch nicht 100%. Anscheinend muss this.mapName auch in Anführungszeichen, warum auch immer.
 

turtle

Top Contributor
Ich möchte nur kurz anmerken, das mein Lieblingsframework myBATIS;) das Setzen der order by Clause OHNE String-Geraffel beherrscht.

Aus der Doku

By default,using the #{} syntax will cause MyBatis to generate PreparedStatement properties and set the values safely against the PreparedStatement parameters (e.g.?). While this is safer,faster and almost always preferred, sometimes you just want to directly inject a string unmodified into the SQL Statement. For example, for ORDER BY, you might use something like this:
Code:
ORDER BY ${columnName}
Here MyBatis won’t modify or escape the string.

Verifiziert und funzt natürlich:)
Code:
<select id="test" parameterType="String" resultType="Person">
		select id,vorname,nachname from person order by ${value} desc
	</select>
Verwendung im Code
Java:
List<Person> listPersons = session.selectList("Person.test", "vorname");
 

DefconDev

Bekanntes Mitglied
Weil wahrscheinlich in der Mapname Leerzeichen oder andere Sonderzeichen sein können?

Gruß

Claus

Nein, habe mir die Namen meiner Spalten, die die Mapnamen beinhalten auf der Konsole ausgegeben. Ebenfalls in der Script-Datei waren keine Sonderzeichen dort anzutreffen.

Jedenfalls habe ich mir erst mal ein Dokument erstellt, damit ich die Syntax zu den Querys nicht vergessen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Order mit Hibernate Datenbankprogrammierung 3
A Jpql - order by sum ??? Datenbankprogrammierung 13
M Hibernate - Querry mit Eingrenzung und Order; liefert nichts zurück Datenbankprogrammierung 4
byte Hibernate: Comparator für order by ? Datenbankprogrammierung 6
M order by mit ? Datenbankprogrammierung 18
E ORDER BY in postggresql? Datenbankprogrammierung 10
V "Order By"-Klausel -> Dumme Sortierung Datenbankprogrammierung 4
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
T JPA: Nach String statt Primärschlüssel suchen Datenbankprogrammierung 9
M Oracle String aus Column splitten und x Rows daraus erstellen Datenbankprogrammierung 1
C String in Datenbank einfügen Datenbankprogrammierung 11
E Conversion failed when converting date and/or time from character string. Datenbankprogrammierung 3
D String übergeben Datenbankprogrammierung 7
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
M SQLite Suche nach String Datenbankprogrammierung 4
C Objekte aus DB in Strings umwandeln also von List<Objekt> in String Datenbankprogrammierung 6
A ByteArray zu String dann wieder zu ByteArray Datenbankprogrammierung 2
F Dynamischen String in SQL Statement einbinden Datenbankprogrammierung 9
N String Array in While Schleife befüllen Datenbankprogrammierung 2
H Derby: SYSCS_UTIL.SYSCS_EXPORT_QUERY mit String Abfrage in wehre-Klausel nicht möglich Datenbankprogrammierung 3
R Zeichenkette in String zählen Datenbankprogrammierung 3
P GWT Applikation-The method forName(String) is undefined for the type Class Datenbankprogrammierung 10
B Mysql speichert keine 0 alls String Datenbankprogrammierung 11
B MySQL Datenbank Connection als String zurückgeben Datenbankprogrammierung 7
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
I DB-Zelleninhalt mit String vergleichen klappt nicht Datenbankprogrammierung 3
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
M SQL String Datenbankprogrammierung 2
G Sonderzeichen im String codieren Datenbankprogrammierung 4
K Date in SQL-String konvertieren Datenbankprogrammierung 3
B String aus txtDatei auslesen und in Datenbank schreiben. Datenbankprogrammierung 8
T Mittels SQL-String ein Berechnung vornehmen Datenbankprogrammierung 2
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
C Split String für SQl query Datenbankprogrammierung 10
J String[] in eine SQL-Anweisung implementieren Datenbankprogrammierung 13
F ResultSet to String[] Datenbankprogrammierung 3
S Connection String MS Access mit Systemdatenbank / Arbeitsgruppeninformationsdatei Datenbankprogrammierung 4
G Hilfe um String an Datenbank zu schicken Datenbankprogrammierung 3
M SELECT longtext -> als String behandeln Datenbankprogrammierung 6
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
padde479 Connection String Oracle Datenbankprogrammierung 5
T SQL Date String in java.util.Date umwandeln Datenbankprogrammierung 3
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
A JPA + @OneToMany + String ArrayList Datenbankprogrammierung 4
S Char to String aus DB Datenbankprogrammierung 2
Q string Vergleich Datenbankprogrammierung 2
M Konvertierung eines Ojects to String Datenbankprogrammierung 3
M Preparedstatement SQL-string auslesen Datenbankprogrammierung 13
D INSERT String enthält ' wie kann man das Escapen? Datenbankprogrammierung 4
G MsSQL | Statement.execute(String s) Datenbankprogrammierung 3
G CLOB to String - Encoding Problem Datenbankprogrammierung 6
D String[][] Array in Access Datenbank speichern Datenbankprogrammierung 5
K Hibernate: Liste von String-Werten Datenbankprogrammierung 2
S String probleme Datenbankprogrammierung 3
R Nach String in MySQL datenbank suchen Datenbankprogrammierung 7
M Datum's String in MSSQL oder MySQL wie konvertieren ? Datenbankprogrammierung 3
T String in DB(Oracle) schreiben mit Leerzeichen Datenbankprogrammierung 4
K ResultSet: Erste Zeile ausgeben, Datensatz in String speiche Datenbankprogrammierung 13
E Fehler bei String-Insert in MySQL-DB Datenbankprogrammierung 8
L Datum (String) in MySQL-Tabelle (date) speichern Datenbankprogrammierung 4
C SQLException wenn String auf VARCHAR geschrieben wird Datenbankprogrammierung 10
T Methode getColumnIndex(String columnName) ? Datenbankprogrammierung 6
K string literal too long was tun ? Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben