中软国际实训全记录——第二天

中软国际实训第二天——初步认识JDBC

  • 1、数据库的初始化
  • 2、对于数据库的操作需要实现的步骤
  • 3、使用idea创建项目
    • util类
    • bean类
    • dao类
    • Test类

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

1、数据库的初始化

数据库我们使用的管理软件是SQLyog,连接本地数据库的方法在上一篇中已经使用过,在此处不在赘述。我们首先建立一个user数据库,将其基字符集选择utf8,数据库排序规则选择utf8_general_ci。
中软国际实训全记录——第二天_第1张图片
之后在user数据库里面建立一张userinfo的表,引擎为InnoDB,字符集为utf8,核对为utf8_general_ci。表中有id,username,password三个字段,数据类型分别为int,varchar,varchar。将id作为主键,并且设置为自增。
中软国际实训全记录——第二天_第2张图片
创建好表之后,我们可以向里面添加一些初始的数据,至此数据库操作就完成了。

2、对于数据库的操作需要实现的步骤

在使用java操作数据库的过程中,不可以直接操作,而是需要有以下几个过程来实现对数据库的实时操作。

1、加载驱动
2、创建连接
3、写sql
4、得到statement对象
5、执行sql得到结果集
6、处理结果集
7、关闭资源

3、使用idea创建项目

打开IntelliJ IDEA软件,一路点击next按键,创建一个新项目。
我们需要在项目的根目录创建一个lib文件夹,将mysql-connector-java-5.1.36.jar这个jar包放入其中,这时候jar包还没有导入到项目,因此我们需要右击jar包,选择Add as Library,就可以将jar包添加到项目中。
中软国际实训全记录——第二天_第3张图片
在项目src下,我们创建我们的zhongruan文件夹,里面就是我们所需要的工作目录,在zhongruan中,有四个类,,一个bean类,一个dao类,一个util类,一个Test类。Test类包含有程序的入口函数。bean类是一些实体类,在这里包含有数据的实体类,如id、username、password以及它们的get与set函数、tostring函数。dao类中主要是有关数据库的增删查改的操作,我们将所有的操作从Test中以面向对象的方法实现在dao类中。util类主要是工具类,在我们此个项目中是用来连接数据库。
项目结构如下所示:
中软国际实训全记录——第二天_第4张图片

util类

我们的项目中存在DBUtil类,用来实现与数据库的连接,因为在查询数据库,添加数据库等都需要与本地数据库连接,所以我们直接将其封装为一个对象,在需要连接的时候直接调用。

package zhongruan.util;

import java.sql.*;

public class DBUtil {

    public static Connection getConnetction(){
        Connection connection = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");

            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useSSL=true&characterEncoding=utf-8&user=root&password=123");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    public static void close(ResultSet rs, Statement statement, Connection connection){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(statement!=null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

bean类

我们项目中有UserInfo这一bean类,其中划分了属性,get与set,tostring和构造方法这四种。

package zhongruan.bean;

public class UserInfo {
    private int id;
    private String username;
    private String password;               //属性

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    //get set方法

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
    //tostring方法
    
}

dao类

dao类主要用来实现数据库的增添查改的功能,将每一个功能全都封装为一个对象,在使用的时候只需要调用UserInfoDao里面的实例即可。
查询数据由于每次只能获取一条,在获取下一条时就会将上一条覆盖,所以我们使用一个数组来储存每次获取到的UserInfo信息。

package zhongruan.dao;

import zhongruan.bean.UserInfo;
import zhongruan.util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class UserInfoDao {

    public List<UserInfo> findAll(){             //查询
        ResultSet rs = null;
        PreparedStatement statement = null;
        Connection connection = null;
        List<UserInfo> list = new ArrayList<>();
        try {
            connection = DBUtil.getConnetction();
            String sql="select * from userinfo";
            statement = connection.prepareStatement(sql);
            rs = statement.executeQuery();
            while (rs.next()){                                     //查询获取数据并且将其添加到一个数组中
                UserInfo userInfo = new UserInfo();
                userInfo.setId(rs.getInt(1));
                userInfo.setUsername(rs.getString(2));
                userInfo.setPassword(rs.getString(3));
                list.add(userInfo);
            }
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            DBUtil.close(rs, statement, connection);
        }
        return list;
    }

    public void addInfo(){       //添加数据
        PreparedStatement statement = null;
        Connection connection = null;

        try {
            connection = DBUtil.getConnetction();
            String sql1="insert into userinfo(username, password) values (?,?)";
            statement = connection.prepareStatement(sql1);
            statement.setString(1, "mk");
            statement.setString(2, "mk");
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(null, statement, connection);
        }
    }

    public void deleteInfo(){                //删除数据
        PreparedStatement statement = null;
        Connection connection = null;

        try {
            connection = DBUtil.getConnetction();
            String sql2="delete from userinfo where username='mk'";
            statement = connection.prepareStatement(sql2);
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(null, statement, connection);
        }
    }

    public void refreshInfo(){                 //更新数据
        PreparedStatement statement = null;
        Connection connection = null;

        try {
            connection = DBUtil.getConnetction();
            String sql3="update userinfo set password = 'news' where username = 'qw'";
            statement = connection.prepareStatement(sql3);
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(null, statement, connection);
        }
    }
}

Test类

在Test类中为函数的入口,其中实现具体功能的调用。

package zhongruan;

import zhongruan.dao.UserInfoDao;

public class Test {
    public static void main(String[] args){
        UserInfoDao userInfoDao = new UserInfoDao();
        System.out.println("查询数据");
        System.out.println(userInfoDao.findAll());
        userInfoDao.addInfo();      //add user information
        System.out.println("添加数据");
        System.out.println(userInfoDao.findAll());
        userInfoDao.deleteInfo();       //delete user information
        System.out.println("删除数据");
        System.out.println(userInfoDao.findAll());
        userInfoDao.refreshInfo();        //refresh the user data from the database
        System.out.println("更新数据");
        System.out.println(userInfoDao.findAll());
    }
}

在整个程序运行完成之后如下:
中软国际实训全记录——第二天_第5张图片
在不同的操作之后,数据库读取到的数据也会相应的变化。

你可能感兴趣的:(中软国际实训全记录——第二天)