首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

崩溃 !一个让新手很郁闷的有关问题

2012-02-01 
崩溃 !一个让新手很郁闷的问题下面这些代码有问题:publicvoidupdate(){StringqueryupdateUserManagerset

崩溃 !一个让新手很郁闷的问题
下面这些代码有问题:
        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的方法。就又能修改了!     这到底是咋回事啊?     哪位高人指点我一下   谢谢了!

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

热点排行