org.postgresql.util.PSQLException:错误:语法错误在或附近“(”

我曾经发过一个Web应用程序,可以通过maven eclipse在Heroku上部署。

Group Id:org.glassfish.jersey.archetypes

工件ID:jersey-heroku-webapp

版本:2.17

我测试了localhost和POSTMAN上的应用POSTMAN ,它运行正常。 我将它推送到heroku以在servlet容器上测试它,但我得到520 OK 520它只是我在SQLEXCEPTION中返回的数字。 在Heroku日志中我发现了这个错误:

 2015-05-13T13:10:37.364388+00:00 app[web.1]: at java.lang.Thread.run(Thread.j ava:745) 2015-05-13T13:10:37.389547+00:00 app[web.1]: org.postgresql.util.PSQLException: ERROR: syntax error at or near "(" 2015-05-13T13:10:37.389560+00:00 app[web.1]: Position: 45 2015-05-13T13:10:37.389740+00:00 app[web.1]: at org.postgresql.core.v3.QueryE xecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) 

数据库类:

 public class Database { public Database() { } public void drivercConnection() { try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("jar works :) "); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static Connection getConnection() throws URISyntaxException, SQLException { URI dbUri = new URI(System.getenv("DATABASE_URL")); String username = dbUri.getUserInfo().split(":")[0]; String password = dbUri.getUserInfo().split(":")[1]; String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ':' + dbUri.getPort() + dbUri.getPath(); Connection con = DriverManager.getConnection(dbUrl, username, password); return con; } public int insertData(String mac, int route, double latD, double longD) { int status = 201; drivercConnection(); try { Connection con = null; try { con = getConnection(); } catch (URISyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); } // Create a statement Statement stt = con.createStatement(); DatabaseMetaData dbm = con.getMetaData(); ResultSet tables = dbm.getTables(null, null, "bus", null); if (tables.next()) { // stt.execute("ALTER TABLE bus AUTO_INCREMENT = 1"); return insertRecord(mac, route, latD, longD, status, con); } else { // Create bus table stt.execute("CREATE TABLE IF NOT EXISTS bus" + "(id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY," + "mac VARCHAR(30) NOT NULL UNIQUE," + "route int(11) NOT NULL," + "latitude FLOAT(10,6) NOT NULL," + "longitude FLOAT(10,6) NOT NULL," + "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); stt.execute("CREATE EVENT IF NOT EXISTS AutoDelete " + "ON SCHEDULE EVERY 3 MINUTE " + "DO " + "DELETE FROM bus WHERE created_at < (NOW() - INTERVAL 3 MINUTE)"); stt.execute("SET GLOBAL event_scheduler = ON"); first_data_insert(mac, route, latD, longD, con); } return status; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return status = 520; } } 

表明sql查询不对。 你可能想把它改成这样的东西。

 DROP TABLE IF EXISTS bus; CREATE TABLE bus( id SERIAL PRIMARY KEY, mac VARCHAR(30) NOT NULL UNIQUE, route int NOT NULL, latitude numeric(10,6) NOT NULL, longitude numeric(10,6) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP); 

请注意,create statement(afaik)不是sql标准命令。 因此,因为您正在使用postgresql,所以需要将其更改为postgresql create statement。