2011-05-01 44 views
1
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); 
     } 
    } 
} 

例外:Jdbcrowset錯誤?返回nullpointer異常!

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.I谷歌上搜索了一圈,發現了這段代碼和Sun的例子一樣link。我錯了嗎?

+0

你試過另一個非常簡單的表嗎?因爲雖然我沒有MS SQL,但我用MySQL驅動程序嘗試的代碼基本相同,並沒有任何問題。另外,你正在運行哪個JRE? – MJB 2011-05-01 18:53:08

+0

我在一個只有1列的測試表上試過了,但是這看起來沒有什麼區別。我使用jre 6.此外,它似乎是jdbc驅動程序的問題,因爲這裏[鏈接](http://grepcode.com/ file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/com/sun/rowset/JdbcRowSetImpl.java#JdbcRowSetImpl.execute%28%29) – Singgum3b 2011-05-01 19:00:29

+0

是否可以嘗試開源jtDS驅動程序? – MJB 2011-05-01 20:03:54

回答

1

好了,答案是切換到JTDS驅動器,它可以發現here

有清楚的東西在MS JDBC驅動程序bollixed起來。

0

我記得這個NullPointerException異常發生在我身上,但只有當我調用execute()時的ResultSet使用一個JdbcRowSetImpl作爲參數

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; 
} 
2

我有同樣的問題,來的時候我不應該這樣做,即得出結論,問題是Microsoft驅動程序不支持conn.prepareStatemen(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);的組合 at microsoft website 導致prepare()方法異常。 我把源代碼here創建了自己的MyJdbcRowSetImpl和改變prepareStatement參數ResultSet.TYPE_SCROLL_SENSITIVE

JTDS司機wasnt解決方案,它不支持行集。