建议先看完一遍代码,然后理解个大概,一部分一部分的去实现效果会很好(不建议看着代码敲,只要一部分一部分的去理解,很简单的就可以搞定,哈哈!)
一.创建数据库
数据库名为:jdbcdb (可以使用SQLyog工具进行数据库的创建)
二.创建数据表
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`age` int(100) DEFAULT NULL,
`description` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
创建完表信息后,在SQLyog工具内打开创建的表,添加以下信息,图示如下:
三.创建项目、项目的包
com.pxw.util包用来封装工具类,数据库连接。com.pxw.entity包用来封装实体类。com.pxw.dao包用来封装接口的操作方法(增删改查)。com.pxw.daoImpl包用来实现com.pxw.dao包里的接口类.com.pxw.test包用来进行测试jdbc连接数据库后的增删改查操作。
四.导入数据库的jar包及配置文件
然后鼠标移动到jar包上右键选择“构建路径—添加至构建路径“,到此就完成了导入数据库的包操作(jar包从网上搜索下载即可)
在util包下新建一个文本文件名称为DataBase_config.properties,文本的代码如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcdb
username=root
password=5200
注:root为安装的Mysql登录用户名,5200为登录密码,根据大家自己安装Mysql时设置的用户名和密码为准!
五.创建类文件编写代码
在com.pxw.util包下创建DBUtils
package com.pxw.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
/**
* 数据库操作工具类
* @author PXW
*/
public class DBUtils {
//数据库驱动
public static String DRIVER;
//数据库连接地址/路径
public static String URL;
//数据库用户名
public static String USERNAME;
//数据库密码
public static String PASSWORD;
private static ResourceBundle rb = ResourceBundle.getBundle("com.pxw.util.DataBase_config");
private DBUtils(){}
//使用静态块加载驱动程序
static{
URL = rb.getString("url");
USERNAME = rb.getString("username");
PASSWORD = rb.getString("password");
DRIVER = rb.getString("driver");
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//定义一个获取数据库连接的方法
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
System.out.println("获取连接失败");
}
return conn;
}
//关闭数据库连接
public static void close(ResultSet rs,Statement stat,Connection conn){
try {
if(rs!=null)rs.close();
if(stat!=null)stat.close();
if(conn!=null)conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在 com.pxw.entity包下创建 Person.java
package com.pxw.entity;
/**
*实体类
*@author PXW
*/
public class Person {
private int id; //id号
private String name; //姓名
private int age; //年龄
private String skills; //描述
//构造函数
public Person(){
super();
}
//生产get,set方法
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 int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String getSkills(){
return skills;
}
public void setSkills(String skills){
this.skills = skills;
}
//重写toString方法
public String toString() {
return "|id=" + id + ": 人物:" + name + ", 年龄:" + age
+ ", 武功秘籍:" + skills + "|";
}
}
在com.pxw.dao包下创建 PersonDao.java
package com.pxw.dao;
import java.sql.SQLException;
import java.util.List;
import com.pxw.entity.Person;
/**
* 定义实体接口类,用来保存操作方法(增加、删除、更新,查询)
* @author PXW
*/
public interface PersonDao{
//定义数据库的操作方法
public void add(Person p) throws SQLException; //根据Person类中的属性来进行"添加"
public void delete(int id)throws SQLException; //根据id来进行"删除"
public void update(Person p)throws SQLException; //根据Person类中的属性来进行"更新"
public ListfindBy(int id)throws SQLException; //根据id来进行单个查询
public ListfindAll()throws SQLException; //将Person类当作一个集合,方便"查询所有"的属性信息
}
在com.pxw.DaoImpl包下创建 PersonDaoImpl.java
package com.pxw.DaoImpl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.pxw.dao.PersonDao;
import com.pxw.entity.Person;
import com.pxw.util.DBUtils;
/**
* 定义实现类,用来实现PersonDao接口中的操作方法
* @author PXW
*/
public class PersonDaoImpl implements PersonDao {
@Override//添加
public void add(Person p) {
//创建Connection对象,PreparedStatement对象
Connection conn = null;
PreparedStatement pstmt = null;
//获取数据库连接
conn = DBUtils.getConnection();
try {
//获取数据库信息
String sql = "insert into person(name,age,skills)values(?,?,?)"; //添加数据的sql语法
pstmt = conn.prepareStatement(sql); //传入sql语句
pstmt.setString(1, p.getName()); //对象p获取姓名
pstmt.setInt(2, p.getAge()); //对象p获取年龄
pstmt.setString(3, p.getSkills()); //对象p获取描述
int rs = pstmt.executeUpdate(); //添加数据属性
if(rs>0){ //判断rs的值是否大于0
System.out.println("添加数据成功!");
}else{
System.out.println("添加数据失败!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtils.close(null, pstmt, conn); //释放资源/关闭数据连接
}
}
@Override//删除
public void delete(int id) {
//创建Connection对象,PreparedStatement对象
Connection conn = null;
PreparedStatement pstmt = null;
//获取数据库连接
conn = DBUtils.getConnection();
try {
String sql = "delete from person where id = ?"; //添加数据的sql语法
pstmt = conn.prepareStatement(sql); //传入sql语句
pstmt.setInt(1, id); //获取id
int rs = pstmt.executeUpdate(); //删除数据属性
if(rs>0){ //判断rs的值是否大于0
System.out.println("删除数据成功!");
}else{
System.out.println("删除数据失败!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtils.close(null, pstmt, conn); //释放资源/关闭数据连接
}
}
@Override//更新
public void update(Person p) {
//
Connection conn = null;
PreparedStatement pstmt = null;
//
conn = DBUtils.getConnection();
//
try {
String sql = "update person set name = ?,age = ?,skills = ? where id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, p.getName());
pstmt.setInt(2, p.getAge());
pstmt.setString(3, p.getSkills());
pstmt.setInt(4, p.getId());
int rs = pstmt.executeUpdate();
if(rs>0){ //判断rs的值是否大于0
System.out.println("更新数据成功!");
}else{
System.out.println("更新数据失败!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtils.close(null, pstmt, conn);
}
}
@Override
//按条件查询
public List findBy(int id) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Person p = null;
List persons = new ArrayList();
conn = DBUtils.getConnection();
try{
String sql = "select*from person where id =?";
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
rs = ps.executeQuery();
while(rs.next()){
p = new Person();
p.setId(rs.getInt(1));
p.setName(rs.getString(2));
p.setAge(rs.getInt(3));
p.setSkills(rs.getString(4));
persons.add(p);
System.out.println("查询成功!");
}
}catch(SQLException e){
e.printStackTrace();
}finally{
DBUtils.close(rs, ps, conn);
}
return persons;
}
@Override//查询所有
public List findAll() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Person p = null;
List persons = new ArrayList();
conn = DBUtils.getConnection();
try{
String sql = "select id,name,age,skills from person";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
p = new Person();
p.setId(rs.getInt(1));
p.setName(rs.getString(2));
p.setAge(rs.getInt(3));
p.setSkills(rs.getString(4));
persons.add(p);
}
System.out.println("查询成功!");
}catch(SQLException e){
e.printStackTrace();
}finally{
DBUtils.close(rs, ps, conn);
}
return persons;
}
}
在com.pxw.Test包下创建Test.java
package com.pxw.Test;
import java.sql.SQLException;
import java.util.List;
import com.pxw.DaoImpl.PersonDaoImpl;
import com.pxw.entity.Person;
/**
* 1.添加JUnit库
* 2.添加@Test 标记 (注意测试方法内不可传入参数,否则无法回报异常java.lang.Exception: Method 方法名称 should have no)
* 3.使用Junit单元测试测试查询全部数据
* 4.测试查询所有
* @author PXW
*/
public class Test {
@org.junit.Test //添加测试标记
//查询全部数据
public void TestfindAll(){
PersonDaoImpl pdi = new PersonDaoImpl(); //实例化接口对象PersonDaoImpl
List userList = pdi.findAll();
//遍历及输出
for(Person user : userList) {
System.out.println(user);
}
}
@org.junit.Test //添加测试标记
//查询单个数据
public void TestfindBy() throws SQLException{
PersonDaoImpl pdi = new PersonDaoImpl(); //实例化接口对象PersonDaoImpl
List userList = pdi.findBy(2);
//遍历及输出
for(Person user : userList) {
System.out.println(user);
}
}
@org.junit.Test //添加测试标记
//添加
public void Testadd(){
PersonDaoImpl pdi = new PersonDaoImpl(); //实例化接口对象PersonDaoImpl
Person p = new Person(); //实例化实体对象Person
p.setName("酒剑仙"); //设置实体对象Name属性的值
p.setAge(50); //设置实体对象age属性的值
p.setSkills("仙风云体术"); //设置实体对象Description属性的值
pdi.add(p); //将实体对象设置好的属性添加入接口对象中实现添加操作
}
@org.junit.Test //添加测试标记
//删除
public void Testdelete(){
PersonDaoImpl pdi = new PersonDaoImpl(); //实例化接口对象PersonDaoImpl
pdi.delete(4); //对象接口调用删除方法实现删除操作
}
@org.junit.Test//添加测试标记
//更新
public void TestUpdate(){
PersonDaoImpl pdi = new PersonDaoImpl(); //实例化接口对象PersonDaoImpl
Person p = new Person(); //实例化实体对象Person
p.setId(4);
p.setName("东方不败"); //设置实体对象Name属性的值
p.setAge(18); //设置实体对象age属性的值
p.setSkills("葵花宝典"); //设置实体对象Description属性的值
pdi.update(p); //将实体对象设置好的属性添加入接口对象中实现更新操作
}
}
注:使用JunitTest单元测试,必须先添加junit库,步骤:右键项目,选择构建路径—添加库—junit,然后点击完成(注意测试需要在相应的方法前添加@Test即可)
然后在界面右侧有个大纲字样右键需要测试的方法选择运行方式—Junit测试
测试结果各个方法输出如下:
TestfindAll()
查询成功!
|id=1: 人物:李逍遥, 年龄:23, 武功秘籍:御剑术|
|id=2: 人物:赵灵儿, 年龄:18, 武功秘籍:回梦|
|id=3: 人物:林月如, 年龄:19, 武功秘籍:七决剑气|
|id=4: 人物:阿奴, 年龄:18, 武功秘籍:变幻|
|id=5: 人物:剑圣, 年龄:100, 武功秘籍:预神术|
|id=6: 人物:唐钰小宝, 年龄:23, 武功秘籍:飞星术|
TestfindBy()
查询成功!
|id=2: 人物:赵灵儿, 年龄:18, 武功秘籍:回梦|
Testadd()
添加数据成功!
Testdelete()
删除数据成功!
TestUpdate()
更新数据成功!
(更新成功后,回到SQLyog软件刷新一下表信息即可看到更新后的字段)
如有错误,指明错误之处,如遇到问题,可在下方评论,我会尽最大能力解决!谢谢