先说一下,我的代码是对数据库的增删改查,但是只要运行就会自动添加一个全部是NULL的数据,请高手指点一下。先看一下报错的。com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'null' for key 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1709)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1628)
at test.DBBean.update(DBBean.java:44)
at org.apache.jsp.mainpage_jsp._jspService(mainpage_jsp.java:116)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)

解决方案 »

  1.   

    这个是JSP的添加数据的代码<br><br><br><h3>增加</h3><hr>
    <%
     try{ 
            request.setCharacterEncoding("gb2312");
    String insert = "insert into news(num,theme,author,date) values('"+request.getParameter("num")+"','"+request.getParameter("theme")+"','"+request.getParameter("author")+"','"+request.getParameter("date")+"')";
         myDBbean.update(insert);
        }
        catch(Exception ex){
    ex.printStackTrace(); }
    myDBbean.close();
    %><form onSubmit="return validate()"><br>
    编号:<input type="text" name="num" ><br>
    <br>
    主题:<input type="text" name="theme" ><br>
    <br>
    作者:<input type="text" name="author" ><br>
    <br>
    日期:<input type="text" name="date" ><br>
    <br>
    <input type="submit" value=提交></form>
      

  2.   

    小弟还有一个问题,为何添加的数据打上汉字是乱码?我已经加了这句代码了呀(request.setCharacterEncoding("gb2312");
    )。修改都好好的,就是添加时是乱码。
      

  3.   

    test.DBBean.update(DBBean.java:44)  这行是什么?
      

  4.   

    num 是主键吗 别用了 
      

  5.   

    看看你的 myDBbean.update(String) 方法 的代码。另:乱码:jsp页面加这个试试
    <%@ page language="java" 
      contentType="text/html; charset=GBK"
      pageEncoding="GBK"%>
    或者:
    仔细比较你的添加和修改的差异处,看看是哪部分造成的乱码。
      

  6.   

    乱码问题,首先看下你数据库用的是什么字符集,MySQL安装时字符集默认是latin-1,你要是没有更改字符集,那么插入中文时肯定是乱码。查看下你的字符集可以输入
    >show variable like 'character%'
    更改字符集的方式,直接打开MySQL安装目录,找到其中的my.ini文件,将全部的default-character-set内容修改,如下所示:default-character-set=gbk
    修改完,将MySQL数据重启下就OK。
    楼主也要在页头加上<% contentType="text/html; charset=utf-8"
        pageEncoding="utf-8" %>。
    楼主你的异常信息
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039)
    说明你SQL语句有问题
    num是什么?主键吗?如果主键是自动增长,则不需要写num的
      

  7.   

    报错,主键空,再检查吧关于乱码问题:统一jsp,数据库的编码方式就可以解决了
      

  8.   

    我的MYSQL字符集安装时改了,是UTF8。
    num是主键。 我也不知道是不是自动增长 - -!。如果是,代码怎么改呢?
      

  9.   


    我的页面加了。不管GBK,GB2312,UTF8都不行 。郁闷呐。
    给你看我的方法代码。 public ResultSet query(String sql){
    try{
    con = getCon();
    stat = con.createStatement();
    rs = stat.executeQuery(sql);
    }catch(Exception ex){
    ex.printStackTrace();
    }
    return rs;
    }
    public void update(String sql){
    try{
    con = getCon();
    stat = con.createStatement();
    stat.executeUpdate(sql);
    }catch(Exception ex){
    ex.printStackTrace();
    }
    }
      

  10.   

    汉子的编码不止一个,可能数据库的编码是GBK或者是UTF8等,你确认下。
    不知道是否对你有帮助。
      

  11.   

    我也不知道数据库自增没有 - -。我用的NAVICAT建的表,没有用命令行。怎么办呢
      

  12.   

    数据库编码也得改啊。。而不只是mysql。。我用的方法是直接重建数据库。。