PreparedStatement的示例

---

文章目录


前言

这是一篇水文,非常非常的水。                        


提示:以下是本篇文章正文内容,下面案例可供参考

一、示例代码总集

1.DeptWei

package com.hp.controller;

import com.hp.pojo.Dept;
import com.hp.service.IDeptService;
import com.hp.service.impl.DeptServiceImpl;
import org.junit.Test;

import java.util.List;

//部门控制类
public class DeptCWei {
    //1.引入业务层
    private IDeptService deptService=new DeptServiceImpl();

    //测试查询一行,参数由前端给
    @Test
    public void testRow(){
        int did=8;//did来自前端
        Dept dept =deptService.selectRow(did);
        System.out.println(dept);
    }

    @Test
    public  void list(){
        List<Dept> list= deptService.list();
        System.out.println(list);
    }
}

2.DeptDaoImpl

package com.hp.dao.impl;

import com.hp.dao.IDeptDao;
import com.hp.pojo.Dept;
import com.hp.ulits.jdbcUtilsPlus;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
//impl表示实现类

public class DeptDaoImpl  implements IDeptDao {


    @Override
    public List<Dept> list() {
        return null;
    }

    @Override
    public Dept selectRow(int did) {
        return jdbcUtilsPlus.selectRow("select*from t_dept where did="+did,Dept.class);
    }
}

3.User

package com.hp.pojo;

public class User {
    private int id;
    private String username;
    private String password;

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

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

 4.DeptServiceImpl

package com.hp.service.impl;

import com.hp.dao.IDeptDao;
import com.hp.dao.impl.DeptDaoImpl;
import com.hp.pojo.Dept;
import com.hp.service.IDeptService;

import java.util.List;

public class DeptServiceImpl implements IDeptService {

    private IDeptDao deptDao=new DeptDaoImpl();

    @Override
    public int add() {
        return 0;
    }

    @Override
    public List<Dept> list() {
    return  deptDao.list();
    }

    @Override
    public Dept selectRow(int did) {
        return deptDao.selectRow(did);
    }
}

 5.jdbcUtilsPlus

package com.hp.ulits;

import com.hp.pojo.User;
import org.junit.Test;

import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

//jdbc工具类 升级版

/*
*Statement 父类
* PreparedStatement 子类
* 1.提前传入sql,执行的时候,不传入sql
* 2.支持传入sql中的参数
* 4.提高执行效率
* Object ... params 可变形参数组
* 在调用函数时,可以传入任意个任意类型的参数
* */
public class jdbcUtilsPlus {


        /*@Test
          public void testRow(){
            Dept dept=selectRow("select*from t_Dept where did=1",Dept.class);
            System.out.println(dept);
        }
        @Test
        public void testColumn(){
            List<Integer> list = selectColumn("select did from t_Dept", Integer.class);
            System.out.println(list);
        }
        @Test
        public  void testOne(){
            Double sumSalary = selectOne("SELECT SUM(salary) FROM t_emps", double.class);
            System.out.println(sumSalary);
        }
        @Test
        public  void testUpdate(){
            int j = Update("insert into t_dept values (null,'a','b','c')");
            System.out.println(j);
        }*/
    @Test//测试登录
    public void testLogin(){
        String username="aa";
        String password="aa";
        User user = selectRow("select*from t_users where username= ? and password= ? ", User.class,username,password);
        System.out.println(user !=null ? "登录成功":"登录失败");
    }

    //查询多行多列
    public static<T> List<T> list(String sql,Class<T> c,Object ... params)  {
        //创建一个集合,存放所有的对象
        List<T>tList=new ArrayList<>();
        try{
//1.注册驱动-反击去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8","root","root");

            //3.定义sql

            //4.需要创建statement
            PreparedStatement PreState=con.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                PreState.setObject(i+1,params[i]);
            }
            //5.statement执行sql,返回 结果集
            ResultSet rs=PreState.executeQuery();
            //结果集rs得到结果集元数据
            ResultSetMetaData md=rs.getMetaData();

            //获取结果集的总列数
            int columnCount=md.getColumnCount();


            //6.解析rs
            while (rs.next()){//读取结果集的光标向下移动一行,光标默认在哪一行,列名所在的那一行
                //根据每一行数据,封装成一个实体对象
                T t=c.newInstance();

                //1.取出某一行的每列数据,封装到对象t的属性中
                for (int i = 0; i <=columnCount ; i++) {
                    //通过列的序号,获取每一列的值
                    Object value = rs.getObject(i);
                    if (value!=null){
                        //使用反射,把value给到对象t的属性中
                        String columnName=md.getCatalogName(i);
                        //因为列明和实体类一致,为每个属性构造一个反射中的set方法
                        Field f = c.getDeclaredField(columnName);
                        //赋予私有属性的赋值权限
                        f.setAccessible(true);
                        //使用反射,把value给到对象t的属性中
                        f.set(t,value);//理解为:把value赋值给对象t的columnName属性,相当于set方法

                    }




                }


                //把对象存入集合中
                tList.add(t);
            }

            //7,关闭资源
            PreState.close();
            con.close();
        }catch ( Exception e){
            e.printStackTrace();
        }
        return  tList;
    //查询一行

