您的位置:首页 > 编程语言 > Java开发

Java连接Azure SQL Database

2016-04-02 23:55 357 查看
Azure SQL Database是Azure上的数据库PAAS服务,让用户可以快速的创建和使用SQL数据库而不用担心底层的备份,安全,运维,恢复等繁琐的工作,本文简单介绍如何使用Java程序连接到SQL Azure数据库。首先登录到你的Azure管理界面,选择创建新的SQL数据库,选择自定义创建:



输入数据库的名称,运维是第一次创建,所以选择新建SQL数据库服务器,对于不同的服务级别,请参照相关文档:



输入你的数据库登录名,密码,选择数据库区域,当然你的数据库应该和你的应用程序在一个于以获得较好的性能,较低的延迟;对于版本来讲,我们选择v12版本,新版本中有很多特性,选择确定,数据库即开始创建:



数据库创建完成,点击数据库名称"myjavatestdb"进入仪表板,在"速览"显示了你目前可用的选项,包括显示连接的字符串,你允许访问的IP地址,获取数据库管理工具等信息:


显示连接字符串,会显示目前主要语言的连接信息,点击链接你会看到:


基于默认的数据库安全设计,初始情况下,SQL Azure数据库不允许任何IP地址来连接和访问数据库,只有你主动设置了允许的IP地址,才能连接数据库,所以你需要了解到你的哪个服务器会连接数据库,然后点击"管理允许的IP地址"将需要进行数据库连接的IP地址设置进去才可以访问:



上述配置完成后,打开Eclipse,假设你已经安装了最新的Azure plugin for Eclipse插件,(如果你不知道如何安装,请参考我的博客安装Eclipse并设置Azure插件:/article/7445948.html),新建Java项目azurelab:



要连接到SQLServer,我们必须要添加SQL Server的JDBC driver,在Azure for Eclipse的插件中,实际已经包含了最新的驱动,在创建新项目的下一步,选择Libraries,然后在下一步中,选择Add Library:


在对话框中,选择Microsoft JDBC driver 4.2 for SQL Server:

请注意,网上看到一些报告说使用4.0,4.1驱动连接v12数据库,即使选择不适用安全连接,也会出现强制使用SSL并报不被信任错误等问题,所以请大家连接v12数据库尽量选择4.2版本的驱动。成功添加驱动库后如下如所示:


在上述设置完成后,连接SQL Azure database主要有两种连接方式,一种是通过SSL加密的安全连接方式,一种是非加密的连接方式,那么这两种连接方式都在什么场景下使用比较合适呢?
如果你需要连接SQL Azure数据库的虚拟机和你的数据库都在Azure上,并且在一个地区(region),那么建议你使用非加密方式具有更好的性能;如果你的应用程序要透过互联网,比如从你的数据中心连接,那么建议你使用SSL的方式连接。
使用非加密方式访问数据库,首先需要设置白名单如#5所示,然后使用如下代码进行非安全连接:

package com.azurelabs.china.sqlserver; import java.sql.*;import com.microsoft.sqlserver.jdbc.*; public class ConnectSQL { public static void main(String[] args) { // TODO Auto-generated method stub String connectionString = "jdbc:sqlserver://YOURSERVER.database.chinacloudapi.cn:1433;" + "database=YOURDB;" + "user=YOURUSER;" + "password=YOURPASS;" + "loginTimeout=30;"; ……}10. 使用安全方式访问数据库,需要打开encrypt=true,设置trustServerCertificate 为true 等参数,如下代码所示:
package com.azurelabs.china.sqlserver;import java.sql.*;import com.microsoft.sqlserver.jdbc.*;public class ConnectSQL { public static void main(String[] args) { // TODO Auto-generated method stub String connectionString = "jdbc:sqlserver://YOURSERVER.database.chinacloudapi.cn:1433;" + "database=YOURDB;" + "user=YOURUSER;" + "password=YOURPASS;" + "encrypt=true;" + "trustServerCertificate=true;" + "hostNameInCertificate=*.database.chinacloudapi.cn;" + "loginTimeout=30;"; ……}
其他的程序写法没什么差别,例如查询一个数据库表:Connection connection = null;Statement statement = null;ResultSet resultSet = null;PreparedStatement prepsInsertPerson = null;PreparedStatement prepsUpdateAge = null;try {connection = DriverManager.getConnection(connectionString);// SELECT rows from the table.String selectSQL="select id,name,age from dbo.testcon";statement = connection.createStatement();resultSet = statement.executeQuery(selectSQL);// Iterate through the result set and print the attributes.while (resultSet.next()) {System.out.println(resultSet.getString(1) + " "+ resultSet.getString(2)+ " "+ resultSet.getString(3));}}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) {}} }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: