JDBC

介绍JDBC

java数据库连接(Java Database Connectivit),简称JDBC,主要的功能在java与数据库之间建立连接,相当于一个桥梁。是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

执行原理
    Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动。

JDBC是接口,驱动是接口的实现类,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。

操作步骤

进行导包

 <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.17</version>
    </dependency>

一、加载驱动
告诉jvm加载的是哪个数据库的驱动
二、建立连接
使用jdbc中的类完成对数据库的连接
三、产生传递sql命令的邮差对象
四、将sql命令交给mysql执行
五、关闭数据库的相应对象

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

//JDBC: Java DataBase Connection  java数据库连接技术

public class Add1Test {
    public static void main(String[] args) {
        try{
            //第一步:加载驱动,加载的是mysql数据库的驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";//,3306是端口号,db1是数据库名也可以是其他
            String user="root";
            String password="123456";
            //第二步:建立连接
            Connection conn= DriverManager.getConnection(url,user,password);
            //sql语句
            String sql="INSERT INTO userinfo VALUES(52,'java','男',21,'北京',MD5('123'),1)";
            //第三步:产生传递SQL命令的邮差对象
            PreparedStatement ps=conn.prepareStatement(sql);
            //第四步:将sql命令交由mysql执行
            int result=ps.executeUpdate();//执行更新操作,返回受影响的行数
            System.out.println("有"+result+"行受到影响");
            //关闭数据库相应对象
            ps.close();
            conn.close();
        }catch(ClassNotFoundException e){
            System.out.println("类没有找到");
        }catch (SQLException e){
            System.out.println(e.getMessage());
        }

    }
}
java面向对象中使用jdbc实现增删改查
bean 包用来对属性进行封装
package bean;
//1、对应数据库中的表userInfo
//2、bean包中的类一般都以Info结尾,以表名开头,首字母大写
public class UserInfo {
    /*
    1、属性和表中的类意义对应
    2、属性名首字母小写,驼峰
    3、属性和列相对应
    4、属性名尽量和列名一致  user_id-->userId
     */
    private Integer userId;
    private String userName;
    private String userSex;
    private Integer userAge;
    private String userAddress;
    private String userPass;
    private Integer userState;

//写好一个封装类  get set  无参构造器  toString  (Alt+insert)
    public UserInfo() {
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    public String getUserPass() {
        return userPass;
    }

    public void setUserPass(String userPass) {
        this.userPass = userPass;
    }

    public Integer getUserState() {
        return userState;
    }

    public void setUserState(Integer userState) {
        this.userState = userState;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userSex='" + userSex + '\'' +
                ", userAge=" + userAge +
                ", userAddress='" + userAddress + '\'' +
                ", userPass='" + userPass + '\'' +
                ", userState=" + userState +
                '}';
    }
}
db包用来建立连接和关闭连接
package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DBManger {

        /**这个能够获取到数据库的连接
         *user
         * @return
         */

        public static Connection getConnecti0n(){
            Connection conn=null;
            try{
                Class.forName("com.mysql.cj.jdbc.Driver");
                String url="jdbc:mysql://localhost:3307/db1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";//db1是数据库名也可以是其他
                String user="root";
                String password="guo521wen";
                //第二步:建立连接
                conn= DriverManager.getConnection(url,user,password);
            }catch(Exception e){
            }
            return conn;
        }
        public static void close(Connection conn, PreparedStatement ps, ResultSet rs){
            try{
                if(rs!=null){
                    rs.close();
                }
                ps.close();
                conn.close();
            }catch(Exception e){
            }

        }
    }
dao包用来进行控制
package dao;

import bean.UserInfo;
import db.DBManger;

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

/*
1、DAO:Data Access Object
2、一般以bean包的类名为前缀
3、dao包中负责执行CRUD操作
4、一个dao类负责一个表的CRUD,也可以说成是对一个bean类的CRUD
 */
public class UserInfoDAO {
    private Connection conn;
    private PreparedStatement ps;
    private ResultSet rs;
    
    //根据主键获取对应行
    public UserInfo findUserById(int userId){
        UserInfo ui=new UserInfo();
        String sql="select *from userinfo where userid=?";
        conn= DBManger.getConnecti0n();
       try{
           ps=conn.prepareStatement(sql);
           ps.setInt(1,userId);
           rs=ps.executeQuery();
           if(rs.next()){
               ui.setUserId(rs.getInt(1));
              ui.setUserName(rs.getString(2));
              ui.setUserSex(rs.getString(3));
              ui.setUserAge(rs.getInt(4));
              ui.setUserAddress(rs.getString(5));
           }
       }catch(Exception e){
       }finally{
           DBManger.close(conn,ps,rs);
       }
       return ui;
    }
    