    //查询单个

    //增删改
}

    //查询一行
    public static<T>  T selectRow(String sql,Class<T> c,Object ...params) {


        try{
//1.注册驱动-反击去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8","root","root");

            //3.定义sql

            //4.需要创建statement
            PreparedStatement preState = con.prepareStatement(sql);
            //在执行前,给sql传递参数
            for (int i = 0; i < params.length; i++) {
                preState.setObject(i+1,params[i]);
            }

            //5.statement执行sql,返回 结果集
            ResultSet rs=preState.executeQuery();
            //结果集rs得到结果集元数据
            ResultSetMetaData md=rs.getMetaData();

            //获取结果集的总列数
            int columnCount=md.getColumnCount();



            //6.解析rs
            // 根据每一行数据,封装成一个实体对象
             T t=null;
           if (rs.next()){//读取结果集的光标向下移动一行,光标默认在哪一行,列名所在的那一行
                t=c.newInstance();
                //1.取出某一行的每列数据,封装到对象t的属性中
                for (int i = 1; i <=columnCount ; i++) {
                    //通过列的序号,获取每一列的值
                    Object value = rs.getObject(i);
                    if (value!=null){
                        //使用反射,把value给到对象t的属性中
                        String columnName=md.getColumnName(i);
                        //因为列明和实体类一致,为每个属性构造一个反射中的set方法
                        Field f = c.getDeclaredField(columnName);
                        //赋予私有属性的赋值权限
                        f.setAccessible(true);
                        //使用反射,把value给到对象t的属性中
                        f.set(t,value);//理解为:把value赋值给对象t的columnName属性,相当于set方法

                    }

                }

            }

            //7,关闭资源
            preState.close();
            con.close();
            return t;
        }catch ( Exception e){
            e.printStackTrace();
        }
        return  null;
        //查询一行

        //查询单个

        //增删改
    }

    //查询一列
    public static<T> List<T> selectColumn(String sql,Class<T> c, Object ... params) {
        //创建一个集合,存放所有的对象
        List<T>tList=new ArrayList<>();
        try{
//1.注册驱动-反击去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8","root","root");

            //3.定义sql

            //4.需要创建statement
            PreparedStatement statement=con.prepareStatement(sql);

            //在执行前,给sql传递参数
            for (int i = 0; i < params.length; i++) {
                statement.setObject(i+1,params[i]);
            }
            //5.statement执行sql,返回 结果集
            ResultSet rs=statement.executeQuery();
            //结果集rs得到结果集元数据
            ResultSetMetaData md=rs.getMetaData();

            //获取结果集的总列数
            int columnCount=md.getColumnCount();


            //6.解析rs
            while (rs.next()){//读取结果集的光标向下移动一行,光标默认在哪一行,列名所在的那一行

                    //通过列的序号,获取每一列的值
                    T t=(T) rs.getObject(1);


                //把对象存入集合中
                tList.add(t);
            }

            //7,关闭资源
            statement.close();
            con.close();
        }catch ( Exception e){
            e.printStackTrace();
        }
        return  tList;
        //查询一行

        //查询单个

        //增删改
    }

    //查询单个
    public static<T> T selectOne(String sql,Class<T> c,Object ... params) {

        try{
//1.注册驱动-反击去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8","root","root");

            //3.定义sql


            //4.需要创建statement
            PreparedStatement statement = con.prepareStatement(sql);
            //在执行前,给sql传递参数
            for (int i = 0; i < params.length; i++) {
                statement.setObject(i+1,params[i]);
            }
            //5.statement执行sql,返回 结果集
            ResultSet rs=statement.executeQuery();
            //结果集rs得到结果集元数据
            ResultSetMetaData md=rs.getMetaData();

            //获取结果集的总列数
            int columnCount=md.getColumnCount();


            //6.解析rs
            T t=null;
            if (rs.next()){
                t=(T) rs.getObject(1);

            }



            //7,关闭资源
            statement.close();
            con.close();
            return t;
        }catch ( Exception e){
            e.printStackTrace();
        }
        return  null;
        //查询一行

        //查询单个

        //增删改
    }

    //增 删 改
    public static int Update(String sql,Object ... params) {

        try{
//1.注册驱动-反击去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8","root","root");

            //3.定义sql


            //4.需要创建statement
            PreparedStatement statement = con.prepareStatement(sql);
            //在执行前,给sql传递参数
            for (int i = 0; i < params.length; i++) {
                statement.setObject(i+1,params[i]);
            }
            //5.statement执行sql,返回 结果集
            int i = statement.executeUpdate(sql);


            //7,关闭资源
            statement.close();
            con.close();

            return i;
        }catch ( Exception e){
            e.printStackTrace();
        }
        return 0;
        //查询一行

        //查询单个

        //增删改
    }}

二、执行结果

1.DeptWei

2.jdbcUtilsPlus


总结

以上代码和结果仅供参考。

不便之处敬请见谅。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值