Kind of a guess, but if you're parsing a single SQL statement, it shouldn't have a semicolon at the end. If that's part of the string, can you try removing it?
On Wed, Oct 14, 2015 at 11:11 PM, Ns G <[email protected]> wrote: > Hi All, > > I have a requirement where in i need to create tables to JDBC (actually > Spring). > > I have written the below code > > protected Boolean executeScript(final Reader reader, String action, Long > serviceId) throws IOException, SQLException { > try { > long start = System.currentTimeMillis(); > final BufferedReader bufferedReader = new > BufferedReader(reader); > Class.forName("org.apache.phoenix.jdbc.PhoenixDriver"); > Connection connection = null; > String url = "jdbc:phoenix:<regionserver>"; > connection = DriverManager.getConnection(url); > for (String sql = bufferedReader.readLine(); sql != null; sql > = bufferedReader.readLine()) { > String trimmedSql = sql.trim(); > final boolean ignore = (trimmedSql.length() == 0 || > trimmedSql.startsWith("--") || trimmedSql.startsWith("//") || > trimmedSql.startsWith("/*")); > if (!ignore) { > if (trimmedSql.endsWith(";")) { > trimmedSql = trimmedSql.substring(0, > trimmedSql.length() - 1); > } > Statement stmt = null; > /* tables */ > stmt = connection.createStatement(); > if (action.equalsIgnoreCase("CREATE") && > (trimmedSql.toUpperCase().startsWith("CREATE") || > trimmedSql.toUpperCase().startsWith("UPSERT"))){ > stmt.execute( MessageFormat.format(trimmedSql, > getSchemNameFromServiceId(serviceId))); > } else if (action.equalsIgnoreCase("DROP") && > trimmedSql.toUpperCase().startsWith("DROP")){ > stmt.execute( MessageFormat.format(trimmedSql, > getSchemNameFromServiceId(serviceId))); > } > stmt.close(); > /* SPRING CODE */ > > /* if > (action.equalsIgnoreCase("CREATE") && > (trimmedSql.toUpperCase().startsWith("CREATE") || > trimmedSql.toUpperCase().startsWith("UPSERT"))){ > jdbcTemplate.execute( > MessageFormat.format(trimmedSql, getSchemNameFromServiceId(serviceId))); > } else if (action.equalsIgnoreCase("DROP") && > trimmedSql.toUpperCase().startsWith("DROP")){ > jdbcTemplate.execute( > MessageFormat.format(trimmedSql, getSchemNameFromServiceId(serviceId)));*/ > } > } > return true; > } catch (Exception e) { > return false; > } > > } > > My .sql file is under src/main/resources/queries folder. > > My sql query is > > CREATE TABLE TEST (ID UNSIGNED_LONG NOT NULL PRIMARY KEY, ID1 VARCHAR) > SALT_BUCKETS=32, COMPRESSION='SNAPPY'; > > I am getting below error > > org.apache.phoenix.exception.PhoenixParserException: ERROR 604 (42P00): > Syntax error. Mismatched input. Expecting "STRING_LITERAL", got "<EOF>" at > line 1, column 113. > > I saw that a similiar case was raised previously for 4.2 version, where in > the user didnt give a comma, But here the query works when executing > through sqlline. > > Can anyone help me please? > > Thanks, > Durga Prasad >
