当前位置:首页 > 数据库 > 正文

Access SQL Azure with JDBC/Hibernate

2020-03-01 数据库

前篇文章介绍了如何将Tomcat及Web应用程序部署到Windows Azure,凡事只要起了头,接下来的工作就相对简单许多,本篇文章接续前篇,介绍如何透过JDBC来存取SQL Azure。


Access SQL Azure with JDBC/Hibernate

/黄忠成

Using JDBC with SQL Azure

? 前篇文章介绍了如何将Tomcat及Web应用程序部署到Windows Azure,凡事只要起了头,接下来的工作就相对简单许多,本篇文章接续前篇,介绍如何透过JDBC来存取SQL Azure。

? 开始之前,请透过Windows Azure的管理网站建立SQL Azure数据库。

图1

于其中建立PersonData数据库,接着建立PERSONS数据表,其结构如下图。

图2

接下来只要透过SQL Azure的JDBC Driver便可连结到SQL Azure了,而安装Windows Azure SDK Plug-In for Eclipse时,附带安装了MS SQL Server 的JDBC Driver,

这个Driver也支持SQL Azure,所以读者们不需额外下载,只需将其加入Web Project的Library即可。

图3

图4

另外,别忘记当封装WAR时,除了项目本体外,其余引用的Library是不会一并封入的,所以必须额外设定。

图5

图6

图7

完成后修改index.jsp来连结至SQL Azure并列出数据库中的数据。


<%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>




Insert title here


<%
try{ 
	Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    Connection con = DriverManager.getConnection("jdbc:sqlserver://c95ouvaxn9.database.windows.net;DatabaseName=PersonData;" 
                                                 [email protected];password=...;

    // Create and execute an SQL statement that returns some data.
    String SQL = "SELECT * FROM dbo.PERSONS";
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(SQL);

    // Iterate through the data in the result set and display it.
    while (rs.next()) {
       out.print(rs.getString(1)   " "   rs.getString(2) "
"); } }catch(Exception e){ out.print("Error message: " e.getMessage()); } %> Hello Azure

执行后便可看到结果,为了测试,我事先在PERSONS数据表中添加了一笔数据。

图8

当然,在Windows Azure模拟器上执行的结果也一样。

图9

Access SQL Azure with Hibernate

?? 能透过JDBC连结SQL Azure的话,有名的OR Mapping Framework:Hibernate自然也可以使用啰,但过程有些小细节需要注意一下。

? 先将Hibernate所需要的Library加入。

图10

别忘记,Deployment Assembly也要一并处理。

图11

接着加入Hibernate Configuration文件。

图12

图13

图14

这里要注意一下,Hibernate Plug-In(需额外安装)产生的组态档对于SQL Server的JDBC Driver描述有误,需修改如下。



  




   
    
    
     com.microsoft.sqlserver.jdbc.SQLServerDriver 
     
      jdbc:sqlserver://c95ouvaxn9.database.windows.net;DatabaseName=PersonData 
      
       ..... 
       
        [email protected] 
        
         dbo 
         
          org.hibernate.dialect.SQLServerDialect 
         
        
       
      
     
    
    
  

最大的差异在于driver_class部分,Plug-In产生的是错误的。

组态档修改完后便可以建立Mapping Class。


package com.myazure.mapping;

public class Person {
	private String PERSON_ID;
	
	public String getPERSON_ID() {
		return PERSON_ID;
	}
	public void setPERSON_ID(String pERSON_ID) {
		PERSON_ID = pERSON_ID;
	}
	public String getNAME() {
		return NAME;
	}
	public void setNAME(String nAME) {
		NAME = nAME;
	}
	private String NAME;
}

然后透过Plug-In来产生Mapping文件。

图15

最后修改Hibernate Configuration文件来连结Mapping文件。



  


   
    
    
     com.microsoft.sqlserver.jdbc.SQLServerDriver
     
    
     jdbc:sqlserver://c95ouvaxn9.database.windows.net;DatabaseName=PersonData
     
    
     .....
     
    
     [email protected]
     
    
     dbo
     
    
     org.hibernate.dialect.SQLServerDialect
     
     
    
  

紧接着是重头戏,修改index.jsp如下。


<%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="org.hibernate.Session" %>
<%@ page import="com.myazure.*" %>
<%@ page import="com.myazure.mapping.*" %>
<%@ page import="org.hibernate.Criteria" %>




Insert title here


<%
try{ 		
	Session sess = HBSessionFactory.getSessionFactory().openSession();
	Criteria criteria = sess.createCriteria(Person.class);        
	Iterator persons = criteria.list().iterator();        
	while(persons.hasNext()) {            
		Person p = (Person)persons.next();
		out.print("ID: "   p.getPERSON_ID() "
"); out.print("NAME: " p.getNAME() "
"); } }catch(Exception e){ out.print("Error message: " e.getMessage()); } %> Hello Azure

完成并执行后,你应该会看到Hibernate抱怨找不到对应的JDBC Driver,这是因为Hibernate 4.12读取JDBC Driver的方式改变了,解决方法只要手动加上一行Class.forName就可。


<%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="org.hibernate.Session" %>
<%@ page import="com.myazure.*" %>
<%@ page import="com.myazure.mapping.*" %>
<%@ page import="org.hibernate.Criteria" %>




Insert title here


<%
try{ 
	Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //for hibernate 4.12
	
	Session sess = HBSessionFactory.getSessionFactory().openSession();
	Criteria criteria = sess.createCriteria(Person.class);        
	Iterator persons = criteria.list().iterator();        
	while(persons.hasNext()) {            
		Person p = (Person)persons.next();
		out.print("ID: "   p.getPERSON_ID() "
"); out.print("NAME: " p.getNAME() "
"); } }catch(Exception e){ out.print("Error message: " e.getMessage()); } %> Hello Azure

完成后测试,没问题的话应该可看到以下画面。

图16

在Windows Azure模拟环境下自然也是OK的。

图17

有图有真相, 在真实的Windows Azure环境下自然也是OK的。

图18

原文:大专栏  Access SQL Azure with JDBC/Hibernate


温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/SQL/21108.html