下面这些代码有问题:
    public void update() {
        String query =
                "update UserManager set NAME=?,AGE=?,PHONE=?,PASSPORTNUMBER=? where ";
        String select = "select * from UserManager where ";
        String keyword = null;
        String xuanze = null;
        int zhenjia = 0;        while (true) {
            System.out.println("\n\t请选择更改方式:");
            System.out.println("\n\t1.按姓名更改");
            System.out.println("\n\t2.按会员ID修改");
            System.out.println("\n\t3.返回上级菜单");            System.out.print("\n\t请选择:");
            xuanze = dedao.next();            if (xuanze.equals("1")) {
                select = select + "NAME=?";
                query = query + "NAME=?";
                System.out.print("\n\t请输入你要更改的会员的姓名:");
                keyword = dedao.next();            } else if (xuanze.equals("2")) {
                select = select + "UID=?";
                query = query + "UID=?";
                System.out.print("\n\t请输入你要更改的会员的ID:(不要输入前面的0)");
                keyword = dedao.next();            }            else if (xuanze.equals("3")) {
                break;            }
            else {
                System.out.println("\n\t错误!");
                continue;
            }            zhenjia = query(0, select, keyword);
            if (zhenjia == 0) {
                System.out.print("\n\t程序不能进行修改");
            }            else {                System.out.print("\t请输入新的姓名:");
                name = dedao.next();
                System.out.println("\t\t姓名验证通过!");                while (true) {
                    System.out.print("\t请输入新的年龄:");
                    age = dedao.nextInt();                    if (age >= 18 && age <= 60)
                        break;
                }
                System.out.println("\t\t年龄验证通过!");                System.out.print("\t请输入新的身份证号:");
                passportnumber = dedao.next();
                checkpassportnumber(passportnumber);
                System.out.println("\t\t身份证验证通过!");                System.out.print("\t请输入新的联系方式:");
                phone = dedao.next();
                System.out.println("\t\t联系方法验证通过!");                changedata(1, query, name, age, passportnumber, phone, keyword,
                           "更新");
            }            System.out.print("\n\t继续吗?(y/n)  ");
            String shifou = dedao.next();
            if (shifou.equals("n"))
                break;        }    }   public int query(int i, String query, String keyword) {        int zhenjia = 0;        try {
            Connection connection = DriverManager.getConnection(
                    "jdbc:odbc:NetBarServer");
            PreparedStatement preparedstatement = connection.prepareStatement(
                    query);            if (i == 0) {
                preparedstatement.setString(1, keyword);
            }            ResultSet rs = preparedstatement.executeQuery();            int a = 0;
            int jihao = 0;            String UID = null;
            String qianzhui = "U";            while (rs.next()) {
                jihao = 1;
                if (a == 0) {
                    System.out.println("\n查询结果如下:\n");
                    System.out.println("\t会员ID\t\t姓名\t\t\t年龄\t\t身份证号\t\t\t联系方式");
                    a = 1;                }                UID = rs.getString(1).trim();
                if (UID.length() < 4) {
                    int changdu = UID.length();
                    int changeUIDchangdu = 0;                    UID = UID.substring(1, changdu);
                    changeUIDchangdu = UID.length();                    if (changeUIDchangdu == 1) {
                        UID = "00" + UID;
                    }                    else {
                        UID = "0" + UID;
                    }                }                UID = qianzhui + UID;                System.out.print("\t" + UID.trim());
                System.out.print("\t\t" + rs.getString(2).trim());
                System.out.print("\t\t\t" + rs.getString(3).trim());
                System.out.print("\t\t" + rs.getString(4).trim() + "\t");
                System.out.print("\t" + rs.getString(5).trim());
                System.out.println("");
                zhenjia = 1;            }            preparedstatement.clearParameters();
            rs.close();
            preparedstatement.close();
            connection.close();            if (jihao == 0) {
                System.out.println("没有找到任何数据!");            }
            
                  } catch (Exception e) {
            System.out.println(e);
        }finally{
         return zhenjia;
        }
    }具体问题是,当我第一次调用update方法时,假如我选按会员ID修改,然后输入一个存在的会员ID,程序不会出错!而且确实也修改了数据库里的数据!当修改完后,程序问是否继续。如果输入继续,程序再一次问按什么方式修改。这个时候,不管你选按什么方式,输入什么数据。程序都出错!错误信息是:java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]COUNT 字段不正确或语法错误! 如果在第一次修改完数据后输入n,也就是不继续,退出update这个方法,然后再调用update的方法。就又能修改了!  这到底是咋回事啊?  哪位高人指点我一下 谢谢了!

解决方案 »

  1.   

    因为changedata(1, query, name, age, passportnumber, phone, keyword,"更新");没有执行到这里就出错了 所以changedata方法的内容没有给出来。 谢谢大家了!
      

  2.   

    贴这么大一段出来,csdn这里又没缩进.可能高手看着觉得累...楼主还是简化整理一下代码再发好了.
      

  3.   

    你的问题出在 update() 的第一和第二中将 query, select 两个字符串搬到 while 循环的里面去。
    因为你在 while 循环中做了字符串加。第一次出来的 query 是:
      select * from UserManager where UID=?
    而第二次出来的 query 就变成了:
       select * from UserManager where UID=?UID=?
    以后继续一执行一次都会增加一个“UID=?”。
    你只要将这两个移到 while 循体内就可以了。
      

  4.   

    你那个格式化UID的那段太麻烦了。试试下面的:
      int temp = rs.getInt("uid");
      uid = new Formatter().format("%03d", temp).toString();
    这个可比lz上面的那一串省事多了。