java.lang.RuntimeException:java.sql.SQLException:字段'UserName'没有默认值

时间:2014-02-18 07:17:59

标签: java mysql sql java-ee spring-mvc

我正在开发一个网络应用....其中会有一个请求注册的用户列表...我们点击接受所有细节必须从注册表移动到登录表...

这是我的servlet:

ClientApproveService approve=new ClientApproveService();
approve.clientApprove();

这是我的服务:

public class ClientApproveService {

    public void clientApprove() {
        ClientApproveDAO cad=new ClientApproveDAO();
        DataSource dataSource=new DataSource();
        cad.setDataSource(dataSource);
        cad.insertClient();

    }

}

这是我的DAO:

public class ClientApproveDAO {

        private DataSource dataSource;
        public void setDataSource(DataSource dataSource) {
       this.dataSource = dataSource;
    }
    Connection conn=null;
    PreparedStatement statement=null;
    ResultSet rs=null;


    public void insertClient() {    
        try{
            conn=dataSource.createConnection();
            PreparedStatement ps=conn.prepareStatement("insert into login(id,FirstName,LastName,Gender,Category,Dateofbirth,Age,Address,Country,State,city,PinCode,EmailId,ContactNo,MobileNo)select * from register ");
            ps.executeUpdate();
        }
        catch (SQLException e) {
            throw new RuntimeException(e);

    } finally {
            if (rs != null) try { rs.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
    }


    }

}

这是我的注册表:

create table register(
id int(100) not null AUTO_INCREMENT primary key,
FirstName varchar(300) default null,
LastName varchar(300) default null,
Gender varchar(200) default null,
Category varchar(200) default null,
DateOfBirth varchar(200) default null,
Age int(3)default null,
Address varchar(1000) default null,
Country varchar(500) default null,
State varchar (500) default null,
city varchar(500)default null,
PinCode int(10)default null,
EmailId varchar(500)default null,
ContactNo varchar(20) default null,
MobileNo varchar(20) default null
);

这是我的登录表:

create table login(
UserName varchar(100)not null,
PassWord varchar(100)not null,
id int(100) not null AUTO_INCREMENT primary key,
FirstName varchar(300) default null,
LastName varchar(300) default null,
Gender varchar(200) default null,
Category varchar(200) default null,
DateOfBirth varchar(200) default null,
Age int(3)default null,
Address varchar(1000) default null,
Country varchar(500) default null,
State varchar (500) default null,
city varchar(500)default null,
PinCode int(10)default null,
EmailId varchar(500)default null,
ContactNo varchar(20) default null,
MobileNo varchar(20) default null
)

我必须将所有数据从注册表插入登录表但我仍然在登录表中自动生成用户名和密码字段...但我应该能够生成其余的ryt ???但是当我运行它时会引发异常

java.lang.RuntimeException:java.sql.SQLException:字段'UserName'没有默认值

请有人帮我解决这个问题......提前致谢....

3 个答案:

答案 0 :(得分:3)

您没有向UserName提交一个值,也没有默认值。 试试这个:

insert into login(id,FirstName,LastName,Gender,Category,Dateofbirth,Age,Address,Country,State,city,PinCode,EmailId,ContactNo,MobileNo,UserName) 
select *, 'undefined' from register

或者,您也可以ALTER表格,因此userName字段将具有默认值:

ALTER TABLE login MODIFY userName varchar(100) NULL DEFAULT NULL;

答案 1 :(得分:3)

您需要提供用户名值,因为列定义为“NOT NULL”。您可以先查询注册表,生成用户名,然后将新记录插入登录表。

答案 2 :(得分:-1)

在sql命令提示符下运行以下sql查询并检查它是否正常工作

  insert into login(id,FirstName,LastName,Gender,Category,Dateofbirth,Age,Address,Country,State,city,PinCode,EmailId,ContactNo,MobileNo)select * from register