Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象从java插入数据库_Java_Oracle Sqldeveloper - Fatal编程技术网

将对象从java插入数据库

将对象从java插入数据库,java,oracle-sqldeveloper,Java,Oracle Sqldeveloper,我必须从java向我的数据库(SQL Developer)中插入一些内容。 在我的数据库中找到的信息如下所示: create or replace type shop as object (name varchar2(30),price number(10)); public class ShopManager { public void create(Integer ID,String prod) throws SQLException { Connectio

我必须从java向我的数据库(SQL Developer)中插入一些内容。 在我的数据库中找到的信息如下所示:

create or replace type shop as object (name varchar2(30),price number(10));
   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();
        }
}
和一张桌子:

create table product (id number, obj shop);
现在,当尝试从java代码插入数据库时,我遇到了一个错误,如ORA-00932:不一致的数据类型

我想这是因为我插入了数据。 我创建了一个要插入的函数,它有一个id和一个字符串。 我认为问题在于这个字符串,因为我需要在“PRODUCT”表中插入一些“SHOP”值。 但我不知道如何从java代码中插入“SHOP”值。 我的java代码如下所示:

create or replace type shop as object (name varchar2(30),price number(10));
   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插入字符串,而不是插入数据库中的shop对象。

您可以在insert语句中使用
shop
对象构造函数,但您需要产品ID和shop price作为数字,而不是组合字符串:

insert into product (id, obj) values (?, shop(?, ?))
。。。因此字符串成为您需要设置的第二个参数,您需要确定其他两个参数值的来源。看起来您应该将函数规格更改为:

public void create(Integer prodID, String name, Integer shopID)
然后称之为:

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

尽管这假设“price”始终是am integer,但这可能不太可能,因此第三个函数参数应该是float类型(也有适当的set调用)。

您处理的是关系数据库,为什么要处理对象?创建一个名为
SHOP
的表,该表有两列:
name
price
并在每次插入时向表中添加一行。我在表中唯一的ID就是产品ID。