一个RESTful+MySQL程序
前言
本章内容适合初学者(本人也是初学者)。
上一章内容(http://www.cnblogs.com/vanezkw/p/6414392.html)是在浏览器中显示Hello World,今天我们要讲的是把Hello World这样的字符串从数据库里面取出来(比较接近实际开发)。
准备工作
1、安装mysql。
2、安装mysql可视化工具Navicat。(由于本人偏好,所以暂时用这个可视化工具)。
3、Intellij安装mysql jdbc驱动。
4、在GlassFish中加入mysql jdbc驱动。
安装启动mysql
1、下载地址https://www.mysql.com/downloads/ (虽然你可以搜到很多下载的渠道,但是建议在官方下载,你懂的)。
2、根据提示进行安装配置。(这不是重点,不清楚的自己google)。
3、如果出现安装不上那应该是系统权限问题,采用系统管理员权限安装就可以了。(我在win10下进行安装遇到了权限问题)。
4、启动mysql服务。
5、加入测试数据。数据库我们命名成RESTful,加一个表Product,里面包括4个字段:id、name、cover、price。具体如图:

为了方便测试就先加了一条记录。
安装Navicat
我们用Navicat进行可视化操作,当然你可以直接在mysql提供的工具或命令行进行数据操作。
1、下载地址https://www.navicat.com/download,至于是否付费或者破解就看你自己了,你懂的。
2、根据提示进行安装。
Intellij安装mysql jdbc驱动
1、在Intellij在主菜单中选择View|Tool Windows|Databases。

2、右边弹出Database栏目,选择上面的“+”,依次选择DataSource|MySQL,此时弹出一个Data Source and Drive的对话框。


3、点击左上方“+”,选择MySQL。根据提示填写右边的字段。

4、点击右边面板的Driver:MySQL,下载MySQL驱动。
在GlassFish中加入mysql jdbc驱动。
1、把mysql的驱动(eg:mysql-connector-java-5.1.35-bin.jar)放入..\glassfish4\glassfish\lib (具体参考你的GlassFish的安装目录)。
编码
1、加入mysql驱动jar包。
2、目录结构如下:

3、目录结构介绍。bo里面是实体类,dao是数据库相关的操作类(为了方便理解流程所以不涉及ORM之类的东西)。下面来看看每个类的具体情况:
BoProduct.java
package bo; /**
* Created by Administrator on 2017/2/19 0019.
*/
public class BoProduct {
private int id;
private String name;
private String cover;
private long price; public BoProduct(int id, String name, String cover, long price) {
this.id = id;
this.name = name;
this.cover = cover;
this.price = price;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getCover() {
return cover;
} public void setCover(String cover) {
this.cover = cover;
} public long getPrice() {
return price;
} public void setPrice(long price) {
this.price = price;
} @Override
public String toString() {
return "BoProduct{" +
"id=" + id +
", name='" + name + '\'' +
", cover='" + cover + '\'' +
", price=" + price +
'}';
}
}
DbConnection.java
package dao; /**
* Created by Administrator on 2017/2/19 0019.
*/ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class DbConnection { public Connection getConnection() throws Exception {
try {
String connectionURL = "jdbc:mysql://localhost:3306/RESTful";
Connection connection = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL, "root", "root");
return connection;
} catch (SQLException e) {
e.printStackTrace();
throw e;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
DbProductManager.java
package dao; import bo.BoProduct; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; /**
* Created by Administrator on 2017/2/19 0019.
*/
public class DbProductManager { public List<BoProduct> getAllProduct() {
List<BoProduct> reuslt = null;
DbConnection database = new DbConnection();
Connection connection = null;
try {
connection = database.getConnection();
PreparedStatement ps = connection
.prepareStatement("SELECT * FROM product");
ResultSet rs = ps.executeQuery();
reuslt = new ArrayList<>();
while (rs.next()) {
BoProduct item = new BoProduct(rs.getInt("id"),rs.getString("name"),rs.getString("cover"),rs.getLong("price"));
reuslt.add(item);
}
} catch (Exception e) {
e.printStackTrace();
}
return reuslt;
}
}
HelloWorld.java
import bo.BoProduct;
import dao.DbProductManager; import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.List; /**
* Created by Administrator on 2017/2/18 0018.
*/
@Path("/helloworld")
public class HelloWorld {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getClichedMessage() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("data being\n");
DbProductManager dbProductManager = new DbProductManager();
List<BoProduct> allProduct = dbProductManager.getAllProduct();
if (null != allProduct && !allProduct.isEmpty()) {
for (BoProduct item : allProduct) {
stringBuilder.append(item.toString()).append("\n");
}
}
stringBuilder.append("data end\n");
return stringBuilder.toString();
}
}
MyApplication
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set; /**
* Created by Administrator on 2017/2/18 0018.
*/
//Defines the base URI for all resource URIs.
@ApplicationPath("/")
//The java class declares root resource and provider classes
public class MyApplication extends Application {
//The method returns a non-empty collection with classes, that must be included in the published JAX-RS application
@Override
public Set<Class<?>> getClasses() {
HashSet h = new HashSet<Class<?>>();
h.add(HelloWorld.class);
return h;
}
}
运行程序
1、点击运行按钮。

2、此时IDE为你做了一些你并不需要关系的事情(非业务的):编译并部署到服务器,启动浏览器。
3、此时看到浏览器如下显示则说明你成功了。

总结
1、基本流程已经跑起来,后期需求学习的目前比较流行的一些框架。
2、下一个版本我们使用ORM框架来写数据库这一部分。
3、本人初学服务器相关知识,有错误的地方欢迎各位读者指出纠正,如果你对android开发感兴趣请加qq群196761677、311536202。
一个RESTful+MySQL程序的更多相关文章
- 基于SpringBoot开发一个Restful服务,实现增删改查功能
前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...
- 使用python的Flask实现一个RESTful API服务器端[翻译]
最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...
- 01@MySQL_Course_LabVIEW+MySQL程序开发
LabVIEW+MySQL程序开发 大数据时代,LabVIEW程序开发怎么能少了数据库这一强大的工具,然而大多数的LabVIEW工程师对于数据库的概念了解比较少,所以本课程重点介绍如何利用MySQL, ...
- 通过beego快速创建一个Restful风格API项目及API文档自动化
通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...
- 在Windows下设置环境变量 运行mysql程序变得更容易
在Windows下设置环境变量,点开始菜单,右键单击我的电脑--属性--高级--环境变量 可以看到PATH的变量是这样的: C:\WINDOWS;C:\WINDOWS\COMMAND 为了让运行m ...
- 使用python的Flask实现一个RESTful API服务器端
使用python的Flask实现一个RESTful API服务器端 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文 ...
- MFC通过ODBC连接Mysql程序
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 MFC通过ODBC连接 ...
- 在GlassFish应用服务器上创建并运行你的第一个Restful Web Service【翻译】
前言 本人一直开发Android应用,目前Android就业形势恶劣,甚至会一路下滑,因此决定学习服务器开发.采用的语言是java,IDE是Intellij,在下载Intellij的同时看到官网很多优 ...
- 如何快速地开发一个微信小程序
如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...
随机推荐
- 以太网数据包、IP包、TCP/UDP 包的结构(转)
源:以太网数据包.IP包.TCP/UDP 包的结构 版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6). IP包头长度(Head ...
- 图解 Monad
原文地址: http://www.ruanyifeng.com/blog/2015/07/monad.html
- 【转】Linux目录下/dev/shm的理解和使用
一般来说,现场部署 都要根据内存的大小来设定/dev/shm的大小,大部分使用的是默认的值! Linux目录下/dev/shm的理解和使用 [日期:2014-05-16] 来源:Linux社区 作 ...
- java和Ajax
原博(实在太啰嗦了):https://netbeans.org/kb/docs/web/ajax-quickstart_zh_CN.html 1.Ajax的基本原理 Ajax 代表异步 JavaScr ...
- 得到css style
//根据ID返回dom元素 2 var $ = function(id){return document.getElementById(id);} 3 //返回dom元素的当前某css值 4 var ...
- js 验证文本框只能输入数字和小数点
第一步.添加js方法 function check(e) { var re = /^\d+(?=\.{0,1}\d+$|$)/ if (e.value != "") ...
- 天兔(Lepus)监控系统慢查询分析平台安装配置
被监控端要安装pt工具 [root@HE1~]## yum -y install perl-IO-Socket-SSL [root@HE1~]## yum -y install perl-DBI [r ...
- Windows Server 2008 R2防火墙入站规则
一般服务器的端口都设置了外网无法访问,iis中创建的网站外网也是访问不了的,需要创建指定端口的入站规则后方可访问. 方法/步骤 服务器管理器-->配置-->高级安全windows防 ...
- LazyInitializationException--由于session关闭引发的异常
1,页面中进行person.department.departmentName的读取 2,Action 中只读取了person,事务作用在Service的方法中 3,后台会有org.hibernate ...
- Redis缓存数据之简单逻辑
并发不高的情况: 读: 读redis->没有,读DataBase->把DB数据写回redis,有的话直接从redis中取: 写: 写DataBase->成功,再写redis: 并发高 ...