下面这些代码有问题:
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的方法。就又能修改了! 这到底是咋回事啊? 哪位高人指点我一下 谢谢了!
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的方法。就又能修改了! 这到底是咋回事啊? 哪位高人指点我一下 谢谢了!
因为你在 while 循环中做了字符串加。第一次出来的 query 是:
select * from UserManager where UID=?
而第二次出来的 query 就变成了:
select * from UserManager where UID=?UID=?
以后继续一执行一次都会增加一个“UID=?”。
你只要将这两个移到 while 循体内就可以了。
int temp = rs.getInt("uid");
uid = new Formatter().format("%03d", temp).toString();
这个可比lz上面的那一串省事多了。