学习笔记之JDBC连接数据库

demo结构:

JDBC连接数据库:

jdbc连接数据库是最基础连接数据的方式,需要引入mysql-connection的jar包

创建普通的java项目,创建文件夹lib引入jar包,添加到醒目中便可以直接连接数据库

代码如下:

package conn;

import java.sql.*;

public class JdbcCon {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        /**
         * jdbc连接数据库,分为五个步骤如下:
         */
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接
        Connection connection =         
        DriverManager.getConnection("jdbc:mysql://localhost:3306/jtsys", "root", "root");
        //3.获取传输器
        Statement statement = connection.createStatement();
        String sql = "select * from sys_users";
        //4.处理结果
        ResultSet resultSet = statement.executeQuery(sql);
        while(resultSet.next()){
            String username = resultSet.getString("username");
            String mobile = resultSet.getString("mobile");
            String email = resultSet.getString("email");
            System.out.println("username="+username+";mobile="+mobile+";email="+email);
        }
        //5.关闭资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

现在很多的框架都是对jdbc进行封装,并对结果集处理进行封装,封装起来的框架给我们带来极大的便利性,但作为入门小白,希望从基础开始慢慢加强自己。

下面是自己创建对象对结果集进行处理:

user表结构

第一:创建user对象,将对象进行了简化

package pojo;

public class User {
    private Integer id;
    private String username;
    private String mobile;
    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", mobile='" + mobile + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

第二:创建JdbcUtil

package utils;

import java.sql.*;

public class JdbcUtil {

    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jtsys","root","root");
        return connection;
    }

    public static void close(Connection connection, Statement statement, ResultSet resultSet){
        if(connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            connection = null;
        }
        if(statement != null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            statement = null;
        }
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            resultSet = null;
        }
    }
}

第三:测试对象映射

package conn;

import pojo.User;
import utils.JdbcUtil;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JdbcConPojo {
    public static void main(String[] args) {
        /**
         * 对结果集进行处理,主要依赖反射,通过对象的set方法给对象赋值
         * 为了方便起见,将jdbc的获取连接和关闭资源的方法封装到工具类中
         */
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            connection = JdbcUtil.getConnection();
            statement = connection.createStatement();
            String sql = "select id,username,mobile,email from sys_users";
            resultSet = statement.executeQuery(sql);
            //根据结果集获取列数据
            String[] columnDatas = getColumnData(resultSet);
            //获取对象的所有方法
            Method[] methods = User.class.getMethods();
            //创建user数组列表封装数据
            List<User> userList = new ArrayList<User>();
            while (resultSet.next()){
                for (int i = 0; i <columnDatas.length ; i++) {
                    //获取对象实例
                    User user = User.class.newInstance();
                    //获取列名
                    String columnName = columnDatas[i];
                    //构建set方法
                    String methodName = "set"+columnName;
                    //遍历所有方法,构建方法和对象方法匹配时,注入值
                    for (Method method : methods) {
                        if(methodName.equalsIgnoreCase(method.getName())){
                            method.invoke(user,resultSet.getObject(columnName));
                            break;
                        }
                    }
                    userList.add(user);
                }
            }
            for (User user : userList) {
                //sout在项目中是被日志所替代的,这里为了学习没有引入log包
                System.out.println(user);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }finally {
            JdbcUtil.close(connection,statement,resultSet);
        }

    }

    private static String[] getColumnData(ResultSet resultSet) throws SQLException {
        //获取元数据
        ResultSetMetaData metaData = resultSet.getMetaData();
        //获取总列数
        int columnCount = metaData.getColumnCount();
        //遍历并添加到数组中
        String[] columns = new String[columnCount];
        for (int i = 1; i <= columnCount; i++) {
            columns[i-1] = metaData.getColumnLabel(i);
        }
        return columns;
    }
}

jdbc连接数据库在实际工作中基本上用不到,其过于繁琐,并且操作比较麻烦,涉及多次操作数据库时需要写很长的代码。

下面是一个插入删除修改demo:

package conn;

import utils.JdbcUtil;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class JdbcMethod {
    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        //ResultSet resultSet = null;

        try {
            connection = JdbcUtil.getConnection();
            statement = connection.createStatement();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String updateSql = "update sys_users set username='chengcheng' where id='19'";
            String deleteSql = "delete from sys_users where id='19'";
            String insertSql =
                    "insert into sys_users values(19,'wangcheng','12345','12345','[email protected]','18889996666',1,2,'"+dateFormat.format(new Date())+"','"+dateFormat.format(new Date())+"','admin','admin')";
            /*boolean insertFlag = statement.execute(insertSql);
            System.out.println(insertFlag);*/
            boolean updateFlag = statement.execute(updateSql);
            System.out.println(updateFlag);
            System.out.println("输入D删除数据,请输入:");
            Scanner scanner = new Scanner(System.in);
            String s = scanner.nextLine();
            if(s.equalsIgnoreCase("d")){
                boolean deleteFlag = statement.execute(deleteSql);
                System.out.println(deleteFlag);
            }
            System.out.println("删除成功,需要重新插入数据请输入I,请输入:");
            String i = scanner.nextLine();
            if(i.equalsIgnoreCase("i")){
                boolean insertFlag = statement.execute(insertSql);
                System.out.println(insertFlag);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtil.close(connection,statement,null);
        }
    }
}

到这里jdbc连接数据库的学习就结束了,在此记录以后忘记了方便查询。有不对的地方,希望大佬指正,万分感谢!!!

发布了15 篇原创文章 · 获赞 0 · 访问量 278

猜你喜欢

转载自blog.csdn.net/weixin_45146962/article/details/104855932
今日推荐