私は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);
}
}
私は例外に何も得るので、それは混乱して本当に私を残してログインします。
@Philを入力していただきありがとうございます。私はその投稿を編集しました。私は実際に私の例外ログには何も得ていない。何が間違っていますか? –
あなたのコードのmainメソッドを実行すると、例外をスローせずに 'conn = DriverManager.getConnection(DB_URL、USER、PASS); 'になりません。あなたは印刷ステートメントを入れたり、デバッガでコードをステップ実行しようとしましたか? (私はまだあなたのURLが間違っていると思います。) – Phil