草庐IT

java - JDBC:简单的 MSSql 连接示例不起作用

coder 2023-05-18 原文

我正在学习 Java,只需要运行一些简单的东西来通过 JDBC 从 MSSQL 中检索一些数据。我书中的例子不起作用(但它已经有好几年了),下面这个来自 MS 的例子也不适合我:

http://msdn.microsoft.com/en-us/library/ms378956(v=sql.90).aspx

这是我的代码:

package javasql;
import java.sql.*;
import java.util.*;

public class Program {

    private static String url = "jdbc:sqlserver://localhost\\SQLExpress;database=Northwind;integratedSecurity=true;";
    //private static String userName = "sa";
    //private static String password = "myPassword";

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        RunDemo();
    }

    public static void RunDemo() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection connection = DriverManager.getConnection(url);

            Statement statement = connection.createStatement();
            ResultSet results = statement.executeQuery("SELECT ProductName, Price FROM Products ORDER BY ProductName");

            while(results.next()) {
                System.out.println("Product Name: " + results.getNString("ProductName") + " Price: $" + results.getFloat("UnitPrice"));
            }

        } catch (ClassNotFoundException | SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }
}

当我运行代码时,我没有抛出任何异常。我只是在输出窗口中得到这个:

run:
com.microsoft.sqlserver.jdbc.SQLServerDriver
BUILD SUCCESSFUL (total time: 0 seconds)

我使用的是 NetBeans 7.2。请有人给我一个工作示例。

编辑:

顺便说一句,对于您看到 \\SQLExpress 的连接字符串,我确实尝试将其删除并改用 instanceName=SQLExpress.. 但那没有'也没有任何作用。

编辑 2:

好的,我从 MS 下载了最新的 MSSQL JDBC 驱动程序并引用了其中的 2 个 JAR 文件。现在我得到了这个输出:

run:
The connection to the host localhost, named instance SQLExpress failed. 

Error: "java.net.SocketTimeoutException: Receive timed out". 

Verify the server and instance names and check that no firewall is blocking UDP traffic to port 1434.  
For SQL Server 2005 or later, verify that the SQL Server Browser Service is running on the host.
BUILD SUCCESSFUL (total time: 15 seconds)

Progress.. 至少我们现在可以看到它正在尝试连接,但是有人可以告诉我上述错误吗?

编辑 3:

修复了另外两个问题.. 一个是启用 SQL Server Browser,第二个是为 SQL Server 启用 TCP/IP。谢谢@Vikdor 现在我收到了这个错误:

run:
The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
BUILD SUCCESSFUL (total time: 15 seconds)

我检查了 Windows 防火墙并添加了一个入站规则以允许该端口,但我仍然收到上述错误。有什么想法吗?

编辑 4:

尝试了此链接中的解决方案: http://www.coderanch.com/t/306316/JDBC/databases/SQLServerException-TCP-IP-connection-host

在 EDIT 3 中不再出现错误。现在出现另一个...

run:
Sep 21, 2012 11:33:16 AM com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
WARNING: Failed to load the sqljdbc_auth.dll cause : no sqljdbc_auth in java.library.path
This driver is not configured for integrated authentication. ClientConnectionId:577f359e-4774-45f3-96fb-588785911817
BUILD SUCCESSFUL (total time: 14 seconds)

现在对此感到非常厌倦.. 为什么是 Java,为什么?说真的……我很高兴我主要使用 .NET。好吧,当我找到解决方案时,我会将其发布在此处,以确保它可以帮助其他人,以免他们发疯,因为我即将...

编辑 5:

这有助于: java connecting to MicrosoftSQLServer 2005

我将目录路径放入我的 PATH 环境变量中。没用,所以我还把 sqljdbc_auth.dll 放到了我的 JDK 文件夹 C:\Program Files\Java\jdk1.7.0_04\bin 中。解决了。​​

最佳答案

好的,这就是解决我的问题的方法:

  1. 从这里下载最新的 MSSQL JDBC 驱动程序: http://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx

  2. 在我的项目中引用了 2 个 JAR 文件: sqljdbc.jarsqljdbc4.jar(我还不确定是以上两个都需要还是只需要一个..)

  3. 确保 SQL Server Browser windows 服务正在运行

  4. 打开 SQL Server 配置管理器并转到 SQL Server 网络配置下的 Protocols for SQLEXPRESS。右键单击 TCP/IP 并选择属性。设置启用 = YES。

  5. 在那里,点击 IP 地址 标签并找到 IP All 部分。将 TCP 端口 设置为 1433。

  6. sqljdbc_auth.dll 添加到您的 PATH 环境变量。就我而言:D:\Java\sqljdbc_4.0\enu\auth\x64

  7. sqljdbc_auth.dll 复制到您的 JDK 目录。就我而言:C:\Program Files\Java\jdk1.7.0_04\bin

我希望这对某人有所帮助。

关于java - JDBC:简单的 MSSql 连接示例不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12523865/

有关java - JDBC:简单的 MSSql 连接示例不起作用的更多相关文章

  1. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  2. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  5. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  6. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  7. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  8. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  9. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  10. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

随机推荐