JDBC访问数据库实验

建表:

CREATE TABLE
tbl_user_info
(
 id INT NOT NULL AUTO_INCREMENT,
  user_name VARCHAR(20) NOT NULL,
   age INT NOT NULL,
    sex INT(1) NOT NULL,
     create_dt DATE NOT NULL,
      PRIMARY KEY (id)
)
 ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入数据:

INSERT INTO tbl_user_info VALUES('4','Mary','25','0','2016-06-24');
INSERT INTO tbl_user_info VALUES('5','Jack','22','1','2016-06-24');
INSERT INTO tbl_user_info VALUES('6','John','19','1','2016-06-24');

 

  1. 定义实体类

 定义一个 Bean,与数据库表中的各个字段对应

UserVO.Java

import java.util.Date;

public class UserVO {
    private int id;
    private String userName;
    private int age;
    private int sex;
    private Date createDt;

    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 int getAge()
    {return age;}

    public void setAge(int age)
    {this.age=age;}

    public int getSex()
    {return sex;}

    public void setSex(int sex)
    {this.sex=sex;}

    public Date getCreteDt()
    {return createDt;}

    public void setCreateDt(Date createDt)
    {this.createDt=createDt;}

    @Override
    public String toString() {
        return "UserName[id=" + id + ",userName=" + userName + ",age=" + age + ",sex=" + sex + ",createDt=" + createDt + "]";
    }
}

定义数据库连接类

定义一个数据库连接类,用于获取 MySQL 的连接

DBUtil.java

import java.sql.Connection;
import java.sql.DriverManager;

public class DBUtil {
    private static final String URI = "jdbc:mysql://localhost:3306/text?" +
            "user=root&password=123456&useUnicode=true&characterEncoding=UTF-8";
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";

    public static Connection connectDB() throws Exception {

        // 1、加载数据库驱动
        Class.forName(DRIVER);

        // 2、获取数据库连接
        Connection conn = DriverManager.getConnection(URI);
        return conn;
    }
}

 

实现数据库的增删改查

 

查询

先看查询操作,查询可以一次查询出所有的数据,也可以根据相应的条件查询。 查询所有的数据,在 UserDao 中定义一个 queryAll()方法

UserDao.java

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

public class UserDao {
    public static List<UserVO> queryAll() throws Exception {
        Connection conn = DBUtil.connectDB();
        String sql = "SELECT * FROM tbl_user_info";
        List<UserVO> userList = new ArrayList<UserVO>();

        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            UserVO user = new UserVO();
            user.setId(rs.getInt("id"));
            user.setUserName(rs.getString("user_name"));
            user.setAge(rs.getInt("age"));
            user.setSex(rs.getInt("sex"));
            user.setCreateDt(rs.getDate("create_dt"));

            userList.add(user);
        }
        return userList;
    }
    public static void main(String[] args) {
        UserDao dao = new UserDao();
        try {
            List<UserVO> userList = dao.queryAll();
            for(UserVO user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 

根据条件查询,定义一个 queryByParams 方法:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserDao {
    public List<UserVO>queryByParams(List<Map<String,Object>>params) throws Exception{
        Connection conn=DBUtil.connectDB();
        StringBuilder sql=new StringBuilder("SELECT * FROM tbl_user_info WHERE 1=1");
        for(Map<String,Object>param:params){
            sql.append(" and ");
            sql.append(" "+param.get("col")+" ");
            sql.append(" "+param.get("rel")+" ");
            sql.append(" "+param.get("value")+ " ");
        }
        System.out.println(sql.toString());

        List<UserVO>userList=new ArrayList<UserVO>();

        Statement stmt=conn.createStatement();
        ResultSet rs=stmt.executeQuery(sql.toString());
        while(rs.next()){
            UserVO user=new UserVO();
            user.setId(rs.getInt("id"));
            user.setUserName(rs.getString("user_name"));
            user.setAge(rs.getInt("age"));
            user.setSex(rs.getInt("sex"));
            user.setCreateDt(rs.getDate("create_dt"));

            userList.add(user);
        }
        return userList;
    }
    public static void main(String[] args){
        UserDao dao = new UserDao();
        List<Map<String, Object>> params = new ArrayList<Map<String,Object>>();
        Map<String, Object> param1 = new HashMap<String, Object>();
        param1.put("col", "user_name");
        param1.put("rel", "like");
        param1.put("value", "'%John%'");
        params.add(param1);

        Map<String, Object> param2 = new HashMap<String, Object>();
        param2.put("col", "sex");
        param2.put("rel", "=");
        param2.put("value", 1);
        params.add(param2);
        try {
            List<UserVO> userList = dao.queryByParams(params);
            for(UserVO user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

增加

现在在 UserDao 中写一个 addUser 方法用于新增一条信息:

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

public class UserDao {
    public void addUser(UserVO user) throws Exception {
        Connection conn = DBUtil.connectDB();
        String sql = "INSERT INTO tbl_user_info(user_name, age, sex, create_dt) " + " VALUES(?, ?, ?, ?)";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, user.getUserName());
        pstmt.setInt(2, user.getAge());
        pstmt.setInt(3, user.getSex());
        pstmt.setDate(4, new Date(new java.util.Date().getTime()));
        pstmt.execute();
    }
    public static void main(String[] args) {
        UserDao dao = new UserDao();
        UserVO user = new UserVO();
        user.setUserName("gong");
        user.setAge(20);
        user.setSex(1);
        try {
            dao.addUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

删除

接下来再写一个删除的方法,根据用户的 id

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

public class UserDao {
        public void deleteUser(int id) throws Exception {
            Connection conn = DBUtil.connectDB();
            String sql = "DELETE FROM tbl_user_info WHERE id=?";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            pstmt.execute();
        }
        public static void main(String[] args) {
        UserDao dao = new UserDao();
         try {
             dao.deleteUser(7);
             } catch (Exception e) {
            e.printStackTrace();
             }
        }

}

更新数据库

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

public class UserDao {
    public void updateUser(UserVO user)throws Exception{
        Connection conn = DBUtil.connectDB();
        String sql = "UPDATE tbl_user_info SET user_name=?, age=?, sex=?"
                + " WHERE id=?";

        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, user.getUserName());
        pstmt.setInt(2, user.getAge());
        pstmt.setInt(3, user.getSex());
        pstmt.setInt(4, user.getId());

        pstmt.executeUpdate();
    }

    public static void main(String[] args) {
        UserDao dao=new UserDao();
        UserVO user=new UserVO();

        user.setUserName("Jack");
        user.setAge(30);
        user.setSex(0);
        user.setId(4);

        try {
            dao.updateUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值