崩溃 !一个让新手很郁闷的问题
下面这些代码有问题:
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 循体内就可以了。