zoukankan      html  css  js  c++  java
  • jdbc连接数据库做简单的增查

    • 帮朋友写的一个作业,在这里记录一下,用久了springboot框架竟然忘记了以前都是怎么连接数据库的了。
    • 需求
    1. 需要用户登录成功后才能进行操作
    2. 用户登陆成功后在控制台显示“现在可以写你的日记了!”(要求可以多行输入,在输入save之后把用户ID,输入时间,输入内容进行存储)
    3. 存储之后程序继续等待,用户输入scan之后查询出当前用户的所有日记

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

     创建两个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<Map>
         */
        public static  List< Map<String,  Object> >  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<Map<String,  Object>> list = new ArrayList<>();
                while(set.next()){
                     Map<String,Object> map = new HashMap<>();
                      int count = set.getMetaData().getColumnCount();      
                     for(int i=1;i<=count;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  <T>  List<T> selectList(String sql,Class<T> c,Object... args){
                 
                List < Map <String, Object> > data = executeQuery(sql, args);
        
                List <T> list = new ArrayList <>();
                
                for (Map <String, Object> 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;
        }
    }

    配置数据库连接池

    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("
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    ");
                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<Notes> 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<Map<String, Object>> 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; } }

     效果

    signature:祸兮福所倚,福兮祸所伏
  • 相关阅读:
    sdk 今日头条_字节跳动又一Android开源力作!全新视频动画特效SDK
    Android播放透明视频(转载)
    git remote: warning: suboptimal pack
    'gitclone报错fatal:protocolerror:badpackheader'
    解决 Maven 无法下载 fastdfs-client-java 依赖。
    教我兄弟学Android逆向12 编写xposed模块
    教我兄弟学Android逆向11 动态调试init_array
    CommunicationsException
    使用css给table表格表头添加斜线(斜线表格)
    [SAA + SAP] 28. Monitoring
  • 原文地址:https://www.cnblogs.com/xnuuuu/p/12113102.html
Copyright © 2011-2022 走看看