一个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 ...
随机推荐
- GCJ 2008 APAC local onsites C Millionaire
时间复杂度很大.dp[i][j]表示第i轮 j这种状态的概率. #include<cstdio> #include<cstring> #include<cmath> ...
- STM32驱动TEA5767收音机模块
Tea5767是飞利浦公司出的一款集成化的收音机芯片,大四的时候机缘巧合遇到了这个芯片,用了一下,写点资料 主要特性 TEA5767HN是一款低功耗立体声收音IC,广泛应用于手机MP3 .MP 4 播 ...
- objective-c之各种数值
各种数值 NSArray和NSDictionary都只能存储对象,不能存储任何基本类型的数据,如int,float,struct.因此我们可以用对象来封装基本的数值. NSNumber Cocoa提供 ...
- ajax 注册
$(document).ready(function(e){ $("#uid").blur(function(){ var uid = $("#uid").va ...
- IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)
编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...
- Hooking Android System Calls for Pleasure and Benefit
The Android kernel is a powerful ally to the reverse engineer. While regular Android apps are hopele ...
- 数据库 Mysql事务详解
Mysql事务 mysql的事务默认是自动提交的,也就是你提交一个query,他就直接执行!我们可以通过 禁止自动提交 开启自动提交 //mysql事务 #include <stdio.h> ...
- R语言实战(五)方差分析与功效分析
本文对应<R语言实战>第9章:方差分析:第10章:功效分析 ================================================================ ...
- onethink的熟悉
2014.07.14 下载后,并安装成功! 发现一个安装的问题.安装时,无法直接成功. 修改Url 直接跳到最后一步,实现了安装.去官网查询,发现是程序的问题. 尝试构建企业官网. 首先 实现一个企业 ...
- SVN和Git的一些用法总结
(A)SVN (1)查看日志提交的时候一般会写上注释,如果要查看提交日志,用以下命令: 1 svn log -l 4 其中,-l 4表示只查看最近4条日志(也可以没有这样的参数,就表示查看所有日志). ...