2017-05-01 71 views
-1

我必須做一些插入到我的數據庫(SQL Developer)從Java。 在我的數據庫中的信息是這樣的:從java插入對象到數據庫

create or replace type shop as object (name varchar2(30),price number(10)); 

和表:

create table product (id number, obj shop); 
現在

,試圖從我的Java代碼插入到我的數據庫時,我有一個ORA-00932錯誤:不一致的數據類型。

我想這是因爲我插入的數據。 我已經創建了一個插入函數,它有一個id和一個字符串。 我認爲問題在於字符串,因爲我需要在我的「PRODUCT」表中插入一些「SHOP」值。 但我不知道如何從我的java代碼中插入「SHOP」值。 我的Java代碼如下所示:

public class ShopManager { 
    public void create(Integer ID,String prod) throws SQLException { 
     Connection con = Database.getConnection(); 
     try (PreparedStatement pstmt = con.prepareStatement("insert into product (id,obj) values (?,?)")) { 
      pstmt.setInt(1,ID); 
      pstmt.setString(2, product); 
      pstmt.executeUpdate(); 
     } 
} 

這是我嘗試插入:

ShopManager man = new ShopManager(); 
string manager = "shop(\'Name1\',10)"; 
man.create(1,manager); 
//and here i commit 

所以,事實是,我不知道該怎麼做不插入從Java STRING而不是我數據庫中的商店對象。

+0

您正在處理關係數據庫,爲什麼處理對象?創建一個名爲'SHOP'的表,它有兩列:'name'和'price',並在每次插入時向表中添加一行。 – alfasin

+0

我在那裏的唯一ID就是產品ID。 – lexraid

回答

1

可以使用shop對象構造的INSERT語句的一部分,但你同時需要一個產品ID和店鋪價格爲數字,而不是組合的字符串:

insert into product (id, obj) values (?, shop(?, ?)) 

...這樣的字符串變成您需要設置的第二個參數,並且您需要確定其他兩個參數值來自哪裏。它看起來就像您應在功能規格更改爲:

public void create(Integer prodID, String name, Integer shopID) 

,然後將其稱爲:雖然那個假設的「價格」永遠是上午整數,這恐怕是不可能的

man.create(1, "Name1", 10); 

,所以第三個函數參數可能應該是一個float類型(也適當的調用)。