Mysql,JDBC封装

1.完成对数据库的表的增删改的操作

2.查询返回单条记录

3.查询返回多行记录

4.可以使用反射机制来封装,查询单条记录

5.反射机制,查询多条记录

package myjdbc;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sound.midi.MetaEventListener;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Field;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSetMetaData;

import domain.UserInfo;

public class JdbcUtil {
    //表示数据库的用户名
    private final String USERNAME = "root";
    //表示数据库的密码
    private final String PASSWORD = "hang796413";
    //数据库的驱动信息
    private final String DRIVER     = "com.mysql.jdbc.Driver";
    //访问数据库的地址
    private final String URL = "jdbc:mysql://localhost:3306/gustomer";
    //定义数据库的链接
    private Connection connection;
    //定义sqk语句的执行对象
    private java.sql.PreparedStatement pstmt;
    //定义查询返回的结果集合
    private ResultSet resultSet;

    public JdbcUtil(){
        try {
            Class.forName(DRIVER);
            System.out.println("注册驱动成功");
            connection = (Connection) DriverManager.getConnection(URL,USERNAME,PASSWORD);
            System.out.println("链接成功");
        } catch (Exception e) {

        }
    }
    /*完成对数据库的表的增删改的操作
     *
     * @param sql
     * @param params
     * @retuen
     * @throws SQLException
     * */
    public boolean upderbypaerdstaemnet(String sql, List<Object>
            params)throws SQLException{
        boolean flag = false;
        int result = -1;//表示当用户执行增删改所影响数据库的行数
        pstmt = connection.prepareStatement(sql);

        int index = 1;
        if(params != null && !params.isEmpty()){
            for(int i = 0; i<params.size();i++){
                pstmt.setObject(index++, params.get(i));
            }
        }
        System.out.println(pstmt.toString());
        result = pstmt.executeUpdate();
        System.out.println(result);
        flag = result > 0 ? true : false;
        return flag;

    }
    /*查询返回单条记录
     * */
    public Map<String,Object> findSimpleResult(String sql, List<Object>
    params)throws SQLException{
        Map<String,Object> map = new HashMap<String,Object>();
        //组合SQL语句
        pstmt = connection.prepareStatement(sql);
        int index = 1;
        if(params != null && !params.isEmpty()){
            for(int i = 0; i<params.size();i++){
                pstmt.setObject(index++, params.get(i));
    }
}
        System.out.println(pstmt.toString());

        resultSet = pstmt.executeQuery();//返回查询结果
        //获取列的信息 -> metaData
        ResultSetMetaData metaData = (ResultSetMetaData) resultSet.getMetaData();
        int col_len = metaData.getColumnCount();//获得列的名称
       System.out.println(col_len);
       //如果还有其他列
        while(resultSet.next()){

            for(int i = 0; i<col_len;i++){
                //记录 名字和值
                 System.out.println("11112333332233332");
                 //i+1!!!!!!!!
                String cols_name = metaData.getColumnName(i+1);
                System.out.println(cols_name);
                Object cols_value =resultSet.getObject(cols_name);
            if( cols_value == null){
                cols_value = " ";
            }

            map.put(cols_name, cols_value);
            }
        }

        return map;
}
    /*
     * 查询返回多行记录
     * */
    public List<Map<String,Object>> findMoreResult(String sql, List<Object>
    params)throws SQLException{
        List<Map<String,Object>>  list = new ArrayList<Map<String,Object>>();
        pstmt = connection.prepareStatement(sql);
        int index = 1;
        if(params != null && !params.isEmpty()){

            for(int i = 0; i<params.size();i++){
                pstmt.setObject(index++, params.get(i));
    }
}
        System.out.println(pstmt.toString());
        resultSet = pstmt.executeQuery();//返回查询结果
        //获取列的信息 -> metaData
        ResultSetMetaData metaData = (ResultSetMetaData) resultSet.getMetaData();
        int col_len = metaData.getColumnCount();//获得列的名称
        while(resultSet.next()){
            //******多了这个地方****/
            Map<String,Object> map = new HashMap<String,Object>();
            for(int i = 0; i<col_len;i++){
                //记录 名字和值
                String cols_name = metaData.getColumnName(i+1);
                Object cols_value =resultSet.getObject(cols_name);
            if( cols_value == null){
                cols_value = " ";
            }
            map.put(cols_name, cols_value);
            }
            list.add(map);
        }
        return list;
    }
    //jdbc的封装可以使用反射机制来封装
    public <T> T findSimpleRefResult(String sql ,List<Object>params,
            Class<T> cls)throws SQLException, InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException {
        T resultObject = null;
        int index = 1;
        pstmt = connection.prepareStatement(sql);
        if(params != null && !params.isEmpty()){
            for(int i = 0; i<params.size();i++){
                pstmt.setObject(index++, params.get(i));
            }
        }
        resultSet = pstmt.executeQuery();
        ResultSetMetaData metaData =(ResultSetMetaData) resultSet.getMetaData();
        int cols_len = metaData.getColumnCount();
        while(resultSet.next()){
            //通过反射机制创建实例

            resultObject = cls.newInstance();
            //初始化
            for(int i = 0; i<cols_len;i++){
                //记录 名字和值

                String cols_name = metaData.getColumnName(i+1);
                Object cols_value =resultSet.getObject(cols_name);

            if( cols_value == null){
                cols_value = " ";
            }
            //获取javabean(UserInfo)对应列的属性
            java.lang.reflect.Field field = cls.getDeclaredField(cols_name);
            //打开javabea的访问私有权限
            field.setAccessible(true);
            //相对应的javabean进行赋值
            field.set(resultObject,cols_value);

        }
        }
                return resultObject;
    }
    /*
     * 通过反射机制访问数据库
     * */
    public <T> List <T> finMoreRefResult(String sql ,List<Object>params,
            Class<T> cls)throws SQLException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, InstantiationException{
        List <T> list = new ArrayList<T>();
        int index = 1;
        pstmt = connection.prepareStatement(sql);
        if(params != null && !params.isEmpty()){
            for(int i = 0; i<params.size();i++){
                pstmt.setObject(index++, params.get(i));
            }
        }
        resultSet = pstmt.executeQuery();
        ResultSetMetaData metaData =(ResultSetMetaData) resultSet.getMetaData();
        int cols_len = metaData.getColumnCount();
        while(resultSet.next()){
            //通过反射机制创建实例
            T resultObject = cls.newInstance();
            //初始化
            for(int i = 0; i<cols_len;i++){
                //记录 名字和值
                String cols_name = metaData.getColumnName(i+1);
                Object cols_value =resultSet.getObject(cols_name);
            if( cols_value == null){
                cols_value = " ";
            }
            //获取javabean(UserInfo)对应列的属性
            java.lang.reflect.Field field = cls.getDeclaredField(cols_name);
            //打开javabea的访问私有权限
            field.setAccessible(true);
            //相对应的javabean进行赋值
            field.set(resultObject,cols_value);
        }
            list.add(resultObject);
        }

        return list;

    }
    public void releaseConn(){
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(pstmt != null){
            try {
                pstmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args){
        JdbcUtil jdbcUtil = new JdbcUtil();

//        String sql = "insert into userinfo(username,pswd) values(?,?)";
//        List<Object> params = new ArrayList<Object>();
//        params.add("rose");
//        params.add("123");
//        try {
//         boolean flag = jdbcUtil.upderbypaerdstaemnet(sql, params);
//         System.out.println(flag);
//        } catch (Exception e) {
//        }
        String sql ="select * from userinfo ";
        //查询单个
        //List<Object>params = new ArrayList<Object>();
        //params.add(1);//id为1的记录
        try {
            List<UserInfo> list= jdbcUtil.finMoreRefResult(sql,null,UserInfo.class);
            System.out.println(list);
        } catch (Exception e) {

        }finally {
            jdbcUtil.releaseConn();
        }
    }
}
package domain;

import java.io.Serializable;

public class UserInfo implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private int id;
    private String username;
    private String pswd;

    public int getId() {
        return id;
    }

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

    @Override
    public String toString() {
        return "UserInfo [id=" + id + ", username=" + username + ", pswd=" + pswd + "]";
    }

    public String getUsername() {
        return username;
    }

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

    public String getPswd() {
        return pswd;
    }

    public void setPswd(String pswd) {
        this.pswd = pswd;
    }

    public UserInfo(){

    }
}
时间: 2024-10-09 01:42:15

Mysql,JDBC封装的相关文章

jdbc连接Mysql方法封装

package com.shopping.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DB { static { try { Class.forNam

MySql &amp; JDBC

1.什么是数据库? 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加.修改.删除.及查询操作. 数据库系统类型(历史发展): 网状型数据库 层次型数据库 关系数据库 ---理论最成熟.应用最广泛 面向对象数据库 常见的数据库(软件): MYSQL Oracle DB2 SQLServer SyBase SQLite Java相关: MYSQL  Oracle 2.数据库和表 数据表示存储数据的逻辑单元,可以把数据表想象成

MySql &amp; JDBC &amp; 连接池 &amp; 总结

连接池:解决资源浪费,提高代码性能. 本小节目标: 使用DBCP,C3P0连接池完成基本数据库的操作. 使用DBUtils完成CRUD的操作. 数据库连接池的解决方案是: 当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池.每次应用程序请求数据库连接时,无须重新打开连接,而是从连接池中取出已有的连接使用,使用完后不再关闭数据库连接,而是直接将连接归还给连接池.通过使用连接池,将大大提高程序的运行效率. 数据库连接池是Connection 对象的工程.数据库连接池的常用参数

com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column &#39;goodsName&#39; cannot be null

com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'goodsName' cannot be null 出现这错误,是我封装页面的时候出现的错误. private void addGoods(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.

高性能jdbc封装工具 Apache Commons DbUtils 1.6

转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的是依靠Hibernate.Ibatis.Spring JDBC.JPA等大厂提供的持久层技术解决方案,或者是企业内部自己研发的持久层技术.但无论如何,使用这些技术的初衷和本质都是为了能够减少企业开发成本,提高生产效率,降低耦合. 放眼企业级项目,Hibernate等ORM产品是首选,而互联网领域,大

Springmvc对就jdbc封装的操作

解释: JdbcTemplate 封装常用的JDBC方法 HibernateTemplate  封装常用Hibernate方法 JdbcDaoSupport  JDBC数据访问对象的基类 HibernateDaoSupport  -Hibernate数据访问对象的基类 JdbcDaoSupport是利用JDBC技术编写的Dao的父类,通过该类提供的方法,可便于获取Connection和JdbcTemplate等对象信息. JdbcDaoSupport使用时 需要注入DataSource对象 Jd

高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)

转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的是依靠Hibernate.Ibatis.Spring JDBC.JPA等大厂提供的持久层技术解决方案,或者是企业内部自己研发的持久层技术.但无论如何,使用这些技术的初衷和本质都是为了能够减少企业开发成本,提高生产效率,降低耦合. 放眼企业级项目,Hibernate等ORM产品是首选,而互联网领域,大

mysql jdbc入门学习

一.jdbc基本概念 jdbc : Java Database Connectivity sun公司为了统一对数据库的操作,定义了一套api,称之为jdbc 这套api完全由接口组成,我们在编写程序的时候针对接口进行调用 这些接口交给数据库厂家去实现, 不同的数据库厂商会提供不同的实现类, 这些实现类被我们称作数据库的驱动. 一流公司定标准 二流公司做服务 三流公司做产品 数据库驱动交给数据库厂商制作的优点: 1.Java开发人员只需要维护Java应用和一套统一的规范 2.数据库厂商提供具体的J

java.lang.Exception: 资源处理失败,失败原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column &#39;?????‰&#39; in &#39;where clause&#39;

1:Unknown column '?????‰' in 'where clause',这个问题,百度一搜,挺多的,但是貌似好像没有解决我的问题.贴一下我是如何拼接sql的.解决这个sql拼接bug的.希望可以帮助到有幸看到的人,谢谢. 1 TbUser.USER_NO.name + " = " + "\'" + userNo + "\'" ; 也许看不懂,哈哈,公司自己封装的,没关系,解决这个错误的关键在于+ "\'" +