2016-08-05 56 views
0

我一直在試圖以編程方式將我的REST Web服務鏈接到數據庫,但無法成功完成此操作。我是新來的,所以我跟着一些教程,看了一些視頻,但沒有做任何工作。澤西島REST客戶端沒有創建數據庫

下面是我的數據庫處理程序文件:

import com.feedme.model.Food; 
import java.sql.*; 
import java.util.ArrayList; 
import java.util.List; 

public class MyDBHandler { 
// List of variables 
public static final String DATABASE_NAME = "restaurants"; 

public static final String TABLE_FOOD = "food"; 
public static final String FOOD_COLUMN_ID = "_fid"; 
public static final String FOOD_COLUMN_NAME = "fname"; 
public static final String FOOD_COLUMN_PRICE = "fprice"; 
public static final String FOOD_COLUMN_ICON = "ficon"; 
public static final String MENU_COLUMN_ID = "_mid"; 
public static final String RESTO_COLUMN_ID = "_rid"; 
public static final String FOOD_COLUMN_SUPPLEMENTS = "fsupplements"; 

public static String strSeparator = "__,__"; 

// JDBC driver name and database URL 
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
static final String DB_URL = "jdbc:derby://localhost:1527/"; 

// Database credentials 
static final String USER = "user"; 
static final String PASS = "password"; 

public static void main(String[] args) { 
    System.out.println("In MyDBHandler.java"); 
    Connection conn = null; 
    Statement db = null; 

    try { 

     // Register JDBC driver 
     Class.forName(JDBC_DRIVER); 

     // Open a connection 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 

     db = conn.createStatement(); 

     // Create the resto database 
     String sql = "CREATE DATABASE " + DATABASE_NAME; 
     db.executeUpdate(sql); 

     // Create the food table 
     String food = "CREATE TABLE " + TABLE_FOOD + "(" + 
      FOOD_COLUMN_ID + " INTEGER PRIMARY KEY " + ", " + 
      FOOD_COLUMN_NAME + " VARCHAR(20) " + ", " + 
      FOOD_COLUMN_PRICE + " VARCHAR(20) " + ", " + 
      FOOD_COLUMN_ICON + " VARCHAR(20) " + ", " + 
      RESTO_COLUMN_ID + " VARCHAR(20) " + ", " + 
      MENU_COLUMN_ID + " VARCHAR(20) " + ", " + 
      FOOD_COLUMN_SUPPLEMENTS + " VARCHAR(20) " + 
      ")"; 
     db.executeUpdate(food); 

    }catch(SQLException se){ 
     //Handle errors for JDBC 
     se.printStackTrace(); 
    }catch(Exception e){ 
     //Handle errors for Class.forName 
     e.printStackTrace(); 
    }finally{ 
     //finally block used to close resources 
     try{ 
      if(db != null) 
       db.close(); 
     }catch(SQLException se){ 

     } 
     try{ 
      if(conn != null) 
       conn.close(); 
     }catch(SQLException se){ 
      se.printStackTrace(); 
     }//end finally try 
    }//end try 
}  

// Add a new food to the Food table 
public Food addFood(Food food) { 
    Connection conn = null; 
    Statement db = null; 

    try { 
     // Register JDBC driver 
     Class.forName(JDBC_DRIVER); 

     // Open a connection 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 

     db = conn.createStatement(); 

     String suppString = convertArrayToString(food.getSupplements()); 

     String query = "INSERT INTO " + TABLE_FOOD + " VALUES(" + food.getFname() + 
       ", " + food.getFprice() + ", " + food.getFicon() + ", " + food.getrId() + 
       ", " + food.getmId() + ", " + suppString + ");"; 
     db.executeUpdate(query); 
    } catch(SQLException se){ 
     //Handle errors for JDBC 
     se.printStackTrace(); 
    }catch(Exception e){ 
     //Handle errors for Class.forName 
     e.printStackTrace(); 
    }finally{ 
     //finally block used to close resources 
     try{ 
      if(db != null) 
       db.close(); 
     }catch(SQLException se){ 

     } 
     try{ 
      if(conn != null) 
       conn.close(); 
     }catch(SQLException se){ 
      se.printStackTrace(); 
     }    
    } 

    return food; 
} 

我希望有數據庫和創建的表,然後通過POST請求填充表。但沒有任何反應。

下面是(這似乎並不如此,雖然這樣做)應該撥打電話到數據庫的資源文件:

@Path("/foods/") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public class FoodResource { 

MyDBHandler dbHandler = new MyDBHandler(); 

@GET 
public List<Food> getFoods() { 
    List<Food> foodList = dbHandler.getAllFoods(); 

    return foodList; 
} 

@POST 
public Food addFood(Food food) { 
    return dbHandler.addFood(food);     
} 

@PUT 
@Path("/{foodId}") 
public Food updateFood(@PathParam("messageId") long id, Food food) { 
    return dbHandler.updateFood(id, food); 
} 

@DELETE 
@Path("/{messageId}") 
public void deleteMessage(@PathParam("messageId") long id) { 
    dbHandler.deleteFood(id); 
} 

@GET 
@Path("/{foodId}") 
public Food getFood(@PathParam("foodId") long id) {   
    return dbHandler.getFood(id);   
} 

} 

我上什麼都不例外日誌所以它讓我真的很困惑。

回答

0

新的艱難但這裏有幾件事情可以讓你走。提供的代碼有幾個問題。我會仔細檢查你的URL連接到MySQL。它看起來並不適合我。在創建它之前,您還試圖連接到數據庫restaurants

您正在捕捉幾個例外並將其打印出來。我很驚訝你沒有看到任何這些與你運行它的代碼(我在運行你的代碼時)。在問題中提供例外信息總是有用的。

+0

感謝您輸入@Phil。我剛剛編輯了這篇文章。我實際上在我的例外日誌上什麼都沒有。什麼可能是錯的? –

+0

當我運行你的代碼的主要方法時,它不會通過'conn = DriverManager.getConnection(DB_URL,USER,PASS);'而不拋出異常。您是否嘗試過使用調試器打印語句或單步執行代碼? (我仍然認爲你的網址錯了。) – Phil

相關問題