错误提示:com.microsoft.sqlserver.jdbc.SQLServerException: 不能将值 NULL 插入列 'userName',表 'Book.dbo.t_users';列不允许有空值。INSERT 失败。
代码如下:package cn.com.systop.l02;import cn.com.systop.l02.UsersDAO;
import cn.com.systop.l02.Users;public class UsersDAOImpl extends BaseDAO implements UsersDAO { // 用户注册
public int save(Users users) {
int row = 0;
String sql = "INSERT INTO t_users VALUES(?,?)";// 带输入参数的SQL语句
// 创建String数组放置输入参数的值
String[] param = { users.getUserName(), users.getUserPass() };
try {
// 调用父类的executeSQL方法,返回受影响的行数。
row = super.executeSQL(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
return row;
} // 修改密码
public int update(Users users) {
int row = 0;
String sql = "UPDATE t_users SET userPass = ? WHERE userID = ?";// 带输入参数的SQL语句
// 创建String数组放置输入参数的值
String[] param = { users.getUserPass(), users.getUserID() + "" };
try {
// 调用父类的executeSQL方法,返回受影响的行数。
row = super.executeSQL(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
return row;
}

// 登录验证
public Users doLogin(String userName, String passWord) {
Users users = null;
String sql = "SELECT * FROM t_users WHERE userName=? AND userPass=?";// SQL语句
try {
super.getConnection();// 调用父类方法获取数据库连接
pstm = con.prepareStatement(sql);// 创建预编译的SQL语句对象
// 设置输入参数的值
pstm.setString(1, userName);
pstm.setString(2, passWord);
rs = pstm.executeQuery();// 执行sql语句,返回结果集。
if (rs.next()) {
// 如果用户名和密码都正确遍历结果集创建用户对象封装数据
users = new Users();
users.setUserID(rs.getInt(1));
users.setUserName(rs.getString(2));
users.setUserPass(rs.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
super.closeAll();// 释放数据库资源
}
return users;// 返回用户对象
}
}

解决方案 »

  1.   

    上面说的不准插入空值。看看你的数据库中字段的设置是不是设置的是 not null。
    然后把这个字段设置成可以为空就行了。
      

  2.   

    用户注册save方法中 users.getUserName()为空,检查下action中传入的users参数
      

  3.   

    这是数据库里面的域完整性,规定了一些的特定的值不能放回null值,那么你的字段不能插入一个空值,知道么,
    它不是都跟题提醒了不能插入空值吗