java使用jdbc操作数据库

软件环境

java编译软件:IDEA

数据库:DataGrip

jdbc驱动(8.0.22版本):https://dev.mysql.com/downloads/connector/j/

一、准备工作

1.在DataGrip中建立一个ms_memer表

会员信息表结构设计(ms_memer)

字段描述字段名数据类型字段长度是否可空备注
P会员标识member_idint11NOT NULL自动加1
会员名称Unamevarchar50NOT NULL
密码Passwordvarchar50NOT NULL
邮箱Emailvarchar50NOT NULL
性别SexSmallint6NULL
手机号码Mobilevarchar30NULL
注册时间RegtimetimestampNOT NULL
最后一次登录时间LastlogintimestampNOT NULL
头像ImageVarchar500NULL

2.新建 jdbc.properties 配置文件

在src目录下创建一个jdbc.properties文件

里面包含(根据个人数据库用户和密码不同进行修改,我的jdbc驱动是8.0.22版本,所以driver这样写):

url=jdbc:mysql:///mobile_shop
user=root
password=123456
driver=com.mysql.cj.jdbc.Driver

3.编写 Config 类:加载配置文件

package Advanced.JDBC.Util;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

//配置类Config
public class Config {
    private static Properties p=null;
    static {
        try {
            //加载配置文件
            p=new Properties();
            p.load(new FileInputStream("src/jdbc.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    // 获取键对应的值
    public static String getValue(String key){
        return p.get(key).toString();
    }
}

4.编写 DBUtils工具类

  • 包含获取连接的方法getConnection()
  • 包含释放资源的方法closeAll()
  • 包含执行SQL语句中查询的executeQuery(String preparedSql , String[] param)方法
  • 包含执行SQL语句中"增、删、改"的executeUpdate(String preparedSql , String[] param)方法
package Advanced.JDBC.Util;

import java.sql.*;


public class DBUtils {

    Connection conn=null;
    ResultSet rs=null;
    PreparedStatement ptmt=null;

    // 2.获取连接
   public Connection getConnection() throws SQLException {
       String url= Config.getValue("url");
       String user=Config.getValue("user");
       String password=Config.getValue("password");
       String driver=Config.getValue("driver");
       try {
           Class.forName(driver);
           conn=DriverManager.getConnection(url,user,password);
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
       return conn;
   }
    // 3.释放资源
    public  void closeAll(){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(ptmt!=null){
            try {
                ptmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
    // 4.执行SQL语句,可以进行查询
    public ResultSet executeQuery(String preparedSql , String[] param){
        try {
            // 创建执行sql的PrepareStatement对象
            ptmt=conn.prepareStatement(preparedSql);
            if(param!=null){
                for (int i = 0; i < param.length; i++) {
                    //为预编译的sql设置参数,这里注意起点的编号是1,和数组索引不一样,所以要加1
                    ptmt.setString(i+1,param[i]);
                }
            }
            // 获取执行sql对象,执行sql语句
            rs=ptmt.executeQuery();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return rs;
    }
    // 5.执行SQL语句,可以进行增,删,改的操作
    public int executeUpdate(String preparedSql , String[] param){
        int count=0;
        try {
            // 创建执行sql的PrepareStatement对象
            ptmt=conn.prepareStatement(preparedSql);
            if(param!=null){
                for (int i = 0; i < param.length; i++) {
                    //为预编译的sql设置参数,这里注意起点的编号是1,和数组索引不一样,所以要加1
                    ptmt.setString(i+1,param[i]);
                }
            }
            count=ptmt.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return count;
    }
}

二、批量插入100条数据

1.实现代码

package Experiment.Demo2;

import Advanced.JDBC.Util.DBUtils;

import java.sql.SQLException;

public class Demo1A {
    public static void main(String[] args) {
        DBUtils db=new DBUtils();
        //设置9月份的注册时间s1
        String s1="2020-09-12 16:29:58";
        //设置9月1日以前的注册时间s2
        String s2="2020-08-06 15:32:31";
        int sum=0;
        try {
            //1.连接驱动
            db.getConnection();
            //2.定义sql语句
            String sql="insert into ms_memer(member_id,Uname,Password,Email,Sex,Mobile,Regtime,Lastlogin,Image) values (?,?,?,?,?,?,?,?,?)";
            //3.使用循环对表插入数据,调用工具类中的executeUpdate方法
            for (int i = 0; i < 100; i++) {
                if(i<49){
                    //插入前50条9月份最后一次登录的数据
                    db.executeUpdate(sql,new String[]{null,"hs","123456","hs@qq.com","1","18872748895",s1,s1,"hs-vae"});
                }else {
                    //插入后50条9月1日之前最后一次登录的数据
                    db.executeUpdate(sql,new String[]{null,"vae","123456","hs@qq.com","0","18872748895",s2,s2,"hs-vae"});
                }
                ++sum;
            }
            System.out.println("已成功插入:"+sum+"条数据");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            db.closeAll();
        }
    }
}

//输出结果
已成功插入:100条数据

Process finished with exit code 0

2.插入100条数据后的ms_memer表

插入100条数据成功,分两批插入的,可以查看代码详解

三、查询九月份登录过系统的会员名称和登录时间

1.实现代码

package Experiment.Demo2;

import Advanced.JDBC.Util.DBUtils;

import java.sql.ResultSet;
import java.sql.SQLException;

/*
    要求:编写存储过程查询出九月份有登陆过本系统会员信息要求查询出具体的会员名称和登陆时间
 */
public class Demo3C {
    public static void main(String[] args) {
        DBUtils db=new DBUtils();
        try {
            db.getConnection();
            String sql="select * from ms_memer where timestamp(Lastlogin) between ? and ?";
            ResultSet rs=db.executeQuery(sql,new String[]{"2020-08-31 23:59:59","2020-09-30 23:59:59"});
            System.out.println("---------9月份登录过本系统的会员信息-----------");
            System.out.println("  "+"会员名称"+"     "+"注册时间"+"           "+"最后一次登录时间");
            while (rs.next()){
                System.out.println(rs.getRow()+":"+"\t"
                        +rs.getString(2)+"\t"
                        +rs.getString(7)+"\t"
                        +rs.getString(8));
            }
            System.out.println("--------------------------------");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            db.closeAll();
        }
    }
}

2.查询结果

Experiment.Demo2.Demo3C
---------9月份登录过本系统的会员信息-----------
  会员名称     注册时间           最后一次登录时间
1:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
2:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
3:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
4:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
5:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
6:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
7:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
8:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
9:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
10:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
11:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
12:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
13:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
14:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
15:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
16:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
17:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
18:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
19:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
20:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
21:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
22:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
23:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
24:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
25:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
26:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
27:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
28:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
29:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
30:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
31:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
32:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
33:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
34:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
35:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
36:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
37:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
38:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
39:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
40:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
41:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
42:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
43:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
44:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
45:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
46:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
47:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
48:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
49:	hs	2020-09-12 16:29:58	2020-09-12 16:29:58
--------------------------------

Process finished with exit code 0

四、删除9月1日以前注册的会员信息

1.删除前的ms_memer表

2.实现代码

package Experiment.Demo2;

import Advanced.JDBC.Util.DBUtils;

import java.sql.SQLException;

public class Demo2B {
    public static void main(String[] args) {
        DBUtils db=new DBUtils();
        try {
            //获取连接
            db.getConnection();
            //定义sql语句,要求删除9月1日之前注册的会员信息
            String sql="delete from ms_memer where Regtime<? ";
            db.executeUpdate(sql,new String[]{"2020-08-31 23:59:59"});
            System.out.println("已成功删除9月1日前注册的会员信息");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            db.closeAll();
        }
    }
}

//输出结果
已成功删除91日前注册的会员信息

Process finished with exit code 0

3.删除后的ms_memer表

删除成功!留下来的都是9月以后注册的会员信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值