一个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 ...
随机推荐
- 单片机联网,UIP实现tcp/udp协议
UIP是单片机界联网的一个很好地选择,移植这个库有点复杂,首先是第一步,网卡驱动要写好,使用的网卡芯片为ENC28J60,驱动可以再工程包里面找到 //配置网卡硬件,并设置MAC地址 //返回值:0, ...
- 歪国人DIY的MINI四轴
歪国人DIY的MINI四轴 Crazyflie 2.0 自己仿Crazyflie.CrazyPony
- 【转】iOS开发路线简述
简单看了下楼主说的很详细,尤其是最后面那个图描述很直观,让想学习ISO开发的程序猿很清晰每个步骤学习的内容,在此收藏下. iOS系统以及iPhone的出来都要感谢乔布斯,一个完美主义者,从如此优秀的i ...
- iOS UICollectionView 长按移动cell
ref:http://www.jianshu.com/p/31d07bf32d62 iOS 9之后: 示例如下 效果 前言: 看完你可以学到哪些呢? 就是文章标题那么多, 只有那么多. . 手残效果图 ...
- stm32实现待机唤醒
STM32的低功耗模式有3种:1.睡眠模式(CM3内核停止,外设仍然运行)2.停机模式(所有时钟都停止)3.待机模式(1.8v内核电源关闭) 进入待机模式的方法,以及设置WK_UP引脚用于把STM32 ...
- foreach笔记
结合泛型使用,不然就只能写成for(Object o : T). 缺点是没有下标,如下面代码 public class ForeachTest { public static void main(St ...
- StackExchange.Redis 官方文档(二) Configuration
配置 有多种方式可以配置redis,StackExchange.Redis提供了一个丰富的配置模型,在执行Connect (or ConnectAsync) 时被调用: var conn = Conn ...
- JS判断doctype文档模式-document.compatMode
IE对盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在Standards Mode下对于盒模型的解释和其他的标准浏览器是一样,但在Quirks Mode模式下则有 ...
- iOS 设置UILable字体,及计算长度和位置
UILabel *lastLable = [[UILabel alloc] init]; UIFont *font = [UIFont fontWithName:lastLable.font.font ...
- PHP 单态设计模式复习
单态设计模式,也可以叫做单例设计模式, 就是一个类只能让它生成一个对象,避免重复的NEW,影响运行效率(每NEW一个对象都会在内存中开辟一块空间) 示例代码 <?php /* * 单态设计模式 ...