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网上图书商城完整项目-数据库操作工具类的更多相关文章

  1. JavaWeb网上图书商城完整项目-数据库操作工具类2-MapHandle的高级用法

    1.现在在上面一章的基础上,我们引入一个address表,该表记录person类的地址,address表的格式如下所示 现在person类要和address表想关联,得到当前联系人的住宅地址,我们应该 ...

  2. JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验

    1.现在我们要将table表中的输入的参数全部提交到后台进行校验,我们提交我们是按照表单的形式提交,所以我们首先需要在table表外面添加一个表单 <%@ page language=" ...

  3. JavaWeb网上图书商城完整项目--24.注册页面的css样式实现

    现在框架已经做好了,即下来我们要对页面进行装饰了,第一步给每一个元素添加id 1.最外面的div添加id为divMain 2.第二个div添加id为divTitle,里面的span对应的id为span ...

  4. JavaWeb网上图书商城完整项目--13.项目所需环境的搭建

    1.首先安装mysql 创建项目所需的数据库,直接运行项目提供的goods.sql文库 2.myeclipse创建一个web project ,项目的名称是goods 把视频中提供的项目原型下的提供的 ...

  5. JavaWeb网上图书商城完整项目--过滤器解决中文乱码

    我们知道,如果是POST请求,我们需要调用request.setCharacterEncoding(“utf-8”)方法来设计编码:如果是GET请求,我们需要自己手动来处理编码问题.如果我们使用了En ...

  6. JavaWeb网上图书商城完整项目--day03-1.图书模块功能介绍及相关类创建

    1 前两天我们学习了user用户模块和图书的分类模块,接下来我们学习图书模块 图书模块的功能主要是下面的功能: 2 接下来我们创建对应的包 我们来看看对应的数据库表t_book CREATE TABL ...

  7. JavaWeb网上图书商城完整项目--day02-12.激活功能各层实现

    1.我们来看程序的代码 数据库层: 1.通过激活码查找到对应的用户 2.设置用户的激活状态 2.业务层 1.通过数据库接口通过验证码得到对应的用户 2.判断当用户是否为空,如果没有通过激活码查找到对应 ...

  8. JavaWeb网上图书商城完整项目--day02-9.提交注册表单功能之servlet层实现

    1.当用户在界面提交注册提交的时候,我们在UerServlet来实现具体的业务方法 标准demo: 1CommonUtils CommonUtils类就两个方法: lString uuid():生成长 ...

  9. JavaWeb网上图书商城完整项目--day02-8.提交注册表单功能之dao、service实现

    1.发送邮件 发送邮件的时候的参数我们都写在了配置文件中,配置文件放在src目录下,可以使用类加载器进行加载该数据 //向注册的用户发送邮件 //1读取配置文件 Properties properti ...

随机推荐

  1. nodejs安装及环境变量的配置

    首先,nodejs安装到C盘的 建议安装到其他盘里,这是为了防止电脑出故障后C盘下载的东西会缺失 第一次安装nodejs的,第一步打开“nodejs官网:https://nodejs.org/zh-c ...

  2. Node.js躬行记(2)——文件系统和网络

    一.文件系统 fs模块可与文件系统进行交互,封装了常规的POSIX函数.POSIX(Portable Operating System Interface,可移植操作系统接口)是UNIX系统的一个设计 ...

  3. Codeforces Round #646 (Div. 2)【B. Subsequence Hate题解】

    具体思路已经在代码注释中给出,这里不再赘述. #include<iostream> #include<algorithm> using namespace std; int t ...

  4. Sublime Text3 注册码(Windows/Build 3176版本)| 开发工具

    转自:dushusir.com 1.修改hosts文件(路径:C:\Windows\System32\drivers\etc): 0.0.0.0 www.sublimetext.com 0.0.0.0 ...

  5. Java并发编程 (六) 线程安全策略

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.不可变对象-1 有一种安全的发布对象,即不可变对象. 1.不可变对象需要满足的条件 ① 对象创建以后 ...

  6. Java实现 LeetCode 336 回文对

    336. 回文对 给定一组唯一的单词, 找出所有不同 的索引对(i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串. 示例 1: 输入: ["abc ...

  7. Java实现 POJ 2749 分解因数(计蒜客)

    POJ 2749 分解因数(计蒜客) Description 给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * - * an,并且1 < a1 <= ...

  8. Java实现蓝桥杯二项式的系数规律

    二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学家杨辉1261年所著的<详解九章算法>一书里就出现了. 其排列规律: 1 1 1 2 1 3 3 1 4 6 4 ...

  9. Java实现莱布尼兹问题

    历史上有许多计算圆周率pai的公式,其中,格雷戈里和莱布尼茨发现了下面的公式: pai = 4*(1-1/3+1/5-1/7 -) 参见[图1.png] 这个公式简单而优美,但美中不足,它收敛的太慢了 ...

  10. ThinkPHP6.0 + Vue + ElementUI + axios 的环境安装到实现 CURD 操作!

    官方文档地址: ​ ThinkPHP6.0: https://www.kancloud.cn/manual/thinkphp6_0/1037479 ​ ElemetUI: https://elemen ...