    //获取到所有行数据
public List<UserInfo>findAllUser(){
    List<UserInfo> list=new ArrayList<>() ;
    String sql="select *from userinfo where userstate=1";
    conn=DBManger.getConnecti0n();
  try{
      ps=conn.prepareStatement(sql);
      rs=ps.executeQuery();
      while(rs.next()){
          UserInfo ui=new UserInfo();
          ui.setUserId(rs.getInt(1));
          ui.setUserName(rs.getString(2));
          ui.setUserSex(rs.getString(3));
          ui.setUserAge(rs.getInt(4));
          ui.setUserAddress(rs.getString(5));
          list.add(ui);
      }
  }catch(Exception e){
  }finally{
      DBManger.close(conn,ps,rs);
  }
    return list;
}

//添加用户数据到数据库
public boolean saveUser(UserInfo ui){
        boolean b=false;
        String sql="insert into userinfo values(?,?,?,?,?,md5(?),1)";
        conn=DBManger.getConnecti0n();
        try{
            ps=conn.prepareStatement(sql);
            ps.setInt(1,ui.getUserId());
            ps.setString(2,ui.getUserName());
            ps.setString(3,ui.getUserSex());
            ps.setInt(4,ui.getUserAge());
            ps.setString(5,ui.getUserAddress());
            ps.setString(6,ui.getUserPass());
            int n=ps.executeUpdate();//记录更新的次数
            if(n>0){
                b=true;
            }
        }catch(Exception e){
        }finally{
            DBManger.close(conn,ps,null);
        }
       return b;
}

//删除指定用户,非推荐写法
    public boolean removeUser(int userid){
        boolean b=false;
        String sql="delete from userinfo where userid=?";
        conn=DBManger.getConnecti0n();
        try{
            ps=conn.prepareStatement(sql);
            ps.setInt(1,userid);
            int n=ps.executeUpdate();
            if(n>0){
                b=true;
            }
        }catch(Exception e){
        }finally {
            DBManger.close(conn,ps,rs);
        }
       return b;
    }
    
    //删除指定用户,推荐写法
    public boolean deleteUser(int userid){
        boolean b=false;
        String sql="update userinfo set userstate=0 where userid=?";
        conn=DBManger.getConnecti0n();
        try{
            ps=conn.prepareStatement(sql);
            ps.setInt(1,userid);
            int n=ps.executeUpdate();
            if(n>0){
                b=true;
            }
        }catch(Exception e){
        }finally {
            DBManger.close(conn,ps,rs);
        }
        return b;
    }

    //修改了指定用户的信息,不能修改密码
public boolean updateUser(UserInfo ui){
        boolean b=false;
        String sql="update userinfo set username=?,usersex=?,userage=?,useraddress=? where userid=?";
        conn =DBManger.getConnecti0n();
        try{
            ps=conn.prepareStatement(sql);

            ps.setString(1,ui.getUserName());
            ps.setString(2,ui.getUserSex());
            ps.setInt(3,ui.getUserAge());
            ps.setString(4,ui.getUserAddress());
            ps.setInt(5,ui.getUserId());
            int n=ps.executeUpdate();
            if(n>0){
                b=true;
            }
        }catch(Exception e){
        }finally {
            DBManger.close(conn,ps,rs);
        }
        return b;

}
//分页显示数据
public List<UserInfo> findUserByPage(int page,int size){
        List<UserInfo>list=new ArrayList<>();
        String sql= "SELECT *FROM userinfo LIMIT ?,?";

        conn=DBManger.getConnecti0n();
       try{
           ps=conn.prepareStatement(sql);
           ps.setInt(1,(page-1)*size);
           ps.setInt(2,size);
           rs=ps.executeQuery();
           while(rs.next()){
               UserInfo ui=new UserInfo();
               ui.setUserId(rs.getInt(1));
               ui.setUserName(rs.getString(2));
               ui.setUserSex(rs.getString(3));
               ui.setUserAge(rs.getInt(4));
               ui.setUserAddress(rs.getString(5));
               list.add(ui);
           }
       }catch(Exception e){
       }finally {
           DBManger.close(conn,ps,rs);
       }
       return  list;
}
}
test包进行测试
package test;

import bean.UserInfo;
import dao.UserInfoDAO;

import java.util.List;

public class test {
    private static UserInfoDAO uidao=new UserInfoDAO();

    public static void a(){
        UserInfo ui=uidao.findUserById(54);
        System.out.println(ui);
    }
    public static void b() {
        List<UserInfo> list = uidao.findAllUser();
        for (UserInfo ui : list) {//(泛型,被迭代对象,集合)
            System.out.print(ui + "\t");
        }
    }
    public static void c(){
        UserInfo ui=new UserInfo();
        ui.setUserId(81);
        ui.setUserName("张三");
        ui.setUserSex("男");
        ui.setUserAge(18);
        ui.setUserAddress("厦门");
        boolean b=uidao.saveUser(ui);
        if(b){
            System.out.println("存储成功");
        }
    }
    public static void d(){
      boolean b=uidao.removeUser(54);
      if(b){
          System.out.println("删除成功");
      }
    }
    public static void d2(){
        boolean b=uidao.deleteUser(60);
        if(b){
            System.out.println("删除成功");
        }
    }
    public static void e(){
        UserInfo ui=new UserInfo();
        ui.setUserId(81);
        ui.setUserName("张");
        ui.setUserSex("男");
        ui.setUserAge(189);
        ui.setUserAddress("厦门");
        boolean b=uidao.updateUser(ui);
        if(b){
            System.out.println("修改成功");
        }
    }
public static void f(){
    List<UserInfo> list = uidao.findUserByPage(1,10);
    for (UserInfo ui : list) {//(泛型,被迭代对象,集合)
        System.out.print(ui + "\t");
        System.out.println();
    }

}
    public static void main(String[] args) {
         //根据主键查找一行数据 a();
        //查出所有数据 b();
        //增加数据 c();
        //删除数据 d();
        //删除数据d2();
        //修改数据e();
        f();//分页显示数据
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值