DB.java代码如下:
package com.yxq.dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class DB {
private Connection con;
private PreparedStatement pstm;
private String user="sa";
private String password="";
private String className="com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_CityInfo";

public DB(){
try{
Class.forName(className);
}catch(ClassNotFoundException e){
System.out.println("加载数据库驱动失败!");
e.printStackTrace();
}
} /**创建数据库连接*/
public Connection getCon(){
try {
con=DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
System.out.println("创建数据库连接失败!");
con=null;
e.printStackTrace();
}
return con;
}

public void doPstm(String sql,Object[] params){
if(sql!=null&&!sql.equals("")){
if(params==null)
params=new Object[0];

getCon();
if(con!=null){
try{
System.out.println(sql);
pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
for(int i=0;i<params.length;i++){
pstm.setObject(i+1,params[i]);
}
pstm.execute();
}catch(SQLException e){
System.out.println("doPstm()方法出错!");
e.printStackTrace();
}
}
}
}

public ResultSet getRs() throws SQLException{
return pstm.getResultSet();
}
public int getCount() throws SQLException{
return pstm.getUpdateCount();
}
public void closed(){
try{
if(pstm!=null)
pstm.close();
}catch(SQLException e){
System.out.println("关闭pstm对象失败!");
e.printStackTrace();
}
try{
if(con!=null){
con.close();
}
}catch(SQLException e){
System.out.println("关闭con对象失败!");
e.printStackTrace();
}
}
}IndexAction.java代码如下:
package com.yxq.action;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.TreeMap;
import com.yxq.actionSuper.MysuperAction;
import com.yxq.dao.DB;public class IndexActon extends MysuperAction {
DB mydb=new DB();
String sql="select * from tb_type order by type_sign";
TreeMap typeMap=new TreeMap();

mydb.doPstm(sql,null);

}
用myeclipse 编写,其中mydb.doPstm()这句提示错误,怎么回事啊 

解决方案 »

  1.   

    看代码没问题,你说哪句话有错,你把错误代码贴上来啊
    我看了下程序,没什么问题,我估计是你sqlserver jdbc驱动版本的问题?
    sqlserver  jdbc2.0和jdbc3.0连接数据库的url是不一样的
      

  2.   

    什么错误?getCon(); 怎么不赋值?就是这样写conn = getCon(); 
      

  3.   

    我看了下你连接sqlserver的url 你应该用sqlserver jdbc2.0的驱动才行,也就是有3个jar的那个驱动不知道你是不是用的jdbc3.0的?
    jdbc3.0的只有一个jar包
      

  4.   

    同意2楼,在doPstm方法中没有给变量con赋值
      

  5.   

    驱动加了,DB.java代码如下:
    package com.yxq.dao;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;public class DB {
    private Connection con;
    private PreparedStatement pstm;
    private String user="sa";
    private String password="";
    private String className="com.microsoft.jdbc.sqlserver.SQLServerDriver";
    private String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_CityInfo";

    public DB(){
    try{
    Class.forName(className);
    }catch(ClassNotFoundException e){
    System.out.println("加载数据库驱动失败!");
    e.printStackTrace();
    }
    } /**创建数据库连接*/
    public Connection getCon(){
    try {
    con=DriverManager.getConnection(url,user,password);
    } catch (SQLException e) {
    System.out.println("创建数据库连接失败!");
    con=null;
    e.printStackTrace();
    }
    return con;
    }

    public void doPstm(String sql,Object[] params){
    if(sql!=null&&!sql.equals("")){
    if(params==null)
    params=new Object[0];

    getCon();
    if(con!=null){
    try{
    System.out.println(sql);
    pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    for(int i=0;i<params.length;i++){
    pstm.setObject(i+1,params[i]);
    }
    pstm.execute();
    }catch(SQLException e){
    System.out.println("doPstm()方法出错!");
    e.printStackTrace();
    }
    }
    }
    }

    public ResultSet getRs() throws SQLException{
    return pstm.getResultSet();
    }
    public int getCount() throws SQLException{
    return pstm.getUpdateCount();
    }
    public void closed(){
    try{
    if(pstm!=null)
    pstm.close();
    }catch(SQLException e){
    System.out.println("关闭pstm对象失败!");
    e.printStackTrace();
    }
    try{
    if(con!=null){
    con.close();
    }
    }catch(SQLException e){
    System.out.println("关闭con对象失败!");
    e.printStackTrace();
    }
    }
    }
      

  6.   


    public void doPstm(String sql,Object[] params){ 
    if(sql!=null&&!sql.equals("")){ 
    if(params==null) 
    params=new Object[0]; getCon(); 
    if(con!=null){ 
    try{ 
    System.out.println(sql); 
    pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 
    for(int i=0;i <params.length;i++){ 
    pstm.setObject(i+1,params[i]); 
    } 红字部分改成con=getCon();
      

  7.   


    public void doPstm(String sql,Object[] params){ 
    if(sql!=null&&!sql.equals("")){ 
    if(params==null) 
    params=new Object[0]; [color=#red]getCon(); [/color]
    if(con!=null){ 
    try{ 
    System.out.println(sql); 
    pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 
    for(int i=0;i <params.length;i++){ 
    pstm.setObject(i+1,params[i]); 
    } 红字部分改成con=getCon();看看
      

  8.   

    我感觉你所谓的错误应该是doPstm()到其他地方引用sql语句但发现sql更改之后就错误,对吧?