Jdbcrowset错误?返回nullpointer异常!

时间:2011-05-01 13:44:55

标签: java sql-server jdbc

package CrimeFile;

import com.sun.rowset.JdbcRowSetImpl;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.rowset.JdbcRowSet;

/**
 *
 * @author singgum3b
 */
public class test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            // TODO code application logic here
                    JdbcRowSet jrsi=new JdbcRowSetImpl();
                    jrsi.setUrl("jdbc:sqlserver://localhost:1433;databaseName=CrimeFile");                    
                    jrsi.setUsername("sa");
                    jrsi.setPassword("hellokitty");
                    jrsi.setCommand("select * from dbo.Target");
                    jrsi.execute();
        }              
        catch (SQLException ex) {            
            Logger.getLogger(test.class.getName()).log(Level.ALL, null, ex);
        } 
    }
}

例外:

Exception in thread "main" java.lang.NullPointerException
    at com.sun.rowset.JdbcRowSetImpl.prepare(JdbcRowSetImpl.java:666)
    at com.sun.rowset.JdbcRowSetImpl.execute(JdbcRowSetImpl.java:553)
    at CrimeFile.test.main(test.java:30)
Java Result: 1

(第30行 crsi.excute(); ) 我正在使用sql server 2008和ms jdbc 3.0。我在谷歌上搜索,发现这段代码与Sun的例子link相同。我错了吗?

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题并得出结论,问题是Microsoft驱动程序不支持conn.prepareStatemen(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);的组合 at microsoft website 导致prepare()方法异常。 我从here创建了我自己的MyJdbcRowSetImpl源代码,并将prepareStatement的参数更改为ResultSet.TYPE_SCROLL_SENSITIVE

Jtds驱动程序不是解决方案,因为它不支持行集。

答案 1 :(得分:1)

好的,答案是切换到JtDS驱动程序,可以找到here

MS JDBC驱动程序中显然有些东西被搞砸了。

答案 2 :(得分:0)

我记得这个NullPointerException发生在我身上,但只有当我不应该这样做时调用execute(),即当使用JdbcRowSetImpl和ResultSet作为参数时

private JdbcRowSet executeWithResultSet(Connection conn, String sqlQuery)
        throws SQLException {
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sqlQuery);
    JdbcRowSet jdbcRs = new JdbcRowSetImpl(rs);
    jdbcRs.execute(); //<-- results to the error as reported

    return jdbcRs;
}