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("\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<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; } }

 效果

猜你喜欢

转载自www.cnblogs.com/xnuuuu/p/12113102.html