gpt4 book ai didi

java - 从 Tomcat servlet 到 MSSQL Server Express 2012 的查询问题

转载 作者:行者123 更新时间:2023-11-28 23:49:33 25 4
gpt4 key购买 nike

这是我的设置。在虚拟机 (Fusion) 中运行 MSSQL Server Express 2012。虚拟机在 OS X Lion Server 上运行。在 OS X Lion 上,Tomcat 7 服务器正在运行。我从独立的 java 中尝试以下代码:

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驱动程序?我已经使用 jtds 驱动程序一段时间了,我发现它比 MS jdbc 驱动程序问题更少。我曾经遇到过使用 MS 驱动程序无法解释的奇怪事情。

关于java - 从 Tomcat servlet 到 MSSQL Server Express 2012 的查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10743867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com