在更新SQLServer 2000数据库的时候, 遇到一些奇怪的问题,请教一下各位大侠!!数据库中有一表member_basic, 已经有了若干个数据.member_basic的关系模式为
member_basic(id: char(10), nick_name: varchar(50), sex: char(4), password: varchar(20), sex: smallint, register_date: datetime)
已经连接了成功数据库.
        String query ="select count(*) from member_basic";
        java.sql.ResultSet rs = stm.executeQuery(query);
        rs.next();
        int count = rs.getInt(1);
        rs.close();
        //以上语句执行时没什么问题, count的结果成功返回
        String id = String.valueOf(count+1000);
        String update = "insert into member_basic values(?, ?, ?, ?, ?, ?)";
        try {
            java.sql.PreparedStatement prpStm = cnn.prepareStatement(update);
            prpStm.setString(1, id);
            prpStm.setString(2, nickNameTextField.getText());
            prpStm.setString(3, maleRadioButton.isSelected()?"男":"女");
            prpStm.setString(4, String.valueOf(passwordPasswordField.getPassword()));
            prpStm.setInt(5, Integer.parseInt(ageTextField.getText()));
            prpStm.setDate(6, new java.sql.Date(new java.util.Date().getTime()));
            prpStm.executeUpdate();//然而该语句却引发SQLException
           .....
          ...prpStm.executeUpdate()这句提示异常为
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'member_basic' 无效。为何我在上面第一次可以成功使用member_basic,而到了这儿却变成了无效了呢?
如何解决这个问题, 先谢谢了.

解决方案 »

  1.   

    你是以SA用户登进SQL SERVER的把!
    sa用户为系统用户,它虽然能够登陆数据库,但是数据库里边的权限都是dbo的.
    你select可以,不设计到数据的更改,但是你要insert into数据的话,那你就是设计到数据的改变了.嘿嘿
    解决方法是你新建一个数据库,然后再重新分配下权限就OK啊!
      

  2.   

    你不直接INSERT INTO数据的话,冒似在oracle里可以!
       
      我刚才在我oracle服务器下实验了下!       还有我认为你这样写prpStm.setString(1, id); 
                prpStm.setString(2, nickNameTextField.getText()); 
                prpStm.setString(3, maleRadioButton.isSelected()?"男":"女"); 
                prpStm.setString(4, String.valueOf(passwordPasswordField.getPassword())); 
                prpStm.setInt(5, Integer.parseInt(ageTextField.getText())); 
                prpStm.setDate(6, new java.sql.Date(new java.util.Date().getTime())); 
                prpStm.executeUpdate();//然而该语句却引发SQLException 
           如果只是简单的插入数据的话,不是一种最好的方式!把GUI也设置进来显得可读性不是很好!个人之见而已!嘿嘿
      

  3.   

    to 1 楼:
      原本不是用sa用户,引发异常,后来用了sa用户,引发同样的异常。 所以这应该不是权限的问题。
    to 1 楼:
      完整异常:
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'member_basic' 无效。
            at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
            at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
            at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
            at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
            at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
            at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
            at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
            at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
            at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
            at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
            at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
            at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)
            at com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown Source)
            at cn.edu.gdut.HeidongLGC.RegisterJDialog.updateDatabase(RegisterJDialog.java:81)
            at cn.edu.gdut.HeidongLGC.RegisterJDialog.registerButtonActionPerformed(RegisterJDialog.java:679)
            at cn.edu.gdut.HeidongLGC.RegisterJDialog.access$600(RegisterJDialog.java:16)
            at cn.edu.gdut.HeidongLGC.RegisterJDialog$4.actionPerformed(RegisterJDialog.java:527)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
            at java.awt.Component.processMouseEvent(Component.java:6038)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
            at java.awt.Component.processEvent(Component.java:5803)
            at java.awt.Container.processEvent(Container.java:2058)
            at java.awt.Component.dispatchEventImpl(Component.java:4410)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Component.dispatchEvent(Component.java:4240)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
            at java.awt.Container.dispatchEventImpl(Container.java:2102)
            at java.awt.Window.dispatchEventImpl(Window.java:2429)
            at java.awt.Component.dispatchEvent(Component.java:4240)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:177)
            at java.awt.Dialog$1.run(Dialog.java:1039)
            at java.awt.Dialog$3.run(Dialog.java:1091)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.awt.Dialog.show(Dialog.java:1089)
            at java.awt.Component.show(Component.java:1419)
            at java.awt.Component.setVisible(Component.java:1372)
            at java.awt.Window.setVisible(Window.java:801)
            at java.awt.Dialog.setVisible(Dialog.java:979)
            at cn.edu.gdut.HeidongLGC.RegisterJDialog$6.run(RegisterJDialog.java:764)
            at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)谢谢各位!
    另外,我用的是IDE为netBeans 6.0.1, JDK 1.6
      

  4.   

    问题解决了,就是将rs.close()改成stm.close()就可以了。
    java.sql.Statement 与java.sql.prepareStatement不可共存么?
      

  5.   

    我建议你更新你的JDBC驱动,你一定用的是老的驱动,就是3个jar的那种。快换掉吧,那个bug多多!!我这里有下载连接,最终我们替换为一个jar文件
    http://www.java2000.net/download.jsp
    另外,需要修改你的URL参数,请参考另一个资料
    http://www.java2000.net/viewthread.jsp?tid=367