Java连接Azure SQL Database

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java连接Azure SQL Database相关的知识,希望对你有一定的参考价值。

Azure SQL Database是Azure上的数据库PAAS服务,让用户可以快速的创建和使用SQL数据库而不用担心底层的备份,安全,运维,恢复等繁琐的工作,本文简单介绍如何使用Java程序连接到SQL Azure数据库。

  1. 首先登录到你的Azure管理界面,选择创建新的SQL数据库,选择自定义创建:

    技术分享

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

    技术分享

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

    技术分享

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

    技术分享

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

    技术分享

     

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

    技术分享

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

    技术分享

  7. 要连接到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版本的驱动。成功添加驱动库后如下如所示:

    技术分享

  8. 在上述设置完成后,连接SQL Azure database主要有两种连接方式,一种是通过SSL加密的安全连接方式,一种是非加密的连接方式,那么这两种连接方式都在什么场景下使用比较合适呢?

    如果你需要连接SQL Azure数据库的虚拟机和你的数据库都在Azure上,并且在一个地区(region),那么建议你使用非加密方式具有更好的性能;如果你的应用程序要透过互联网,比如从你的数据中心连接,那么建议你使用SSL的方式连接。

     

  9. 使用非加密方式访问数据库,首先需要设置白名单如#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 != nulltry { prepsInsertPerson.close(); } catch(Exception e) {}

if (prepsUpdateAge != nulltry { prepsUpdateAge.close(); } catch(Exception e) {}

if (resultSet != nulltry { resultSet.close(); } catch(Exception e) {}

if (statement != nulltry { statement.close(); } catch(Exception e) {}

if (connection != nulltry { connection.close(); } catch(Exception e) {}

}

    }


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

将 SQL Azure 与 Android 连接起来

在Linux上部署Java应用程序,通过Active Directory连接到Azure SQL Server

是否可以从 Azure SQL DB 连接 Azure SQL 托管实例?

Azure 应用服务 (ASE) SQL Azure 连接

Azure SQL 槽 VNet 的 Azure 函数连接字符串

Azure 移动服务 SQL 数据库连接