JavaWeb网上图书商城完整项目-数据库操作工具类
1、首先安装数据库,在windows上安装和在unix上面安装环境不一样,我在自己的本地电脑上安装,安装成功之后,如果使用navicat远程工具访问,需要允许mysql远程能被访问
方法二、直接授权(推荐)
从任何主机上使用root用户,密码:youpassword(你的root密码)连接到mysql服务器:
# mysql -u root -proot
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
操作完后切记执行以下命令刷新权限
FLUSH PRIVILEGES
工程中需要添加下面的jar包

数据库表:

我们来看程序的代码:
package com.weiyuan.test;
public class Person {
private String pid;
private String pname;
private int age;
private String sex;
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((pid == null) ? 0 : pid.hashCode());
result = prime * result + ((pname == null) ? 0 : pname.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (pid == null) {
if (other.pid != null)
return false;
} else if (!pid.equals(other.pid))
return false;
if (pname == null) {
if (other.pname != null)
return false;
} else if (!pname.equals(other.pname))
return false;
if (sex == null) {
if (other.sex != null)
return false;
} else if (!sex.equals(other.sex))
return false;
return true;
}
public Person(String pid, String pname, int age, String sex) {
super();
this.pid = pid;
this.pname = pname;
this.age = age;
this.sex = sex;
}
public Person(){
}
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", age=" + age
+ ", sex=" + sex + "]";
}
}
package com.weiyuan.test; import java.sql.SQLException;
import java.util.List;
import java.util.Map; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import org.junit.runner.RunWith; import cn.itcast.jdbc.JdbcUtils;
import cn.itcast.jdbc.TxQueryRunner; /**
* 对数据库操作类的测试
* */
public class TxRunnerTest { @Test
public void testUpdate() throws SQLException{
QueryRunner run = new TxQueryRunner();
String sql = "insert into person(pid,pname,age,sex)values(?,?,?,?)";
Object[] params = {"2","张三",20,"男"};
run.update(sql,params);
System.out.println("ok"); } /*
* 测试批处理的方法
* */ @Test
public void testUpdate2() throws SQLException{
try{
//开启事物
JdbcUtils.beginTransaction();
QueryRunner run = new TxQueryRunner();
String sql = "insert into person(pid,pname,age,sex)values(?,?,?,?)";
Object[] params = {"2","张三",20,"男"};
run.update(sql,params); Object[] params2 = {"20","张三",20,"男"};
run.update(sql,params2); //提交事物
JdbcUtils.commitTransaction();
}catch(Exception e){
//如果存在异常回滚事物
JdbcUtils.rollbackTransaction();
}
} /**测试查询方法
* @throws SQLException
* 注意事项:1 person类中的字段必须和数据库中表的字段名称一模一样
* 2 person存在public Person(){ }的构造函数
* */
@Test
public void testQuery() throws SQLException{ QueryRunner run = new TxQueryRunner();
String sql = "select * from person where pid=?";
Person p = run.query(sql, new BeanHandler<Person>(Person.class),"20");
System.out.println(p); } @Test
public void testQuery2() throws SQLException{ QueryRunner run = new TxQueryRunner();
String sql = "select * from person";
List<Person> lists = run.query(sql, new BeanListHandler<Person>(Person.class));
System.out.println(lists); } @Test
public void testQuery3() throws SQLException{
/*
* {sex=男, age=20, pname=张三, pid=20}
* */
QueryRunner run = new TxQueryRunner();
String sql = "select * from person where pid=?";
Map<String,Object> map= run.query(sql,
new MapHandler(),"20");
System.out.println(map); } @Test
public void testQuery4() throws SQLException{
/*
* [{sex=男, age=1, pname=l;l;sl;, pid=1}, {sex=男, age=20, pname=张三, pid=2},
* {sex=男, age=20, pname=张三, pid=2}, {sex=男, age=20, pname=张三, pid=2},
* {sex=男, age=20, pname=张三, pid=2}, {sex=男, age=20, pname=张三, pid=2},
* {sex=男, age=20, pname=张三, pid=20}, {sex=男, age=20, pname=张三, pid=2}, {sex=男, age=20, pname=张三, pid=20},
* {sex=男, age=20, pname=张三, pid=2}]
* */
QueryRunner run = new TxQueryRunner();
String sql = "select * from person";
List<Map<String,Object>> maps= run.query(sql,
new MapListHandler());
System.out.println(maps); } @Test
public void testQuery5() throws SQLException{
/*
* 统计表的总共有多少条记录
* ScalarHandler将单行单列的结果封装成Object对象
* 直接如果直接将obj转成Int对象不同的驱动可能存在不一样的问题,
* 所以先转换成Number对象,在转化成int类型
* */
QueryRunner run = new TxQueryRunner();
String sql = "select count(*) from person";
Object obj = run.query(sql, new ScalarHandler());
Number number = (Number) obj;
int count = number.intValue();
System.out.println(count); }
}
JavaWeb网上图书商城完整项目-数据库操作工具类的更多相关文章
- JavaWeb网上图书商城完整项目-数据库操作工具类2-MapHandle的高级用法
1.现在在上面一章的基础上,我们引入一个address表,该表记录person类的地址,address表的格式如下所示 现在person类要和address表想关联,得到当前联系人的住宅地址,我们应该 ...
- JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验
1.现在我们要将table表中的输入的参数全部提交到后台进行校验,我们提交我们是按照表单的形式提交,所以我们首先需要在table表外面添加一个表单 <%@ page language=" ...
- JavaWeb网上图书商城完整项目--24.注册页面的css样式实现
现在框架已经做好了,即下来我们要对页面进行装饰了,第一步给每一个元素添加id 1.最外面的div添加id为divMain 2.第二个div添加id为divTitle,里面的span对应的id为span ...
- JavaWeb网上图书商城完整项目--13.项目所需环境的搭建
1.首先安装mysql 创建项目所需的数据库,直接运行项目提供的goods.sql文库 2.myeclipse创建一个web project ,项目的名称是goods 把视频中提供的项目原型下的提供的 ...
- JavaWeb网上图书商城完整项目--过滤器解决中文乱码
我们知道,如果是POST请求,我们需要调用request.setCharacterEncoding(“utf-8”)方法来设计编码:如果是GET请求,我们需要自己手动来处理编码问题.如果我们使用了En ...
- JavaWeb网上图书商城完整项目--day03-1.图书模块功能介绍及相关类创建
1 前两天我们学习了user用户模块和图书的分类模块,接下来我们学习图书模块 图书模块的功能主要是下面的功能: 2 接下来我们创建对应的包 我们来看看对应的数据库表t_book CREATE TABL ...
- JavaWeb网上图书商城完整项目--day02-12.激活功能各层实现
1.我们来看程序的代码 数据库层: 1.通过激活码查找到对应的用户 2.设置用户的激活状态 2.业务层 1.通过数据库接口通过验证码得到对应的用户 2.判断当用户是否为空,如果没有通过激活码查找到对应 ...
- JavaWeb网上图书商城完整项目--day02-9.提交注册表单功能之servlet层实现
1.当用户在界面提交注册提交的时候,我们在UerServlet来实现具体的业务方法 标准demo: 1CommonUtils CommonUtils类就两个方法: lString uuid():生成长 ...
- JavaWeb网上图书商城完整项目--day02-8.提交注册表单功能之dao、service实现
1.发送邮件 发送邮件的时候的参数我们都写在了配置文件中,配置文件放在src目录下,可以使用类加载器进行加载该数据 //向注册的用户发送邮件 //1读取配置文件 Properties properti ...
随机推荐
- [安卓基础] 005.创建一个简单的UI
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- DataFrame-选择与切片
取得DataFrame对象reviews的description列的前10个值(或者说reviews前10行的description列): reviews.iloc[:10].loc[:,'descr ...
- Java和NodeJS解析XML对比
Java解析XML 1.接收xml文件或者字符串,转为InputStream 2.使用DocumentBuilderFactory对象将InputStream转为document对象 Document ...
- python调用大漠插件教程02大漠插件绑定测试工具
什么是大漠插件绑定测试工具? 这是大漠插件为了方便使用者调试绑定窗口的模式而设计的,因为有些程序不会接受一般的鼠键事件的响应模式,每个程序所需要的响应模式都不尽相同,所以这个工具可以使我们在绑定窗口时 ...
- 08 . Nginx状态码
HTTP状态码 本篇文章主要介绍运维过程中经常遇到的状态码,并通过业界流行的Nginx进行模拟实现. 2XX状态码 2XX类型状态码表示一个HTTP请求成功,最典型的就是200 # 200状态码 # ...
- PAT1065 单身狗 (25分) 思路记录——参考大神柳婼
1065 单身狗 (25分) “单身狗”是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ 50 000), ...
- Rocket - tilelink - CacheCork
https://mp.weixin.qq.com/s/QsL1Bfb0JsOaxWW_muhg_Q 简单介绍CacheCork的实现. 1. 基本介绍 Cache的塞子,下游没有 ...
- Chisel3 - bind - Binding
https://mp.weixin.qq.com/s/2318e6VJ4wFGpWwBOmTikA Chisel数据类型(Data)与Module的绑定关系,根据Data的使用方式不同,而有多种绑 ...
- Java实现 LeetCode 590 N叉树的后序遍历(遍历树,迭代法)
590. N叉树的后序遍历 给定一个 N 叉树,返回其节点值的后序遍历. 例如,给定一个 3叉树 : 返回其后序遍历: [5,6,3,2,4,1]. 说明: 递归法很简单,你可以使用迭代法完成此题吗? ...
- Java实现 LeetCode 515 在每个树行中找最大值
515. 在每个树行中找最大值 您需要在二叉树的每一行中找到最大的值. 示例: 输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9] /** * Definition for ...