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

①–>下载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);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走到无路可退

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值