u011939977
lishuanghe214
采纳率100%
2015-01-21 02:31

Sql语句,当在页面插入一个字段的时候,和数据库中的表字段进行对比,有这个名字就数量相加

已采纳

Sql语句,当在页面插入一个字段的时候,和数据库中的表字段进行对比,有这个名字就数量相加,没有的话重新加入一条新的记录,Sql语句怎么实现?
当我页面添加的是“利群”时,添加一盒,那么数据库中利群这条记录中的num字段中的4变成5,如果是页面添加的是“黄鹤楼”同理,如果添加的不是name字段中的这两个,就新插入一条数据。Sql语句怎么写??急急急。
是Mysql的数据库图片说明

    public static void selectName(Kcgl kcgl){
        ConnectionPool pool = ConnectionPool.getInstance();
        Connection connection = pool.getConnection();//链接到数据源
        PreparedStatement ps=null;
        ResultSet rs=null;
        //Kcgl kcgls = new Kcgl();
        String seq = " select goods_stock_id,name,num from goods_stock where name = ? ";
        try {
            ps = connection.prepareStatement(seq);
            ps.setString(1, kcgl.getName());//第一个参数是设置参数的序数位置,第二个参数是设置给参数的值
            System.out.println(ps+"+ffffffff");
            rs=ps.executeQuery();//返回不为空的结果集
            //System.out.println(rs+"mmmmmmmmm");

            if(rs==null){
                //String seqq = "update goods_stock set num=? where goods_stock_id = ?";
                System.out.println(rs.getString("name")+"+pppppppppppp");
                String seqq = "INSERT INTO goods_stock (name, spec, num, goods_type_id) VALUES (?, ?, ?, ?)";
                    ps = connection.prepareStatement(seqq);
                    ps.setString(1, kcgl.getName());  
                    ps.setString(2, kcgl.getSpec());  
                    ps.setInt(3, kcgl.getNum());
                    ps.setString(4, kcgl.getGoods_type_id());  
                    // 执行更新操作  
                    ps.executeUpdate(); 
            }
            else{
                while(rs.next()) {//取得结果集,一定要用while,循环输出
                System.out.println("555555555555");
                int num2 = Integer.valueOf(kcgl.getNum())+Integer.valueOf(rs.getInt("num"));
                String seq3 = "update goods_stock set num=? where goods_stock_id = ?";
                    ps = connection.prepareStatement(seq3);
                    ps.setInt(1, kcgl.getNum());  
                    ps.setString(2, kcgl.getGoods_stock_id()); 
                    ps.executeUpdate(); 
                }
            }

        }
        catch(SQLException e)
        {
            e.printStackTrace();
            //return null;
        }
        finally
        {   DBUtil.closeResultSet(rs);
            DBUtil.closePreparedStatement(ps);
            pool.freeConnection(connection);
        }
    }
    这个是我的那个JDBC的方法,应该怎么改啊,
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • hi_shu hi_shu 6年前

    这不是一条sql语句就能解决的,用存储过程,很简单。

    Declare v_Count int
    Select v_Count=count(*) From table_name Where name='利群';
    
    if  v_Count>0  Then
    Update ……
    Else
    Insert ……
    End if
    
    点赞 评论 复制链接分享
  • save4me save4me 6年前

    如果你使用的是MySQL,参考mysql "ON DUPLICATE KEY UPDATE" 语法

    点赞 评论 复制链接分享
  • christinahello christinahello 6年前

    如果是sql语句,就用存储过程
    if…… else……

    如果是在程序里面,EF有自带的功能可以完成

    点赞 评论 复制链接分享
  • q107770540 兔子党-督察 6年前
    点赞 评论 复制链接分享

相关推荐