這是我的設置。在虛擬機(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。我沒有得到任何例外來幫助找到錯誤。
真正困擾我的是它會得到一個連接,但不執行查詢。所有建議都受到歡迎。
不知道它是否會有幫助,但你有沒有考慮使用jtds jdbc驅動程序?我認爲它比MS jdbc驅動更好。 http://jtds.sourceforge.net/ – ChadNC
是否有任何文字寫出來了?一個好主意是使用log4j這種方式,你可以將所有正在寫入日誌文件的內容寫出來,以幫助找到問題的原因.http://logging.apache.org/log4j/1.2/ – ChadNC
謝謝ChadNC評論。我會嘗試JTDS驅動程序。我使用的是log4j,但爲了簡單起見,將它從代碼中刪除了,但是感謝您的建議 – bohoej