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相同。我错了吗?
答案 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;
}