2016-08-05 19 views
0

私はREST Webサービスをデータベースにプログラムでリンクしようとしていますが、成功することはできません。私はこれが初めてなので、いくつかのチュートリアルに続き、いくつかのビデオを見ましたが、私は何もしません。私は、データベースと作成したテーブルを持って、その後、POSTリクエストによってテーブルを移入することを期待Jersey 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; 
} 

以下は私のデータベースハンドラファイルです。しかし、何も起こりません。以下は

(かかわらず、そうしていないようです)データベースへの呼び出しを行うことになったリソースファイルです:

@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

新しくなることは難しいですが、ここではあなたを得るためにいくつかのことがあります。提供されるコードにはいくつかの問題があります。私はmysqlに接続するためのあなたのURLをチェックします。それは私には見えません。また、作成する前にデータベースrestaurantsに接続しようとしています。

いくつかの例外をキャッチして印刷しています。私はあなたがコードを実行しているときに(あなたのコードを実行したときに)実行したコードでこれらのどれも表示されないことに驚いています。質問に例外情報を提供することは常に有用です。

+0

@Philを入力していただきありがとうございます。私はその投稿を編集しました。私は実際に私の例外ログには何も得ていない。何が間違っていますか? –

+0

あなたのコードのmainメソッドを実行すると、例外をスローせずに 'conn = DriverManager.getConnection(DB_URL、USER、PASS); 'になりません。あなたは印刷ステートメントを入れたり、デバッガでコードをステップ実行しようとしましたか? (私はまだあなたのURLが間違っていると思います。) – Phil

関連する問題