JDBC的数据库增删改(executeUpdate&execute) 查(executeQuery)工具类

package com.baidu;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JdbcUtils {
    public static  String driverer = "com.mysql.jdbc.Driver";
    public static  String url = "jdbc:mysql://127.0.0.1:3306/ssm";
    public static  String user = "root";
    public static  String password = "123456";
    //有try catch 方便重复使用定位 全局静态
    static Connection conn = null;
    static PreparedStatement ps = null;
    static ResultSet rs = null;
    //1.加载驱动
    static {
        try {
            Class.forName(driverer);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * DriverManager.getConnection(url, user, password);
     * @return Connection
     */
    public  static Connection getConn()  {
        //等于null的目的是因为 添加的trycatch后 无法在return Connection

        try {
            conn = DriverManager.getConnection(url, user, password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return conn;
    }
    //最后关闭链接

    /**
     *  Connection PreparedStatement ResultSet 的close()
     * @param rs
     * @param ps
     * @param conn
     */
    public static void close(ResultSet rs, PreparedStatement ps,Connection conn){
        if(rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if(ps != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }
    //通用设置参数的方法 设置参数需要调用 PreparedStatement

    /**
     * 通用设置参数的方法 设置参数需要调用
     * 1.判断有无params 或params为空
     * 2.循环取值 执行PreparedStatement的setObject(i+1,i)
     * 注意setObject从1开始,Object[]从0开始
     * @param ps
     * @param params
     */
    public static void setParams(PreparedStatement ps,Object[]params){
        //没有设置参数, 或则参数为空就方法结束先判断 有无在查看值是否为空字符串
        if(params == null || params.length == 0  )
            return;

        //否则 setObject循环设置参数,参数是从1开始 , 而数字从0开始
        for (int i = 0; i < params.length; i++) {
            try {
                ps.setObject(i+1,params[i]);
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

    //通用增 删 改 ,

    /**
     * * 通用的查询方法 select ? from ? where ?
     * 1.getConn()已经执行 Class.forName() getConnection()
     * 2.prepareStatement(需要传递参数)
     * 3.调用自己的 传参方法setParams(ps,params)
     * 4.执行 executeUpdate 返回值为int(受影响行数)
     * 5.关闭 ps,conn
     * 6.返回受影响行数
     * @param sql
     * @param params
     * @return
     */
    public int myUpdate(String sql,Object [] params){
        try {
            conn = getConn();
            ps = conn.prepareStatement(sql);
            setParams(ps,params);
            int i = ps.executeUpdate();
            return i;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            return -1;
        }finally {
            close(null,ps,conn);
        }

    }

    /**
     * 通用的查询方法 select ? from ? where ?
     * 1.getConn()已经执行 Class.forName() getConnection()
     * 2.prepareStatement(需要传递参数)
     * 3.调用自己的 传参方法setParams(ps,params)
     * 4.执行 executeQuery 返回值为ResultSet
     * 5.获取ResultSet的列属性metaData=getMetaData()
     * 6.获取ResultSet的列数 columnCount = getColumnCount()
     * 7.获取ResultSet下一列的值 Object = getObject()
     * 8.用List<List> 包装 6-7步
     * 9.返回List<List>
     * 10.关闭ResultSet、PreparedStatement、Connection
     * @param sql
     * @param params
     * @return
     */
    public  static List<List> MyQuery(String sql, Object [] params){
        //rs.getMetaData获取行数使用
//        ResultSetMetaData metaData =null;
        List<List> tableList = new ArrayList<List>();
        try {
            conn = getConn();
            ps = conn.prepareStatement(sql);
            setParams(ps,params);
            rs = ps.executeQuery();

            //Retrieves the number, types and properties of this Resultsetobject's columns.
            //检索这个Resultseobject列的数目、类型和属性。
            ResultSetMetaData metaData = rs.getMetaData();
            //Returns the number of columns in thisResultset object.
            //返回这个Resultset对象中的列数。<List>
            int columnCount = metaData.getColumnCount();

            while (rs.next()){
                List rowList=new ArrayList();
                for (int i = 0; i < columnCount; i++) {
                    //获取单元格的数据
                    //此方法将将给定列的值作为Java对象返回
                    rowList.add(rs.getObject(i+1));
                }
                tableList.add(rowList);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            close(null,ps,conn);
        }
        return tableList;
    }
}

 第一步的 Class.forName(driverer); 是做什么的,是否可以省略

Java SPI 之 ServiceLoader 使用场景icon-default.png?t=N6B9http://t.csdn.cn/YGRMA

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个在Grails框架下使用JDBC进行数据库操作的工具类的示例: ```groovy import groovy.sql.Sql class JdbcUtil { def grailsApplication def executeQuery(String query, List<Object> params = []) { Sql sql = new Sql(grailsApplication.dataSource) List<Map<String, Object>> results = [] try { results = sql.rows(query, params) } finally { sql.close() } return results } def executeUpdate(String query, List<Object> params = []) { Sql sql = new Sql(grailsApplication.dataSource) int rowsAffected = 0 try { rowsAffected = sql.execute(query, params) } finally { sql.close() } return rowsAffected } } ``` 在上述示例中,我们创建了一个名为`JdbcUtil`的工具类。该类中包含了两个方法:`executeQuery`和`executeUpdate`。 `executeQuery`方法用于执行询语句并返回结果集。它接收询语句和参数列表作为输入,并使用Grails的`Sql`类执行询。最后,它将结果集以`List<Map<String, Object>>`的形式返回。 `executeUpdate`方法用于执行更新语句(如插入、更新、删除)并返回受影响的行数。它的实现与`executeQuery`类似,但它使用`sql.execute`方法执行更新语句。 这个工具类可以通过在其他Grails应用程序的服务或控制器中注入`JdbcUtil`来使用。例如: ```groovy class MyService { def jdbcUtil def myMethod() { String query = "SELECT * FROM my_table WHERE id = ?" List<Object> params = [1] List<Map<String, Object>> results = jdbcUtil.executeQuery(query, params) // 处理结果集 } } ``` 注意,上述示例中的`grailsApplication.dataSource`是Grails应用程序中配置的数据源。确保在使用该工具类之前,已正确配置数据库连接信息。 希望这个示例可以帮助到你!如果有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值