package com.lzw.dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.lzw.model.TbCusinfo;
import com.lzw.model.Tfoperater;public class Dao {
protected static String dbClassName = "net.sourceforge.jtds.jdbc.Driver";
protected static String dbUrl = "jdbc:jtds:sqlserver://localhost:1433;" 
+ "DatabaseName=db_test;SelectMethod=Cursor";
protected static String dbUser="sa";
protected static String dbPass="";
public static Connection conn=null;
static{
try{
if(conn == null){
Class.forName(dbClassName).newInstance();
conn=DriverManager.getConnection(dbUrl,dbUser,dbPass);
}
}catch(Exception e){
e.printStackTrace();
}
}
private Dao(){

}
//新增方法
public static boolean insert(String sql) {
boolean result = false;
try{
Statement st=conn.createStatement();
result = st.execute(sql);
}catch(SQLException e){
e.printStackTrace();
}
return result;
} //修改方法
public static int update(String sql){
int result = 0;
try{
if(conn == null) new Dao();
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
}catch(Exception e){
e.printStackTrace();
}
return result;
}
//删除方法
public static int delete(String sql){
return update(sql);
}
//查询方法
public static ResultSet query(String sql){
ResultSet result = null;
try{
if(conn == null) new Dao();
Statement stmt = conn.createStatement();
result = stmt.executeQuery(sql);
}catch(Exception e){
e.printStackTrace();
}
return result;
}
//关闭方法
public static void close(){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
//读取用户方法
public static Tfoperater selectUser(String nameno,String password){
Tfoperater tfoperater = new Tfoperater();
String sql = "select * from tb_operator where nameno='" + nameno + "' and password='" 
+ password + "'";
ResultSet rs = query(sql);
try{
if(rs.next()){
tfoperater.setNameno(nameno);
tfoperater.setPassword(password);
}
}catch(Exception e){ 
e.printStackTrace();
}
Dao.close();
return tfoperater;
}
//执行指定查询
public static ResultSet zdquery(String zdno){
ResultSet set = query(zdno);
return set;
}
//添加客户信息的方法
public static boolean addCus(TbCusinfo tbcusinfo){
if(tbcusinfo==null)
return false;
return insert("insert tb_cusinfo values('" + tbcusinfo.getCus_no() + "','" 
+ tbcusinfo.getName() + "','" + tbcusinfo.getSnm() + "','" 
+ tbcusinfo.getPost() + "','" + tbcusinfo.getTel() + "','" 
+ tbcusinfo.getFax() + "','" + tbcusinfo.getTelpople() + "','" 
+ tbcusinfo.getAddress() + "','" + tbcusinfo.getBank() + "','" 
+ tbcusinfo.getBankno() + "','" 
+ tbcusinfo.getEmail() + "')");
}
}
 关于Dao新增方法,我运行之后会报以下错误,并且会指向上面红色部分,请各位帮我看一下。应要怎样改。
java.sql.SQLException: Invalid state, the Connection object is closed.
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.checkOpen(ConnectionJDBC2.java:1634)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.createStatement(ConnectionJDBC2.java:2242)
at com.lzw.dao.Dao.insert(Dao.java:36)
at com.lzw.dao.Dao.addCus(Dao.java:106)
at internal.cus.Cust$buttonaddActionListener.actionPerformed(Cust.java:161)
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:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
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:4574)
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:2475)
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)

解决方案 »

  1.   

     你一调用了两个连接数据库的方法,但用的同一个connection链接,第一次之后你已经把它给关了。第二次
    用的时候会报:链接已关闭。
      

  2.   

    你在做insert方法之前肯定是先调用过selectUser方法。
    selectUser里有使用Dao.close。你的conn是静态的。你这样使用的话全局只有一个conn,既然只有一个,那就不要做close操作了
      

  3.   

    恩,连续操作两次数据库会报这样错的,我以前也报这样的错,但用的不是静态方法,我使用了再次new Dao()分别调用方法
      

  4.   

    +1,太混乱,建议做Connection 成局部变量,还要返回result是不可取的。