基于Servlet的简单数据库应用

项目的创建

  1. 这里选择创建一个Java Web项目,命名为hero(数据库数据就参考自上网的数据了,这里自己随便改)

  1. 导入必要的lib包,并配置Tomcat

  1. 连接MySql数据库



输入自己数据库的账号和密码,最好最后检查一下连接是否成功

  1. 数据库的创建
drop database if exists hero;
create database hero default charset utf8;create table hero(id int(11) not null primary key,name varchar(255) not null,hp double not null,damage double not null
)engine = InnoDB default charset utf8;

然后自己随便插入几条数据进行测试就行,这里插入的是

类的编写

由于项目比较简单,因此就不写DBUtil了,但是建议写项目的时候,最好单独写一个工具类。

  • 在【bean】下创建Hero类
package bean;public class Hero {private int id;   //idprivate String name;    //名字private double hp;   //血量private double damage;    //伤害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 double getHp() {return hp;}public void setHp(double hp) {this.hp = hp;}public double getDamage() {return damage;}public void setDamage(double damage) {this.damage = damage;}}
  • 在【dao】下创建HeroDAO类
package dao;import bean.Hero;import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;public class HeroDAO {private String url = "jdbc:mysql://localhost:3306"; //数据库网址private String database = "hero";//数据库名private String userName = "root"; //数据库账号private String password = "62556609"; //数据库密码public HeroDAO(){try{Class.forName("com.mysql.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace();}}//获取连接public static Connection getConnection() throws SQLException{return  DriverManager.getConnection(url + "/" + database, userName, password);}public int getTotal(){int total = 0;try(Connection connection = getConnection(); Statement statement = connection.createStatement()){String sql = "select * from hero";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()){total = resultSet.getInt(1);}}catch (SQLException e){e.printStackTrace();}return total;}public void add(Hero hero){String sql = "insert into hero values(null, ?, ?, ?)";try(Connection connection = getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)){preparedStatement.setString(1, hero.getName());preparedStatement.setDouble(2,hero.getHp());preparedStatement.setDouble(3,hero.getDamage());preparedStatement.execute();}catch (SQLException e){e.printStackTrace();}}public void delete(int id){String sql = "delete from hero where id = ?";try(Connection connection = getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)){preparedStatement.setInt(1,id);preparedStatement.execute();}catch (SQLException e){e.printStackTrace();}}public void update(Hero hero){String sql = "update hero set name = ?, hp = ?, damage = ?";try(Connection connection = getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)){preparedStatement.setString(1, hero.getName());preparedStatement.setDouble(2, hero.getHp());preparedStatement.setDouble(3,hero.getDamage());preparedStatement.execute();}catch (SQLException e){e.printStackTrace();}}public Hero getById(int id){Hero hero = new Hero();String sql = "select * from student where id = " + id;try(Connection connection = getConnection(); Statement statement = connection.createStatement()){ResultSet resultSet = statement.executeQuery(sql);if (resultSet.next()){String name = resultSet.getString("name");double hp = resultSet.getDouble("hp");double damage = resultSet.getDouble("damage");hero.setName(name);hero.setHp(hp);hero.setDamage(damage);}}catch (SQLException e){e.printStackTrace();}return hero;}public List<Hero> list(){//return list(0, Short.MAX_VALUE);return list(0, 2);}public List<Hero> list(int start, int count){List<Hero> heroList = new ArrayList<>();String sql = "select * from hero order by id desc limit ?, ?";try(Connection connection = getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)){preparedStatement.setInt(1, start);preparedStatement.setInt(2, count);ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()){Hero hero = new Hero();hero.setId(resultSet.getInt("id"));hero.setName(resultSet.getString("name"));hero.setHp(resultSet.getDouble("hp"));hero.setDamage(resultSet.getDouble("damage"));heroList.add(hero);}}catch (SQLException e){e.printStackTrace();}return heroList;}}
  • 在【servlet】包下新建HeroListServlet类
package servlet;import bean.Hero;
import dao.HeroDAO;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;public class HeroListServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {List<Hero> heros = new HeroDAO().list();req.setAttribute("heros", heros);req.getRequestDispatcher("listHero.jsp").forward(req, resp);}
}

Web层

  • listHero.jsp的编写
<%--Created by IntelliJ IDEA.User: ShevaDate: 2019/7/5Time: 11:31To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"pageEncoding="UTF-8" import="java.util.*"%><%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%><table align="center" border="1" cellspacing="0"><tr><td>id</td><td>name</td><td>hp</td><td>damage</td><td>edit</td><td>delete</td></tr><c:forEach items="${heros}" var="hero" varStatus="st"><tr><td>${hero.id}</td><td>${hero.name}</td><td>${hero.hp}</td><td>${hero.damage}</td><%--  这两个是业务逻辑按钮,目前还没写 。。。 --%><td>edit</td><td>delete</td></tr></c:forEach>
</table>
  • 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>HeroListServlet</servlet-name><servlet-class>servlet.HeroListServlet</servlet-class></servlet><servlet-mapping><servlet-name>HeroListServlet</servlet-name><url-pattern>/listHero</url-pattern></servlet-mapping>
</web-app>

运行

只是做了一个简单的视图展示,基本的操作逻辑都还没有加上,这个项目等以后有空再把坑填上吧。

  • 注:连接数据库的时候可能会出现时区问题,解决方法:

url后面增加:

jdbc.url=jdbc:mysql://localhost:3306/seckill?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC

试了很多次这个方法都不管用后来直接修改了时区。

修改数据库时区:

set global time_zone = ‘+8:00’; ##修改mysql全局时区为北京时间,即我们所在的东8区
set time_zone = ‘+8:00’; ##修改当前会话时区
flush privileges; #立即生效

  • 注:运行的时候还碰到一个问题,tomcat无法连接到数据库,后来发现要把mysql驱动要放到tomcat目录下的lib文件夹,切记切记,因为这个问题浪费了不少时间

Java简单数据库应用相关推荐

  1. java 微型数据库_Java 9代码工具:使用Java微型基准测试工具的实践会话

    java 微型数据库 用肉眼看,基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题. 但是,通常情况下,这是幼稚的方法. 提供具有准确和可重复结果的有意义的基准并非易事. 在本文中,我们将向您 ...

  2. java实现数据库内容修改_数据库更改到Java环境中实现可持续和平

    java实现数据库内容修改 对我们而言,可持续和平正在消除不确定性. 在这种情况下,由于数据库更改,欢迎使用Ruby的Active Record Migrations . 迁移对我们意味着什么? 嗯, ...

  3. java传入数据库生成柱状图_Java读取数据库数据生成柱状图

    此案例是用swing显示数据的.须要引入jfreechart相关包.不同版本号可能包不同样.本人用的是 此案例在ssi框架下会报错,不用框架就没问题. Java后台逻辑代码: public class ...

  4. Java的数据库编程之入门案例

    通过上一篇博客Java的数据库编程之背景概述,可以得出: 1.JDBC API与驱动器管理器是有SUN公司制定并退出的: 2.每个数据库的驱动器程序是由每个数据库开发商以及数据库工具开发商在遵循SUN ...

  5. Java的数据库编程之背景概述

    (一)首先简单介绍下Java数据库编程的发展史: 1996年,SUN公司发布了第1版的Java数据库连接(JDBC)API,使编程人员可以通过这个API连接到数据库,并使用SQL完成对数据库的各种操作 ...

  6. AJAX for Java简单表数据查询实例

    AJAX for Java简单表数据查询实例<?XML:NAMESPACE PREFIX = O /> AJAX WebShop 3对Java开发具有良好的支持,同时也提供了各种层次的后台 ...

  7. 通过Java访问数据库---JDBC

    一.JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java ...

  8. JAVA查询数据库并显示jsp_java servlet数据库查询并将数据显示到jsp页面

    需要的jar包:mysql-connector-java.jar build path只是个jar包的引用,部署的时候想不丢包最好还是手动拷贝到对应项目的lib文件下. 在try{}中定义的变量为局部 ...

  9. Java简单演示悲观锁

    每博一文案 看过这样一句话,时间在不断的筛选你身边的人和事.当你什么都不在乎的时候,你的人生才刚刚开始. 当我们什么都不在乎时,会发现什么都可能会进行经历,但什么都一定会过去,起始都会离开的或早或晚吧 ...

最新文章

  1. 54页PPT揭示AI革命及其前沿进展!
  2. Cent6.5 64位yum安装mysql5.5
  3. 机器学习十大算法(二)
  4. php self 内存,php导致内存溢出
  5. php ajax xmlhttpreq 上传文件 get,使用Ajax XmlHttpRequest上传文件
  6. 喝最烈的酒、挖最大的DONG——工具与技巧篇
  7. matlab编程的步骤,如何画matlab程序的流程图?求解答
  8. 使C#代码现代化——第三部分:值
  9. loadrunner基础学习笔记二
  10. 关于计算机ps读后感,ps心得体会4篇
  11. Linux线程属性总结
  12. android 取消蓝牙配对框 实现自动配对,Android 取消蓝牙配对框实现自动配对功能...
  13. 位置定位LocationManager
  14. HbuildX H5+App监听手机返回键以及webview关闭
  15. Kafka 中的这些设计思想值得一学!
  16. windows的C盘根目錄下中文文件夾重命名
  17. PDF怎么压缩文件大小
  18. kali新手入门教学(13)--nc连接
  19. 大数据分布式计算开源框架Hadoop的介绍和运用
  20. 优思学院|取得美质协(ASQ)六西格玛黑带(CSSBB)的个人经验谈

热门文章

  1. surfaceview.getHolder().addCallback(Callback callback) 添加回调后未回调surfaceCreated()
  2. 浅谈恶意软件分析工程师的职业发展路线
  3. java 数字转换流量_流量充值示例代码
  4. Verilog——JTAG标准的状态机实现
  5. 施密特触发器电路及工作原理
  6. VB、C#等PC高级语言PLC通讯组件例程的下载地址收集整理
  7. 无线接收信号强度(RSSI)那些事儿
  8. 快速压缩工具Zstd
  9. D2550安装Centos7
  10. 【个人简记】基于MDH,6R机器人运动学正解