2012-05-24 38 views
0

這是我的設置。在虛擬機(Fusion)中運行MSSQL Server Express 2012。虛擬機在OS X Lion Server上運行。在OS X Lion上,Tomcat 7服務器正在運行。我嘗試從獨立的java中下面的代碼:查詢從Tomcat servlets到MSSQL Server Express 2012的問題

static { 
    try { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

private final static String host = "ip-address:1433"; 
private final static String database = "databasename"; 
private final static String user = "user"; 
private final static String passwd = "password"; 

public static void main(String[] args) { 
    try { 
     String connectionUrl = "jdbc:sqlserver://"+host+";database="+database+";integratedSecurity=true;"; 
     Connection con = DriverManager.getConnection(connectionUrl,user,passwd); 
     PreparedStatement pstm = con.prepareStatement("select * from sektor"); 
     ResultSet res = pstm.executeQuery(); 
     while(res.next()) 
      System.out.println("Sektor: " +res.getString("sektornavn")); 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

這很好,並打印表的內容,如希望。現在,使用相同的代碼(僅改變輸出從System.out的響應)

static { 
    try { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

private final static String host = "ip-address:1433"; 
private final static String database = "databasename"; 
private final static String user = "user"; 
private final static String passwd = "password"; 


@Override 
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    resp.setContentType("text/plain"); 
    resp.setCharacterEncoding("UTF-8"); 
    // Write response 
    PrintWriter writer = resp.getWriter(); 
    try { 
     String connectionUrl = "jdbc:sqlserver://"+host+";database="+database+";"; 
     writer.println("Connecting<br/>"); 
     Connection con = DriverManager.getConnection(connectionUrl,user,passwd); 
     writer.println("Preparing statement<br/>"); 
     PreparedStatement pstm = con.prepareStatement("select * from sektor"); 
     writer.println("Executing statement<br/>"); 
     ResultSet res = pstm.executeQuery(); 
     while(res.next()) 
      writer.println("Sektor: " +res.getString("sektornavn")+"<br/>"); 
    } catch (SQLException e) { 
     writer.println(e.getMessage()); 
    } 
    writer.flush(); 
    writer.close(); 

} 

我的問題是,在servlet前往pstm.executeQuery時停止()。通過取出(註釋掉)部分代碼,我已經縮小到了這一點,並且顯示它將創建一個連接(DriverManager.getConnection ..)並準備語句。只有在添加pstm.executeQuery()時,servlet纔會響應。

我使用來自Microsoft的JDBC連接器,該jar可用於獨立的java和servlet。我沒有得到任何例外來幫助找到錯誤。

真正困擾我的是它會得到一個連接,但不執行查詢。所有建議都受到歡迎。

+0

不知道它是否會有幫助,但你有沒有考慮使用jtds jdbc驅動程序?我認爲它比MS jdbc驅動更好。 http://jtds.sourceforge.net/ – ChadNC

+0

是否有任何文字寫出來了?一個好主意是使用log4j這種方式,你可以將所有正在寫入日誌文件的內容寫出來,以幫助找到問題的原因.http://logging.apache.org/log4j/1.2/ – ChadNC

+0

謝謝ChadNC評論。我會嘗試JTDS驅動程序。我使用的是log4j,但爲了簡單起見,將它從代碼中刪除了,但是感謝您的建議 – bohoej

回答

0

不知道它是否會有幫助,但你有沒有考慮使用JTDS jdbc驅動程序?我一直在使用他的jtds驅動程序一段時間,我發現它比MS jdbc驅動程序的問題少。我曾經有過奇怪的事情發生,我無法用MS驅動程序解釋。

相關問題