jdbc连接数据库做简单的增查

  • 帮朋友写的一个作业,在这里记录一下,用久了springboot框架竟然忘记了以前都是怎么连接数据库的了。
  • 需求

  • 需要用户登录成功后才能进行操作

  • 用户登陆成功后在控制台显示”现在可以写你的日记了!”(要求可以多行输入,在输入save之后把用户ID,输入时间,输入内容进行存储)
  • 存储之后程序继续等待,用户输入scan之后查询出当前用户的所有日记

现在开始写代码,先创建个项目,把需要的jar包加入项目,创建数据库连接工具类,创建连接池配置数据库

jdbc连接数据库做简单的增查

创建两个bean

public class Notes {//pknumber
    private Integer id;//日记
    private String note;//日记时间
    private Date notedate;//与用户ID相关联
    private Integer userid;

        //get  and   set
       // tostring
}
public class User {//pknumber
    private Integer id;//用户名
    private String username;//密码
    private String password;

        //get and set
       // tostring
}

创建daoutils

package com.yaobin.util;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DAOUtil {

    private static DataSource dataSource;
    static {
        try {
            Properties p = new Properties();
            p.load(DAOUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /***
     * 加载驱动和获取连接对象
     */
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    public static int executeUpdate(String sql,Object...  obj){
        Connection conn =  null;
        PreparedStatement ps = null;
        try {
            conn = DAOUtil.getConnection();
            ps = conn.prepareStatement(sql);

            for (int i = 0; i < obj.length; i++) {
                ps.setObject(i+1, obj[i]);
            }

            return ps.executeUpdate();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //关闭资源化
            close(null, ps, conn);
        }
        return 0;
    }

    /***
     *  只负责查询 并将查询的结果返回
     * @param sql
     * @param obj
     * @return   List
     */
    public static  List< Map >  executeQuery(String sql,Object... obj){
        Connection conn =  null;
        PreparedStatement ps = null;
        ResultSet set = null;
        try {
            conn = DAOUtil.getConnection();
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < obj.length; i++) {
                ps.setObject(i+1, obj[i]);
            }
            set = ps.executeQuery();//不一样的表 查询出来的 set 不一样

            int count = set.getMetaData().getColumnCount();

            List> list = new ArrayList<>();
            while(set.next()){
                 Map map = new HashMap<>();
                  int count = set.getMetaData().getColumnCount();
                 for(int i=1;i){
                     Object value = set.getObject(i);
                     String key = set.getMetaData().getColumnName(i);
                     map.put(key, value);
                 }
                 // 将 map  添加到 list中
                 list.add(map);
            }
           return list;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close(set, ps, conn);
        }
        return null;
    }

    public static    List selectList(String sql,Class c,Object... args){

            List < Map  > data = executeQuery(sql, args);

            List  list = new ArrayList <>();

            for (Map  map : data) {
                try {
                    T obj = c.newInstance();//反射创建c类型的对象   User obj = new User()
                    BeanInfo info = Introspector.getBeanInfo(obj.getClass());//javabean内省机制获取c这个类的信息
                    PropertyDescriptor[] pro = info.getPropertyDescriptors();//获取c这个类的属性列表
                    //遍历所有的属性
                    for (PropertyDescriptor p : pro) {
                        String  name = p.getName();//获取属性的名字
                        //根据属性名去set中取数据并判断是否取到数据
                        if( map.get(name) != null){
                            //如果取到 就调用该属性的set方法 将获取的value赋值给该属性
                            p.getWriteMethod().invoke(obj, map.get(name));
                        }
                    }
                    //将封装后的实体对象放入到list 中
                    list.add(obj);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            return list;

    }

    /**
     * 关闭连接
     */
    public static void close(ResultSet set, Statement st, Connection conn) {
        try {
            if (set != null) {
                set.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (st != null) {
                    st.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * @param sql
     * @param obj
     * @return 插入数据并获取自增的主键
     */
    public static int updateGetKey(String sql,Object...obj){
        Connection connection=getConnection();
        PreparedStatement ps=null;
        ResultSet rs=null;
        try {
            ps=connection.prepareStatement(sql,1);
            if(null!=obj&&obj.length>0){//给没个?设置参数

                for (int i = 0; i < obj.length; i++) {
                    ps.setObject(i+1, obj[i]);
                }
            }

            ps.executeUpdate();
            rs=ps.getGeneratedKeys();
            int key=0;
            if (rs.next()) {
                key=rs.getInt(1);
            }
            return key;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            close(rs, ps, connection);
        }
        return 0;
    }
},>,>,object>,>

配置数据库连接池

driverClassName=com.mysql.jdbc.Driver

url=jdbc\:mysql\://localhost\:3306/数据库名称?useOldAliasMetadataBehavior\=true&useUnicode\=true&characterEncoding\=utf-8
username=用户名
password=密码

现在开始主方法,

  • 登录方法
  • 记录用户输入的用户名以及密码,去数据库查询有没有此条记录,判断返回结果是否为空以及长度是否大于0,条件不满足则重新调用自身
  • 日记录入数据库方法
  • 利用scancer获取用户在控制台的输入信息,如果不是save,就使用stringbuffer不断拼接,如果是save,结束方法,存入数据库
  • 查询方法
  • 利用登录方法中返回的用户的ID,以此ID为条件去数据库查询,显示用户输入的所有日记
package com.yaobin.function;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import com.yaobin.beans.Notes;
import com.yaobin.beans.User;
import com.yaobin.util.DAOUtil;

public class Entrance {
    static User user;
    static Scanner sc;
    static Boolean login;

    public static void main(String[] args) {
        Entrance entrance = new Entrance();
        entrance.login();
        entrance.write();
        entrance.selectAll();

    }

    public void write() {
        String input = "";
        StringBuffer noteCache = new StringBuffer();
        System.out.println("现在可以写你的日记了 !");
        while (true) {
            input = sc.nextLine();
            if (!input.equals("save")) {
                noteCache.append(input + ",");
            }else {
                break;
            }
        }
        noteCache.deleteCharAt(noteCache.length() - 1).append("。");
        String insertSql = "INSERT note(note,notedate,userid) VALUES(?,now(),?)";
        int executeUpdate = DAOUtil.executeUpdate(insertSql, new String(
                noteCache), user.getId());
        if (executeUpdate > 0) {
            System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            System.out.println("日记存入成功");
        }

    }

    /**
     * 根据ID查询
     *
     * @param id
     */
    private void selectAll() {
        String sql = "SELECT * from note where userid = ?";
        System.out.println("输入scan打印您的日记,输入其他任意符号结束程序");
        if (sc.nextLine().equals("scan")) {
            List note = DAOUtil.selectList(sql, Notes.class,
                    user.getId());
            for (Notes notes : note) {
                System.out.println(notes);
            }
        } else {
            System.out.println("程序到此结束");
        }

    }

    /**
     * 登录方法
     *
     * @param username
     * @param password
     */
    private Boolean login() {
        sc = new Scanner(System.in);
        user = new User();
        System.out.print("请输入用戶名:");
        user.setUsername(sc.nextLine());
        System.out.print("请输入密码:");
        user.setPassword(sc.nextLine());
        String loginsql = "SELECT * from user where username = ? and password = ?";
        List> executeQuery = DAOUtil.executeQuery(loginsql,
                user.getUsername(), user.getPassword());
        if (executeQuery != null && executeQuery.size() != 0) {
            System.out.println("用户:" + user.getUsername() + "登录成功");
            Integer id = (Integer) executeQuery.get(0).get("id");
            user.setId(id);
            return true;
        } else {
            System.out.println("用户名或密码错误,请重新登录");
            login();
        }
        return null;
    }

}

效果

jdbc连接数据库做简单的增查

jdbc连接数据库做简单的增查

Original: https://www.cnblogs.com/xnuuuu/p/12113102.html
Author: 小秫秫儿
Title: jdbc连接数据库做简单的增查

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/592712/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot + JWT + Redis 开源知识社区系统

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!:https://javaguide.cn/ 你好,…

    Java 2023年6月9日
    089
  • java几种常见的排序

    排序,就是将一串数组(一个列表)中的元素(整数,数字,字符串等)按某种顺序(增大,减小,字典顺序等)重新排列。 下面介绍几种排序 1.冒泡排序 定义:冒泡排序就是从第一个元素开始,…

    Java 2023年6月8日
    082
  • SpringBoot接入轻量级分布式日志框架(GrayLog)

    我是3y,一年 CRUD经验用十年的 markdown程序员👨🏻‍💻常年被誉为优质八股文选手 前两天我不是发了一篇数据链路追踪的文章嘛,在末尾也遗留了 TODO: 运行应用的服务器…

    Java 2023年6月9日
    090
  • 手把手教你使用 Spring Boot 3 开发上线一个前后端分离的生产级系统(一)-介绍

    项目简介 novel 是一套基于时下 最新 Java 技术栈 Spring Boot 3 + Vue 3 开发的前后端分离 学习型开源项目,配备详细的项目开发文档手把手教你 从零开…

    Java 2023年6月8日
    062
  • springBoot 获取注解参数的原理

    判断每个参数带有注解是哪个,是否存在相应的解析器 寻找合适的处理适配器 DispatcherServlet中的 doDispatch方法 // Determine handler …

    Java 2023年6月16日
    071
  • idea+maven+springboot+mybatis

    确认maven环境,安装maven在这里就不赘述了. 在idea新建maven项目 下图中填上你Maven安装的目录 打开pom文件,导入jar包(手动敲入/拷贝) 下面是配置之后…

    Java 2023年5月29日
    0109
  • Spring依赖循环

    Spring依赖循环 DefaultSingletonBeanRegistry源码 源码注释: public class DefaultSingletonBeanRegistry …

    Java 2023年5月30日
    075
  • Spring进一步学习

    1、beans.xml编写 2、别名 (1)alias (2)name 3、依赖注入(DI) (1)数组注入 (2)List注入 (3)Map注入 (4)set注入 (5)Null…

    Java 2023年6月5日
    072
  • MybatisPlus属性自动填充

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    069
  • Java面试题(四)–RabbitMQ

    1、MQ有哪些使用场景?(高频) 异步处理:用户注册后,发送注册邮件和注册短信。用户注册完成后,提交任务到 MQ,发送模块并行获取 MQ 中的任务。 系统解耦:比如用注册完成,再加…

    Java 2023年6月9日
    083
  • nginx单点问题

    只配置一个nginx会有单点问题,怎么解决? nginx的单点问题就是如果nginx挂了那么整个后边的服务将不可访问,失去了高可用性,可利用nginx、keepalived、lvs…

    Java 2023年6月8日
    074
  • sqlserver 数据导入MySQL

    yyyy/mm/dd hh:mm:ss 不修改,导入的时候会提示不合法的值,因为Excel格式化时间戳的算法和MySQL的不一样,所以导入只能按字符串导入 数据无价需谨慎操作,最好…

    Java 2023年6月15日
    076
  • Java 对象拷贝(字段名不同)包orika

    在项目中经常会有对象拷贝属性的需求,类之间属性的拷贝,看似是一个简单的操作,其实通常也是工程里最花费时间的事情,毕竟这个年代不能老是不停地写 setter和 getter方法吧。 …

    Java 2023年5月29日
    084
  • 【力扣】1310. 子数组异或查询

    有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值…

    Java 2023年6月8日
    072
  • Duplicate entry ** for key **

    Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplica…

    Java 2023年6月5日
    069
  • Java学习,利用IDEA开发工具连接redis

    Idea连接redis及Jedis数据操作 注意是否开启了redis服务!!! 1、打开虚拟机终端,查看虚拟机防火墙是否关闭 查看防火墙当前状态命令: $sudo ufw stat…

    Java 2023年6月9日
    0119
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球