Java实现的WebService连接数据库详解 (java webservice访问数据库)

Web服务是客户端和服务器之间的一种通用通信方式,它通过HTTP协议发布WebService并接受SOAP消息,实现跨平台、跨语言的数据交互。而Java作为一种跨平台的开发语言,自然也可以用来开发WebService。在实际开发中,与数据库的交互是非常常见的需求之一,因此本文将详细介绍如何使用Java实现的WebService连接数据库。

一、WebService的搭建

在介绍如何实现Java连接数据库之前,我们先要有一个能够接受SOAP消息的WebService,并可以正确地解析和返回SOAP消息。这里我们使用Eclipse作为开发工具,先创建一个Web项目,然后在项目中创建一个类,用来实现我们的WebService:

“`

package com.example.webservice;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

import javax.xml.ws.Endpoint;

@WebService

public class MyWebService {

@WebMethod

public String sayHello(@WebParam(name = “name”) String name) {

return “Hello ” + name + “!”;

}

public static void mn(String[] args) {

Endpoint.publish(“http://localhost:8080/MyWebService”, new MyWebService());

System.out.println(“MyWebService has started.”);

}

}

“`

这个类很简单,它只有一个公开的方法sayHello,它接受一个名为name的参数,并返回一个字符串,表示问候语。我们使用@WebService注解来标识它是一个WebService,使用@WebMethod注解来标识它是可供调用的方法,使用@WebParam注解来标识方法参数的名称。在mn方法中,我们使用Endpoint.publish方法将WebService发布到本地的8080端口,并启动WebService服务。

我们可以使用浏览器访问http://localhost:8080/MyWebService?wsdl,来获取我们刚刚发布的WebService的WSDL文件。WSDL是一种XML格式的描述文件,它用来描述WebService的接口、输入参数、输出参数等信息,客户端通过WSDL文件可以了解WebService提供的功能和参数要求,从而可以生成与WebService相匹配的客户端代码。

二、连接MySQL数据库

接下来我们使用Java连接MySQL数据库,并在WebService中对数据库进行操作。在使用Java连接数据库之前,我们需要确保我们的项目中包含了MySQL驱动程序的Jar包,我们可以将驱动程序的Jar包添加到项目的lib目录中,然后在项目的classpath中添加Jar包,才能在代码中使用MySQL提供的API访问数据库。

下面是连接MySQL的Java代码示例:

“`

package com.example.database;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class MyDatabase {

private String url;

private String username;

private String password;

public MyDatabase(String url, String username, String password) {

this.url = url;

this.username = username;

this.password = password;

}

public Connection getConnection() throws ClassNotFoundException, SQLException {

Class.forName(“com.mysql.jdbc.Driver”);

return DriverManager.getConnection(url, username, password);

}

public ResultSet select(String sql) throws ClassNotFoundException, SQLException {

Connection conn = getConnection();

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

return rs;

}

}

“`

这个类MyDatabase是一个封装了MySQL数据库连接方法的类,它包含了一个getConnection方法,可以返回一个连接到MySQL数据库的Connection对象,还包含一个select方法,可以用来执行查询语句并返回结果集。getConnection方法中,我们使用了Java反射机制来动态加载MySQL驱动程序,然后通过DriverManager.getConnection方法获取Connection对象。在select方法中,我们首先获得一个Connection对象,然后通过它创建一个Statement对象,最后调用Statement对象的executeQuery方法执行SQL语句并返回结果集。

接下来我们在WebService中使用MyDatabase类来连接MySQL数据库,这里我们以查询一个学生表为例:

“`

package com.example.webservice;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

import javax.xml.bind.JAXBException;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

import javax.xml.ws.Endpoint;

import com.example.database.MyDatabase;

@WebService

public class StudentService {

private static final String URL = “jdbc:mysql://localhost:3306/mydb”;

private static final String USERNAME = “root”;

private static final String PASSWORD = “123456”;

@WebMethod

public StudentList getStudents() throws ClassNotFoundException, SQLException, JAXBException {

MyDatabase db = new MyDatabase(URL, USERNAME, PASSWORD);

ResultSet rs = db.select(“SELECT * FROM student”);

StudentList list = new StudentList();

while (rs.next()) {

Student student = new Student();

student.setId(rs.getInt(“id”));

student.setName(rs.getString(“name”));

student.setGender(rs.getString(“gender”));

student.setAge(rs.getInt(“age”));

list.add(student);

}

return list;

}

public static void mn(String[] args) {

Endpoint.publish(“http://localhost:8080/StudentService”, new StudentService());

System.out.println(“StudentService has started.”);

}

@XmlRootElement

public static class Student {

private int id;

private String name;

private String gender;

private int age;

@XmlElement

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

@XmlElement

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@XmlElement

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

@XmlElement

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

@XmlRootElement

public static class StudentList {

private List students = new ArrayList();

public List getStudents() {

return students;

}

public void setStudents(List students) {

this.students = students;

}

public void add(Student student) {

students.add(student);

}

}

}

“`

我们在StudentService类中增加了一个getStudents方法,它的返回值为StudentList类型,StudentList是一个包含了Student类型的列表。在getStudents方法中,我们使用MyDatabase类创建了一个连接到MySQL数据库的Connection对象,然后执行了一个查询语句,获取到结果集。最后我们遍历查询结果集,使用Student类来封装学生信息,并将Student对象添加到StudentList中,最后将StudentList返回给客户端。

为了让客户端可以正确地解析和生成StudentList类型的对象,我们使用了JAXB注解,并在Student和StudentList类上分别添加了@XmlRootElement注解。这样客户端就可以使用Java自带的JAXB API来将SOAP消息转换为Java对象,并将Java对象转换为SOAP消息了。

三、WebService的调用

最后我们就可以测试我们刚刚创建的WebService了。在这里我们使用SoapUI来调用WebService接口。

在SoapUI中创建一个新项目,并添加我们发布的WebService的WSDL文件:

点击OK后,SoapUI就生成了一个MyWebService项目,并自动生成了与WebService相匹配的SOAP请求:

我们将请求中的name字段的值修改为“Jack”,然后点击“Send Request”按钮。SoapUI发送请求到WebService的地址,接收到服务端的响应后,自动将响应解析为SOAP消息,并以XML格式展示在右侧的响应面板中:

我们可以看到,WebService返回了一个包含了“Hello Jack!”的SOAP消息,这表明我们刚刚创建的WebService已经成功地连接到了MySQL数据库,并返回了数据。


数据运维技术 » Java实现的WebService连接数据库详解 (java webservice访问数据库)