JAVA JBDC连接MySql数据库示例心得一

2023-11-13

①–>下载MySql数据库驱动解压获得JAR文件导入编写的Java程序中
下图中1是复制过来的驱动文件,2是导入的文件,要导入才可以用。
这里写图片描述

②–> 连接数据库,数据查询,数据更新
这里写图片描述

A是数据库对应的数据类如下:

package com.jdbc;

public class A {

    private int id;
    private String name;
    private String password;
    private String email;

    public A() {

    }

    public A(int id, String name, String password, String email) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.email = email;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

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

    @Override
    public String toString() {
        return "A [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + "]";
    }

}

jdbc.properties是数据库配置文件:

driver=com.mysql.jdbc.Driver
jdbcurl=jdbc:mysql://localhost:3306/demodb?useUnicode=true&characterEncoding=utf-8&useSSL=false
user=root
password=123456

JDBCTools是JDBC工具类,包括数据库连接,数据更新如下:

package com.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import com.mysql.jdbc.Statement;

public class JDBCTools {
    /**
     * 获取数据库连接
     * */
    public Connection GetConnection() throws IOException, SQLException, ClassNotFoundException {
        //使用配置文件方式连接数据库
        Properties properties = new Properties();
        //获取流
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties");
        properties.load(in);
        String driver = properties.getProperty("driver");
        String jdbcurl = properties.getProperty("jdbcurl");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        Class.forName(driver);
        return DriverManager.getConnection(jdbcurl, user, password);
    }
    /**
     * 数据获取
     * */
    public <T> T get(Class<T> clazz,String sql,Object ...obj){
        T eneity = null;
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        ResultSetMetaData setMetaData = null;
        try {
            conn = GetConnection();
            preparedStatement = conn.prepareStatement(sql);
            for(int i=0;i<obj.length;i++){
                preparedStatement.setObject(i+1, obj[i]);
            }
            resultSet = preparedStatement.executeQuery();//得到结果集
            //得到ResultSetMetaData对象
            setMetaData = resultSet.getMetaData();
            //创建一个Map<String ,Object>对象,键:SQL查询的列的别名,值:列的值
            Map<String, Object> values = new HashMap<String, Object>();
            //处理结果集,利用ResultSetMetaData填充对应的Map对象
            if(resultSet.next()){
                for(int i=0;i<setMetaData.getColumnCount();i++){
                    String columnLabel = setMetaData.getColumnLabel(i+1);//得到列名
                    Object columnValue = resultSet.getObject(i+1);
                    System.out.println(columnValue.getClass().getName());
                    //System.out.println(columnLabel+":"+columnValue);
                    //键列名与对应的值存入Map对象
                    values.put(columnLabel, columnValue);
                }
                if(values.size()>0){
                    //若Map不为空集,利用反射创建clazz对应的对象
                    eneity = clazz.newInstance();
                    //遍历Map对象,取出对应的属性的值
                    for(Map.Entry<String, Object> entry:values.entrySet()){
                        String fieldName = entry.getKey();
                        Object value = entry.getValue();
                        //利用反射保存数据
                        SetValues(eneity, fieldName, value);
                    }
                }
            }
            return eneity;

        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            //关闭连接
            release(resultSet, (Statement) preparedStatement, conn);
        }
        return eneity;
    }
    /**
     * 保存数据库数据到对应的JAVA类中
     * */
    public <T> void SetValues(T t,String fieldName,Object value){
        //将传过来的值首字母大写
        String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1); 
        Method method = null; 
        try {
            //获取该类下的所有属性值
            Field field = t.getClass().getDeclaredField(fieldName);
            //初始化变量类型数组
            Class[] parameterTypes = new Class[1];
            //获取该属性值的变量类型对象
            parameterTypes[0] = field.getType();  
            //传入方法名称及方法的类型获取该方法的对象
            method = t.getClass().getMethod("set"+methodName,parameterTypes);
            //获取传人的值的变量类型
            method.invoke(t,value);
         } catch (Exception e) {
           e.printStackTrace();
         }
    }

    /**
     * 执行SQL的方法,包含insert,delete,updata
     * sql="insert into A (id,name,password,email) values(?,?,?,?);";
     * ?号代表条件值
     * */
    public void Updata(String sql,Object ...obj){
        Connection conn = null;
        PreparedStatement preparedStatement= null;
        try {
            conn = GetConnection();
            preparedStatement = conn.prepareStatement(sql);
            for(int i=0;i<obj.length;i++){
                preparedStatement.setObject(i+1, obj[i]);
            }
            preparedStatement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            release(null, (Statement) preparedStatement, conn);
        }
    }
    /**
     * 关闭数据库
     * */
    public static void release(ResultSet rs, Statement sm, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (sm != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

测试代码:

JDBCTools jdbcTools = new JDBCTools();
        A a = jdbcTools.get(A.class, sql6, 3);
        System.out.println(a);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA JBDC连接MySql数据库示例心得一 的相关文章

随机推荐

  • Oracle 表空间、段、区、块概述

    文章目录 图示 表空间 tablespace 数据段 segment 区 extent 数据块 block 图示 修改中 请稍等 段 存在于 表空间 中 段 是 区 的集合 区 是 数据块 的集合 数据块 会映射到 磁盘块 以实体 关系图的
  • Request_获取请求参数通用方式介绍

    1 获取请求参数通用方式 不论get还是post请求方式都可以使用下列方法来获取请求参数 1 String getParameter String name 根据参数名称获取参数值 username zs password 123 2 St
  • 除了Midjourney和Stable Diffusion,还有哪些AI模型可以使用

    Midjourney是一款广受设计师和艺术家欢迎的人工智能图像生成器 然而 最近它停止提供免费试用 让许多用户开始寻找替代品 在本文中 我们为您编制了一个2023年可尝试的十大Midjourney替代品列表 我们包括了免费和付费选项 让您可
  • [台服公主链接]修改ROOT检测

    类路径 Project smali jp co cygames androidroot CheckApp smali 原始代码 method public static isRootUser Z locals 7 prologue cons
  • CSS Flex相关属性(自我总结)

    把容器做成flex弹性盒 display flex 容器属性 1 flex direction 项目排列方向 主轴方向 row 左对齐 横向排列 默认 row reverse 右对齐 反转横向排列 column 纵向排列 column re
  • JAVA 计算日期属于当月第几周(日期周计算)

    JAVA 计算日期属于当月第几周 日期周计算 本文周计算时间方式为 当月第一个周一为第一周 计算 获取月第一个周一 从当月第一天开始找 第一个周一时间与 sourceTime 传入时间对比 sourceTime在第一个周一时间之前 表示属于
  • Twitter开发者账号及开发者APPs的创建 2019.05

    转自 https towardsdatascience com access data from twitter api using r and or python b8ac342d3efe Access Data from Twitter
  • screen / nohup 实现后台运行程序

    通常我们在运行程序时 会通过终端登录服务器 然后使用shell命令运行程序 这种方式对于运行时长较短的程序没问题 但是对于深度学习中训练网络等耗时较长的程序来说很容易出问题 例如一旦机器死机 断网 不小心关闭终端等种种情况都会导致程序终止运
  • JSP中include指令的功能简介说明

    转自 JSP中include指令起什么用呢 下文讲述JSP中include指令的功能简介说明 如下所示 JSP中include指令的功能说明 用于将不同的文件插入到当前JSP页面的指定位置 JSP指令的语法 相关说明 include指令 用
  • 现代大学英语精读第二版(第四册)学习笔记(原文及全文翻译)——1A - Thinking as a Hobby(把思考作为爱好)

    Unit 1A Thinking as a Hobby Thinking as a Hobby William Golding While I was still a boy I came to the conclusion that th
  • @RefreshScope详解

    要说清楚RefreshScope 先要了解Scope Scope org springframework beans factory config Scope 是Spring 2 0开始就有的核心的概念 RefreshScope org s
  • React 性能优化

    React 的工作流程是什么 我们可以在哪些阶段进行性能优化呢 如果 React 项目中出现了卡顿 我们可以采用哪些性能优化技巧 如何通过 React Profiler 定位性能问题 React Profiler 包含哪些阶段的信息 大纲
  • 信息熵、条件熵、信息增益率

    1 1 数学分布 分布可能指代不同的东西 比如数据分布或概率分布 这两种分布其实没有本质的区别 可以将x看做随机点 某一数据分布P为目标分布 概率分布f为x落在P上的概率值 形式化表示为f x 假设我们是一组正在广袤无垠的太空中进行研究的科
  • imx6 reboot指令无法重启 & kernel 停留在start kernel ......

    reboot指令无法重启 log root imx6dlsabresd reboot Thesystem is going down for reboot NOW d ttymxc0 Tue Oct 11 06 41 03 2016 INI
  • UE4中实现鼠标拖动游戏中的物体

    一 显示鼠标光标 启用鼠标点击事件 可以在关卡蓝图中或者游戏模式中加入下面代码 二 点击物体进入选中状态 三 根据通道获取命中结果 通过这个函数可以获取当前鼠标光标下接触的actor 重新设定actor位置即可 这里可以将类型转换去掉 就可
  • VBS中WScript.Shell对象的run和exec的使用及区别

    VBS中WScript Shell对象的run和exec的使用及区别 方法声明 Function Exec ByVal Command As String As WshExec Function Run ByVal Command As S
  • YARN 删除所有ACCEPTED任务的命令

    删除所有ACCEPTED任务的命令 for i in yarn application list grep w ACCEPTED awk print 1 grep application do yarn application kill i
  • 方差、协方差和协方差矩阵

    上次写了相关系数 其实很类似的一个概念是协方差 要说协方差 先复习下基本的统计内容 1 均值 2 方差 标准差 标准方差 或者写为 简单来说 标准差是一组数值自平均值分散开来的程度的一种测量观念 一个较大的标准差 代表大部分的数值和其平均值
  • SPA(单页应用)知多少

    单页面应用程序将所有的活动局限于一个Web页面中 在该Web页面初始化时加载相应的HTML JavaScript 和 CSS 一旦页面加载完成 单页面应用不会因为用户的操作而进行页面的重新加载或跳转 取而代之的是利用 JavaScript
  • JAVA JBDC连接MySql数据库示例心得一

    gt 下载MySql数据库驱动解压获得JAR文件导入编写的Java程序中 下图中1是复制过来的驱动文件 2是导入的文件 要导入才可以用 gt 连接数据库 数据查询 数据更新 A是数据库对应的数据类如下 package com jdbc pu