package connection;
import java.sql.*;
public class resultsettest2 {
    public resultsettest2(){
        String driver = "org.gjt.mm.mysql.Driver";
        String url = "jdbc:mysql://localhost:3306/test?user=root"
                     +"&password=19850209";
        Connection conn = null;
        String sql = "select * from testtable";
        try{
            Class.forName(driver);
            conn = DriverManager.getConnection(url);
            Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
            ResultSet rs = stmt.executeQuery(sql);
            rs.moveToInsertRow();
            rs.updateString("orderId","2004070021");
            rs.updateString("supplierName","供应商21");
            rs.updateString("orderUser","定货员21");
            rs.updateString("address","收获地址21");
            rs.updateString("warehouse","仓库21");
            rs.updateTimestamp("orderDate",this.transferDate("2004-7-6"));
            rs.updateTimestamp("stockDate",this.transferDate("2004-7-10"));
            rs.updateInt("onProcess",0);
            rs.insertRow();
            rs.last();
            this.showCurrentRow(rs);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public void showCurrentRow(ResultSet rs) throws Exception{
        String orderId = rs.getString("orderId");
        String supplierName = rs.getString("supplierName");
        String orderUser = rs.getString("orderUser");
        String address = rs.getString("address");
        String warehouse = rs.getString("warehouse");
        java.sql.Timestamp orderDate = rs.getTimestamp("orderDate");
        java.sql.Timestamp stockDate = rs.getTimestamp("stockDate");
        int onProcess = rs.getInt("onProcess");
        System.out.println(orderId+"\t"+supplierName+"\t"+orderUser+"\t"+address+"\t"+
                warehouse+"\t"+orderDate+"\t"+stockDate+"\t"+onProcess);
        
    }
    public java.sql.Timestamp transferDate(String dateStr)
    {
        java.sql.Timestamp timeStamp = null;
        try{
            java.text.DateFormat dateShortFormat = java.text.DateFormat.getInstance();
            timeStamp = new java.sql.Timestamp(dateShortFormat.parse(dateStr).getTime());
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return timeStamp;
    }
    public static void main(String[] args) {
        resultsettest2 resultsettest2 = new resultsettest2();
    }
}
运行后的错误提示是java.text.ParseException: Unparseable date: "2004-7-6"
at java.text.DateFormat.parse(DateFormat.java:335)
at connection.resultsettest2.transferDate(resultsettest2.java:49)
at connection.resultsettest2.<init>(resultsettest2.java:21)
at connection.resultsettest2.main(resultsettest2.java:56)
java.text.ParseException: Unparseable date: "2004-7-10"
at java.text.DateFormat.parse(DateFormat.java:335)
at connection.resultsettest2.transferDate(resultsettest2.java:49)
at connection.resultsettest2.<init>(resultsettest2.java:22)
at connection.resultsettest2.main(resultsettest2.java:56)
java.sql.SQLException: Column 'orderDate' cannot be null
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2994)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:936)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1166)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1082)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1067)
at com.mysql.jdbc.UpdatableResultSet.insertRow(UpdatableResultSet.java:729)
at connection.resultsettest2.<init>(resultsettest2.java:24)
at connection.resultsettest2.main(resultsettest2.java:56)
这是为什么呀!

解决方案 »

  1.   

    日期错误,要不用使用 java.sql.Date 置入吧
      

  2.   

    好象是DateFormat的格式不对,默认的格式好象不是2004-7-6这样的
      

  3.   

    用 
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-M-d");
    Date date = sf.parse("2005-5-5");
      

  4.   

    DateFormat df = DateFormat.getDateInstance();
    String dateStr = df.format(new Date());
    System.out.println(dateStr);
    Date date2 = df.parse(dateStr);
    System.out.println(date2);这个打出来看看,你就知道用DateFormat要传什么格式的字符串了
    (like this: Wed Apr 19 00:00:00 CST 2006 parse()后,才可以成为日期)
      

  5.   

    java.sql.Timestamp timeStamp = null;
    try{
          //java.text.DateFormat dateShortFormat = java.text.DateFormat.getInstance();
          java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-M-d");
          timeStamp = new java.sql.Timestamp(sdf.parse(dateStr).getTime());
    }
    catch(Exception ex)
    {
               ex.printStackTrace();
    }
    return timeStamp;
      

  6.   

    java.sql.Timestamp  timeStamp  =  null;  
    try{  
               //java.text.DateFormat  dateShortFormat  =  java.text.DateFormat.getInstance();  
               java.text.SimpleDateFormat  sdf  =  new  java.text.SimpleDateFormat(  "yyyy-M-d  ");  
               timeStamp  =  new  java.sql.Timestamp(sdf.parse(dateStr).getTime());  
    }  
    catch(Exception  ex)  
    {  
                         ex.printStackTrace();  
    }  
    return  timeStamp; 
    这个方法也不行呀!结果还是一样的