我在做一个职工管理系统,里面有一个添加功能,涉及到三个文件
/* 
   DBmanager.java
                     */
public class DBmanager {
    public DBmanager(){
        
    }
    public void OpenConn()throws Exception{
        try{
            url="jdbc:odbc:local";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");        }catch(Exception e){
            //e.printStackTrace();
            System.out.println("OpenConn");
            //return null;
        }
        try{
            con=DriverManager.getConnection(url,"","");
        }catch(Exception e){
            //e.printStackTrace();
            System.out.println("OpenConn");
            //return null;
        }
    }
    public ResultSet executeQuery(String sql){
        stat=null;
        rs=null;
        try{
            stat=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            rs=stat.executeQuery(sql);
        }catch(SQLException e){
                    //e.printStackTrace();
                    System.out.println("executeQuery");
                    
        }
        return rs;
    }
    
    public void close(){
        try{
            con.close();
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    public void closeStatement(){
        try{
            if(stat!=null){
                stat.close();
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    public void closeResultSet(){
        if(rs!=null){
            try{
                rs.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }
    public void executeUpdate(String sql){
        stat=null;
        rs=null;
        try{
            stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            stat.executeQuery(sql);
            con.commit();
        }catch(SQLException ee){
            //ee.printStackTrace();
            System.out.println("警告数据不完整");
            //throw new ApplicationException("",);
        }
    }
    private String url;
    private String porNumber;
    private String serverName;
    private String databaseName;
    private String userName;
    private String password;
    private Connection con;
    private Statement st;
    private ResultSet rs;
    private Statement stat;
}/*
     departbean
*/
import java.util.*;
import java.sql.*;
import javax.swing.*;
public class departbean {
    String sql;
    ResultSet rs=null;    String departno;
    String departname;
    String departnum;
    String departdes;    String colName;//列名
    String colValue;//列值
    String colValue2;//列值    int ID;
    /*添加部门信息*/
    departbean(){}
    public void addDepart(String no,String name,String num,String des){
        DBmanager DB=new DBmanager();
        this.departno=no;
        this.departname=name;
        this.departnum=num;
        this.departdes=des;
        if(no==null||name==null){
            JOptionPane.showMessageDialog(null,"部门号和部门名不能为空","错误",JOptionPane.ERROR_MESSAGE);
            return;
        }
        else{
            sql="insert into department values('"+departno+"','"+departname+"','"+departnum+"','"+departdes+"');";
            try{
                DB.OpenConn();
                DB.executeUpdate(sql);
                JOptionPane.showMessageDialog(null,"成功添加");
            }catch(Exception ee){
                System.out.println("这里错误");
                JOptionPane.showMessageDialog(null,"保存失败","错误",JOptionPane.ERROR_MESSAGE);
            }finally{
                DB.closeStatement();
                DB.close();
            }
        }
    }
}
/*
    plus.java
*/
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        System.out.println(jTextField1.getText());
        System.out.println(jTextField2.getText());
        System.out.println(jTextField3.getText());
        System.out.println(jTextArea1.getText());
        jTextField1.setEnabled(false);
        jTextField2.setEnabled(false);
        jTextField3.setEnabled(false);
        jTextArea1.setEnabled(false);
        new departbean().addDepart(jTextField1.getText(),jTextField2.getText(),jTextField3.getText(),jTextArea1.getText());
        
    }
这个按钮实现的是保存,但是实现后能向数据库中添加数据了,但是总是会爆出异常,executeUpdate(String sql)这里抛出了SQLException,我找了很久,找不出原因,哪位高手帮帮忙!!!急救!!

解决方案 »

  1.   

    太长了,没看~LZ可以帮SQL打印出来看看对了没~~然后再慢慢调试
      

  2.   

     
    我没有数据库没法调试啊 你的说一下出错的是哪行
     什么异常 sql语句在数据库上执行有没有问题
      

  3.   

    异常显示为
    java.sql.SQLException: No ResultSet was produced
            at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:259)
            at workers.DBmanager.executeUpdate(DBmanager.java:78)
            at workers.departbean.addDepart(departbean.java:44)
            at workers.Plus.jButton1ActionPerformed(Plus.java:148)
            at workers.Plus.access$000(Plus.java:12)
            at workers.Plus$1.actionPerformed(Plus.java:59)
            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:6267)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
            at java.awt.Component.processEvent(Component.java:6032)
            at java.awt.Container.processEvent(Container.java:2041)
            at java.awt.Component.dispatchEventImpl(Component.java:4630)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
            at java.awt.Container.dispatchEventImpl(Container.java:2085)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
      

  4.   

    其实希望LZ可以把出异常那行的SQL打印出来,直接在数据库执行看看,另外如果你的SQL是用来更新记录的就用executeUpdate~
      

  5.   

    sql="insert into department values('"+departno+"','"+departname+"','"+departnum+"','"+departdes+"')";
    这句没错呀,在数据库里面能实现
      

  6.   

    既然是更新数据库的就别用executeQuery~~因为Statement的executeQuery一定会返回一个结果集,文档上说never null~试试executeUpdate(sql)吧老兄
                      
      

  7.   

    建议楼主用PreparedStatement吧。
    public boolean add(Aritcle ar) {
    Connection conn = null;
    PreparedStatement ps = null;

    try {
    conn = ConnMySql.getConnection();
    StringBuffer sb = new StringBuffer();
    sb.append("INSERT INTO t_article(ID,C_NAME,E_NAME,DOC_SOURCE,PRESS_YEAR,PRESS_MONTH,C_KEY,E_KEY,C_SUMMARY,E_SUMMARY,PROJECT_TYPE,DOI) ");
    sb.append("VALUES(");
    sb.append(ar.getId() + ",");
    sb.append("'" + ar.getChName() + "'" + ",");
    sb.append("'" + ar.getEnName() + "'" + ",");
    sb.append("'" + ar.getDocSource() + "'" + ",");
    sb.append("'" + ar.getPressYear() + "'" + ",");
    sb.append("'" + ar.getPressMonth() + "'" + ",");
    sb.append("'" + ar.getChKey() + "'" + ",");
    sb.append("'" + ar.getEnKey() + "'" + ",");
    sb.append("'" + ar.getChSummary() + "'" + ",");
    sb.append("'" + ar.getEnSummary() + "'" + ",");
    sb.append("'" + ar.getProjectType() + "'" + ",");
    sb.append("'" + ar.getDoi() + "'" );
    sb.append(")");

    ps = conn.prepareStatement(sb.toString());

    ps.executeUpdate();
    conn.commit();
    } catch (Exception e) {
    e.printStackTrace();
    flag = false;
    } finally {
    Close.closeConn(conn);
    Close.closePs(ps);
    }

    return flag;
    }
      

  8.   

    我将executequery(sql)改成executeUpdate(sql)就没有报错了,可是出来了另一个问题,
    我输入英文可以运行,但是输入中文的时候有的时候能运行,但在sqlserver2005中是乱码,有的时候又不能运行,不稳定。
      

  9.   

    问题解决了,编码改成GBK就OK,原来是UTF-8,谢谢大家