我在数据库里定义了一个商品表,字段类型有varchar型,有int型,还有float型 ,现在我在程序里的实体类都用的是String型,程序添加和删除都能实现,可是到了修改就实现不了,我想知道是不是类型不匹配的原因啊,请问是不是我在程序里定义的实体类的数据类型必须和数据库里字段类型一致啊 ???如果是那我的添加和删除怎么就能实现啊 ????

解决方案 »

  1.   

    首先如果你是用Hibernate等ORM框架,如果是,实体类和数据库字段的类型映射是定义在配置文件中的,所以添加和删除就不可能成功。数据库的int和float应该对应实体类的Integer和Float才能正常运行。那另外一种可能就是你没用框架自己用JDBC写的?或者JPA的Annotation来实现的?你应该先搞清楚你添加和删除的逻辑是怎么做的,是直接操作对象来持久化达到添加和删除的目的还是你自己在Java里面跑了SQL语句。由于信息不足,所以无法给你解决问题,贴一些主要代码出来看看吧,类型匹配说白了就是给框架去识别然后生成sql语句用的
      

  2.   

    从你的简单描述来看,确有可能是类型匹配的问题,这首先要看你定义的实体类的类型,对于定义的实体类的类型需要和数据库的类型想对应,比如[color=#FF00FF]varchar对应String类型,int对应int类型等等,还有就是你操纵数据库修改的时候,如果你用JDBC写的话,肯定需要传值,而你传的值的类型就必须和你定义的实体类的类型相同[/color]
      

  3.   

    就说是 自己用 JDBC 来写吧,
    程序中都用 String 是很好的一种设计方式,是很成功的……
    那么 String sql = "insert into myTable(myInt,myFloat,myString) values(?,?,?)";
    PrepareStatement pstm = connection.preparedStatement(sql);// voBean 代表你的实体 Bean,其中 有 myInt,myFloat,myString 属性,对是你说的 String 类型,并且都有 getter,setter;pstm.setString(1,voBean.getMyInt());
    pstm.setStrint(2,voBean.getMyFloat());
    pstm.setString(3,voBean.getMyString());pstm.executeUpdate();// 一切 OK
    有几点需要注意:
    1.你的 JDBC 是自动进行 Commit 的,如果不是,你就要手动 Commit 到数据库
        (如果你没有设置 connection.setAutoCommit(false) ,后来就不需要你 connection.commit())
    2.你要确定 你的 实体Bean 中有值
      

  4.   

    我是自己用jdbc来写
    class shangpin{
    private String ID;
    private String Name;
    private String Price;
    private String Sell;
    public setID(String ID){
    this.ID=ID;
    }
    public String getID(){
    return ID; 
    }
    .....
    }
    而我的数据库里
    int ID
    varchar Name
    float Price
    varchar Sell
    请问这样定义对不
    就是说实体类的类型和数据库里的不匹配
      

  5.   

    把你所要修改的数据对应相应的列转换就行了,如果得到String,要修改的行是int,那对应转换一下,重新更新
      

  6.   

    class shangpin{ 
    private int ID; 
    private String Name; 
    private float Price; 
    private String Sell; 
    public setID(int ID){ 
    this.ID=ID; 

    public String getID(){ 
    return ID;  

    ..... 
    } 这样再试试
      

  7.   

    可是如果改成你说的那样在读取文本框的内容的时候如
    Shangpin sp=new Shangpin();
    sp.setID=JTextField.gettext().trim();
    的时候就的进行类型的转换,我觉的这样很麻烦,
    按我的定义,添加和删除 都能实现,按说类型不匹配啊 ,怎么可以实现呢???
      

  8.   

    可是如果改成你说的那样在读取文本框的内容的时候如 
    Shangpin sp=new Shangpin(); 
    sp.setID=JTextField.gettext().trim(); 
    的时候就的进行类型的转换,我觉的这样很麻烦, 
    按我的定义,添加和删除 都能实现,按说类型不匹配啊 ,怎么可以实现呢???