宁波实习培训记录(二)

一、jdbc介绍及架包导入

1.java database connection java数据库链接
首先导入相关jar包mysql-connector-java-5.1.36.jar
1)在项目下创建一个lib文件夹,再将下载好的mysql-connector-java-5.1.36.jar放入改文件夹下
宁波实习培训记录(二)_第1张图片
2)右键lib,点击Add as Library…

**2.创建一个自己的数据库,本次实验中创建数据库为user,创建一张表为userinfo。**如图
宁波实习培训记录(二)_第2张图片

期间发生了一个小插曲,由于我的数据库版本太低,导致连接的时候报错。数据库是mysql,目前似乎MySQL5.5这样的版本比较稳定,各大软件的兼容性较好。

二、数据库连接和关闭

由于增删改查均需要在连接数据库的情况下进行,因此数据库链接是通用的步骤。
另外,由于进行数据库操作后,为了防止数据库不能及时关闭影响性能,我们将数据库的关闭程序放入finally语句中。这个也是通用步骤
!!!因此将数据库连接和数据库的关闭方法都封装在until包中

文件结构如下
宁波实习培训记录(二)_第3张图片
1.数据库连接

public static Connection DBcon(){
    Connection connection=null;
    PreparedStatement statement=null;
    try{
        //1.加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.创建连接
        connection = DriverManager.getConnection
                ("jdbc:mysql://127.0.0.1:3305/user?useSSL=true&" +
                        "characterEncoding=utf-8&user=" +
                        "root&password=1234");
    }catch(Exception e){
        e.printStackTrace();
    }finally {
        return connection;
    }

}

1)其中第一点加载驱动是固定写法,mysql、Oracle等都有各自的写法。我的数据库是MySQL。
2)第二点创建连接,jdbc:mysql://后面那串地址是本地数据库的地址,端口号一般默认为3306,但是我采用的是3305端口,这个按照自己的来。
地址后面的user是自己要连接数据库的名字;user=root中的root是我连接数据库的用户名,password=1234中的1234是我数据库的密码(这三点都根据实际情况来即可)

2.数据库关闭

public static void CloseDB( Connection connection,PreparedStatement statement,ResultSet rs){
    if(rs!=null){
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if(statement!=null){
        try {
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if(connection!=null){
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    System.out.println("已关闭数据库服务!");
}

这个没有什么技巧,根据判断需要关闭的把它关闭即可

!!!注意到这两个方法都是static方法,是由于DBunitl这个类并没有实际涵义,为了调用时不用老是创建该类的对象,于是将其写成静态方法以方便调用

三、bean 实体类

为了更好的封装和操作数据库,我们将数据表与实体类相关联。此处定义了实体类UserInfo与数据表userinfo相对应

文件结构如下
宁波实习培训记录(二)_第4张图片

package com.zhongruan.bean;

public class UserInfo {
    private int id;
    private String name;
    private String password;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

  1. 该实体类的成员变量与数据表中的数据类型一一对应
  2. 右键,选择Generate…将get和set方法都自动补全,还有toString()也补全(这个方法是为了使相关信息打印出具体内容而不是一个地址)

四、DAO层

DAO层,Data Access Object,专门用来封装我们对于实体类的数据库的访问,就是增删改查,不加业务逻辑。

文件结构如下,我们定义dao,并定义userinfodao类
宁波实习培训记录(二)_第5张图片
注意先初始化自己的数据库。

1.查找

/查询数据库,返回所有表中所有记录
public List findall(){
    List list=new ArrayList<>();
    Connection connection=null;
    PreparedStatement statement=null;
    ResultSet rs=null;
    try {
        connection = DBuntil.DBcon();
        System.out.println("创建连接成功");
        //3.写sql
        String sql="select * from userinfo";
        //4.得到statement对象
        statement = connection.prepareStatement(sql);
        //5.执行sql得到结果集
        rs = statement.executeQuery();
        //6.处理结果集
        while (rs.next()){
            UserInfo userInfo=new UserInfo();
            userInfo.setId(rs.getInt(1));
            userInfo.setName(rs.getString(2));
            userInfo.setPassword(rs.getString(3));
            list.add(userInfo);
        }
        //7.关闭资源
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        DBuntil.CloseDB(connection,statement,rs);
    }
    return list;
}
  1. 首先创建一个用于存放实体类对象的的list
  2. 连接数据库,写sql查询语句,得到statemen对象,执行sql语句得到结果集rs
  3. 将得到的结果存放入实体类对象uerInfo中,并将该对象一一加入到list中,最后将list返回

2.增加

//插入记录
public static void insert(){
    Connection connection=null;
    PreparedStatement statement=null;
    //1.连接数据库

    try {
        connection = DBuntil.DBcon();
        System.out.println("创建连接成功");
        //2.写sql
        String sql="insert into userinfo(name,password) values (?,?)";
        statement=connection.prepareStatement(sql);
        statement.setString(1,"xiaoming");
        statement.setString(2,"123456");
        statement.executeUpdate();
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        DBuntil.CloseDB(connection,statement,null);
    }
}
  1. 连接数据库,写sql语句
  2. 执行sql语句(注意到与查找时是不一样的,这里因为插入了数据,因此是executeUpda()即要更新数据库
  3. 最后关闭数据库。

3.修改

//修改更新记录
public static void update(){
    Connection connection=null;
    PreparedStatement statement=null;

    try {
        connection=DBuntil.DBcon();
        String sql="update userinfo set name=?,password=? where id=?";
        statement=connection.prepareStatement(sql);
        statement.setString(1,"gyx");
        statement.setString(2,"666");
        statement.setInt(3,2);
        statement.executeUpdate();
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        DBuntil.CloseDB(connection,statement,null);
    }
}
  1. 连接数据库
  2. 写sql语句,其中是根据id即主键来决定修改那一条记录
  3. 执行sql语句
  4. 关闭数据库,无返回

4.删除
//删除记录
public static void delete(){
Connection connection=null;
PreparedStatement statement=null;

try {
    connection=DBuntil.DBcon();
    String sql="delete from userinfo where id=3";
    statement=connection.prepareStatement(sql);
    statement.executeUpdate();
} catch (Exception e) {
    e.printStackTrace();
}finally {
    DBuntil.CloseDB(connection,statement,null);
}

}

  1. 连接数据库
  2. 写sql语句,也是根据主键id来判断删除哪一条记录
  3. 执行sql语句
  4. 关闭数据库,无返回

五、功能测试

创建test方法来测试以上数据库操作,文件结构如下
宁波实习培训记录(二)_第6张图片

package com.zhongruan;

import com.until.DBuntil;
import com.zhongruan.bean.UserInfo;
import com.zhongruan.dao.UserInfoDao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) throws SQLException {
        UserInfoDao userInfoDao=new UserInfoDao();
        //查
        List list=userInfoDao.findall();
        System.out.println(list);
        //增
        userInfoDao.insert();
        List list1=userInfoDao.findall();
        System.out.println(list1);
        //改
        userInfoDao.update();
        List list2=userInfoDao.findall();
        System.out.println(list2);
        //删
        userInfoDao.delete();
        List list3=userInfoDao.findall();
        System.out.println(list3);

    }

}

可以根据需要注释掉,一个个单独测试。

你可能感兴趣的:(java)