使用 Java 连接 SQL Server 2005 Express

Posted

技术标签:

【中文标题】使用 Java 连接 SQL Server 2005 Express【英文标题】:Connect with SQL Server 2005 Express with Java 【发布时间】:2011-05-06 17:39:35 【问题描述】:

我的项目有问题。这让我抓狂——也许你能帮帮我。 我有一台运行 SQL Server 2005 Express 的 PC,它运行良好。 在 Eclipse 中,我测试了以下代码来查询数据库:

String user= "sa";
String pass= "root";
Statement smt;
ResultSet rs = null;
System.out.println("2");

try 
  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 version
catch (Exception e)

try 
  System.out.println("3");
  Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=master",user,pass);
  smt = con.createStatement();
  smt.executeQuery("SELECT * from test");
  rs = smt.getResultSet();

  while (rs.next()) 
    printentry(rs);
  

  con.close()
  System.out.println("5");
 catch ( SQLException excepcionSql) 
  JOptionPane.showMessageDialog( null, excepcionSql.getMessage(), "Error", JOptionPane.ERROR_MESSAGE );

它工作正常并运行查询。我从 Microsoft 下载了驱动程序并将 sqljdbc4.jar 添加到类路径中。

必须真正访问数据库的项目是另一个版本的 Eclipse(Eclipse SDK 3.2)。它运行一个需要对数据库进行查询的 Web 服务。 我将相同的 jar 添加到类路径并执行相同的代码,行:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

抛出此异常:

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1438) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1284) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(未知来源) 在 com.banquito.Sucursales.HolaMundo.pruebaBD(HolaMundo.java:42) 在 com.banquito.Sucursales.SucursalesSOAPImpl.getConfigPaciente(SucursalesSOAPImpl.java:44) 在 com.banquito.Sucursales.SucursalesSOAPSkeleton.getConfigPaciente(SucursalesSOAPSkeleton.java:80) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397) 在 org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186) 在 org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) 在 org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) 在 org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) 在 org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) 在 org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453) 在 org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) 在 org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 在 org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879) 在 org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 在 org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 在 org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 在 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 在 java.lang.Thread.run(Unknown Source)

似乎 Eclipse 无法解析导出。有人可以帮我吗? 谢谢

【问题讨论】:

你下载SQL Server JDBC driver了吗?因为代码/异常说它找不到 JDBC 驱动程序 你说添加到classpath,是指放在servlet容器的WEB-INF/lib中吗? 【参考方案1】:

如果您使用的是 eclipse,请单击配置构建路径,然后将此 jar 添加到应用程序中,然后重试

【讨论】:

【参考方案2】:

jar 文件似乎丢失,清理项目。如果它仍然存在尝试创建 com.microsoft.sqlserver.jdbc.SQLServerDriver 的实例或该 jar 中存在的任何其他类,您将得到答案。

【讨论】:

【参考方案3】:

看起来您正在使用一些 servlet 容器来运行您的应用程序。所以最好不要直接从您的应用程序创建到数据库的连接,而是在容器中创建数据源并从您的代码中使用它。

然后您需要将带有 JDBC 驱动程序的 jar 放入容器的 lib 文件夹中。

【讨论】:

以上是关于使用 Java 连接 SQL Server 2005 Express的主要内容,如果未能解决你的问题,请参考以下文章

如何获取SQL server数据库的连接字符串

使用 Java 连接 SQL Server 2005 Express

java连接sql server的驱动包和连接方法

SQL Server 2005 与 java 的连接。

Java / SQL Server 2008 R2 Express 连接问题

Java连接SQL Server