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

标签 java sql-server tomcat servlets

这是我的设置。在虚拟机 (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/

相关文章:

java - Android - 使用 HttpURLConnection 将 XML 文件发送到 PHP API 服务器

java - 向多边形添加一个点

sql-server - 如何将数据从 Common Data Service 复制到 Azure 上的 SQL Server?

sql - 在 SQL 中删除字符串的前缀

java - 有没有办法从 jtable 下载选定的行?

sql-server - SQL Server 分组吸收 null 和空值

java - tomcat部署时的application.properties位置

tomcat - 如何管理 Tomcat 发布/部署以将 Tomcat6 的停机时间降至最低

java - tomcat中的UncaughtExceptionHandler

java - 正则表达式 - 无法匹配模式 "(cmd: )"