Hsqldb und text tables source not found

Status
Nicht offen für weitere Antworten.

needJavaProz

Mitglied
Hallo zusammen

ich hab ein problem und zwar findet es irgendwie die source nicht im sql command:

SET TABLE mytable SOURCE test.csv;fs=|

bringt:

java.sql.SQLException: Invalid TEXT table source string in statement [SET TABLE mytable SOURCE test.csv]
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source)
at Nexus.DatabaseAccess.main(DatabaseAccess.java:31)


ich hab test.csv im Folder C:\properties\DB aber irgendwie packt ers nicht.

Weiss jemand von euch vielleicht rat das wäre echt super 🙂

danke und gruss
Thomas


csv-datei:

1;Relation
2;Police
3;isin
4;securitydescription
5;costprice
6;marketprice
7;units
8;volume
9;provision
10;currency
11;factor
12;fundlistrate
13;rate
14;volume
15;broker
16;brokercode
17;VVvolumeCHF




Code:
package Nexus;

import java.sql.*;


public class DatabaseAccess {
	
	static Connection cn;
	
	public static void main(String[] args)  {
		try {
			DriverManager.registerDriver(new org.hsqldb.jdbcDriver());
			cn = DriverManager.getConnection( "jdbc:hsqldb:file:C:/Properties/DB/", "sa", "" );
			
			
			Statement st = cn.createStatement();
			Statement stCreate = cn.createStatement();
			String sqlCreate = "CREATE TABLE mytable(id varchar, name varchar)";
			
			st.executeQuery(sqlCreate);
			String sql = "SET TABLE mytable SOURCE test.csv;fs=;";
			
			
	//		st.execute(sql);
			st.executeQuery(sql);
		
		} catch (SQLException Se) {
			Se.printStackTrace();
		}	
	}
}
 
das problem ist dein fs=

du musst schon ... SOURCE "test.csv;fs=;" schreiben, den normalerweise bedeutet ein ; das ende eines statements. und nur fs= einzeln betrachtet mag hsqldb halt nicht
 
für den nächsten 🙂

noch ein kleiner netter hinweis ein ' und kein " für string schnallt er nicht ecape hin oder her juhu.

.script file:

------------------------

CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE TEXT TABLE POLICEN(ID VARCHAR(20),NAME VARCHAR(20),VAR VARCHAR(20),VALUE VARCHAR(20))
SET TABLE POLICEN SOURCE "policen.csv;fs=\semi"
CREATE TEXT TABLE FELDER(ID VARCHAR(10),NAME VARCHAR(20))
SET TABLE FELDER SOURCE "fields.csv;fs=\semi"
CREATE TEXT TABLE POLICENFIELDMAP(POLICEN_ID VARCHAR(20),FIELDS_ID VARCHAR(20))
SET TABLE POLICENFIELDMAP SOURCE "policenfieldmap.csv;fs=\semi"
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 10

-------------------------


Code:
package Nexus;

import java.sql.*;
import java.io.*;
import java.util.*;



public class DatabaseAccess {
	
	static Connection cn;	
	
	public void setConnection() throws SQLException {
		DriverManager.registerDriver(new org.hsqldb.jdbcDriver());
		cn = DriverManager.getConnection( "jdbc:hsqldb:file:C:/Properties/DB/", "sa", "" );
		Statement st = cn.createStatement();
//		Statement stCreate = cn.createStatement();
		String policenSql = "SET TABLE POLICENFIELDMAP SOURCE \"policenfieldmap.csv;fs=\\semi\"";
		String pfmSql = "SET TABLE POLICENFIELDMAP SOURCE \"policenfieldmap.csv;fs=\\semi\"";
		String fieldsSql = "SET TABLE FELDER SOURCE \"fields.csv;fs=\\semi\"";
		
		st.executeQuery(policenSql);
		st.executeQuery(pfmSql);
		st.executeQuery(fieldsSql);
	}
	
	
	public void setTextTables() {
		
		
		
	}
	
	public ResultSet getFields(String policenname) throws SQLException {
		ArrayList<String> fieldlist = null;
		Statement st = cn.createStatement();
		ResultSet rs = null;
		
		rs = st.executeQuery("SELECT F.NAME from FELDER F, POLICENFIELDMAP PFM , POLICEN P where P.ID = PFM.POLICEN_ID and PFM.FIELDS_ID = F.ID and (P.NAME = \'" + policenname + "\')");
		
		while (rs.next()) {
			String name = rs.getString("NAME");
			System.out.println(name);	
		}
		return rs;
	}
	
	
	
	
	public static void main(String[] args)  {
		try {
			
			String policenname = null;
			ResultSet rs = null;
			policenname = "Fundprovision";
			DatabaseAccess DA = new DatabaseAccess();
			DA.setConnection();
			rs = DA.getFields(policenname);
			
			System.out.println("bla");
		} catch (SQLException Se) {
			Se.printStackTrace();
		}	
	}
}
 
needJavaProz hat gesagt.:
für den nächsten 🙂

noch ein kleiner netter hinweis ein ' und kein " für string schnallt er nicht ecape hin oder her juhu.

naja, das ist halt kein gewöhnlicher string wie wenn man etwas als string-value für eine spalte angibt sondern fällt ehr in die kategorie tabelle/spalte, und die schreibt man in ""
manchmal sollte man halt der dokumentation vertrauen 😉
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben