【发布时间】:2015-12-11 09:22:50
【问题描述】:
尝试在 Azure 中将 Web App - Java 与 SQL 数据库连接起来。 我使用了这个例子和这个页面: https://azure.microsoft.com/en-us/documentation/articles/sql-database-develop-java-simple-windows/
我复制粘贴我的连接字符串并将我的 IP 添加到 SQL 服务器/我的数据库/设置/防火墙设置
当我从 Tomcat8(Eclipse) 本地运行它时,我得到了底部错误。
我可以使用我在 conn 中使用的 User 和 Pass 连接 SQL Management Studio。字符串,所以访问数据应该是正确的。 我还添加了从文章链接下载的 sqljdbc4.jar 库。
java.sql.SQLException:找不到适合 jdbc 的驱动程序:sqlserver://mydatabase.database.windows.net:1433;database=mydatabase;user=[Server admin]@mydatabase;password=[MyAdminPassword];encrypt =true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30; 在 java.sql.DriverManager.getConnection(DriverManager.java:689) 在 java.sql.DriverManager.getConnection(DriverManager.java:270) 在客户webservice.SQLDatabaseTest.getDatabase(SQLDatabaseTest.java:30) 在 customerwebservice.GetCustomers.doGet(GetCustomers.java:34) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)
代码:
import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;
public class SQLDatabaseTest {
public String getDatabase(){
String connectionString = "";
connectionString = "jdbc:sqlserver://mydatabase.database.windows.net:1433;database=mydatabase;user=[Server admin]@mydatabase;password=[My Password];encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;";
// Declare the JDBC objects.
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
PreparedStatement prepsInsertPerson = null;
PreparedStatement prepsUpdateAge = null;
try {
connection = DriverManager.getConnection(connectionString);
return "Connected";
}
catch (Exception e) {
e.printStackTrace();
}
finally {
// Close the connections after the data has been handled.
if (prepsInsertPerson != null) try { prepsInsertPerson.close(); } catch(Exception e) {}
if (prepsUpdateAge != null) try { prepsUpdateAge.close(); } catch(Exception e) {}
if (resultSet != null) try { resultSet.close(); } catch(Exception e) {}
if (statement != null) try { statement.close(); } catch(Exception e) {}
if (connection != null) try { connection.close(); } catch(Exception e) {}
}
return "Not Connected";
}
}
已编辑: 我发现出了什么问题。因为我使用的是 Mac,所以没有将 sqljdbc42.jar 文件添加到 Classpath 中。在 Windows 中您只需运行 .exe,但在 Mac 上您需要手动添加它。
这个答案帮助我将它添加到 Classpath:https://stackoverflow.com/a/1676261/1436690
但是现在我还有一个问题,因为我还需要将 sqljdbc42.jar 添加到 Azure Web App 的类路径中。
【问题讨论】:
标签: java sql-server azure jdbc