我创建了一个Web应用程序,该Web应用程序可以通过maven eclipse部署在Heroku上。
组ID:org.glassfish.jersey.archetypes
工件ID:jersey-heroku-webapp
版本:2.17
我在本地主机上测试了该应用程序,POSTMAN并且工作正常。我将其推送到heroku以便在servlet容器上对其进行测试,但是我得到520 OK520,这只是我在SQLEXCEPTION中返回的数字。在Heroku日志中,我发现此错误:
POSTMAN
520 OK
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语句(afaik)不是sql标准命令。因此,由于您使用的是postgresql,因此需要将其更改为postgresql create语句。