package com.sunshine.frimework.tool;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 *
 * @author WangChao
 * JDBC的编码步骤
 * 1:加载数据库驱动
 * 2:创建并获取数据库连接
 * 2:创建jdbc statement对象
 * 4:设置sql语句的参数(使用preparedStatement)
 * 5:通过statement执行sql并获取结果
 * 6:对sql执行结果进行解析处理
 * 7:释放资源(resultSet,preparedstatement,connection)
 *
 */

public class JdbcUtil {
    //定义连接变量
    private Connection conn = null;
    //定义用于运行sql语句声明stmt变量
    private Statement stmt = null;
    //定义结果集变量
    private ResultSet rs = null;
    
    //获取连接
    private void getConn(){
        try {
            //添加驱动
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("添加驱动成功!!!");
            try {
                //获取链接
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "15238566442");
                stmt = conn.createStatement();
            } catch (SQLException e) {
                //输出异常信息
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            //输出异常信息
            e.printStackTrace();
        }
    }
    
    //关闭
    private void close(){    
            try {
                if(rs != null){
                    rs.close();
                }
                if(stmt != null){
                    stmt.close();
                }
                if(conn != null){
                    conn.close();
                }
            } catch (SQLException e) {
                //输出异常信息
                e.printStackTrace();
            }        
    }
    
    //更新
    public boolean update(String sql){
        getConn();
        try {
            stmt.executeUpdate(sql);
            return true;
        } catch (Exception e) {
            //输出异常信息
            e.printStackTrace();
            return false;
        }finally{
            close();
        }        
    }
    
    //获取数据数目
    public int dataCount(String sql){
        getConn();
        try {
            rs = stmt.executeQuery(sql);
            rs.next();
            return rs.getInt(1);    
        } catch (Exception e) {
            //输出异常信息
            e.printStackTrace();
            return 0;
        }finally{
            close();
        }        
    }
    
    //查询
    public List<Map<String,Object>> query(String sql){
        System.out.println("执行的SQL语句是:"+sql);
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        getConn();
        try {
            rs = stmt.executeQuery(sql);
            //结构化数据对象
            ResultSetMetaData rsmt = rs.getMetaData();
            //列数
            int count = rsmt.getColumnCount();
            //存储所有列的名字
            String []nameArr = new String[count];
            for(int i = 0;i<nameArr.length;i++){
                //getColumnName()方法内的变量值是从1开始的
                nameArr[i] = rsmt.getColumnName(i+1);
            }
            //判断是否是有下一个
            while(rs.next()){
                //声明并实例化map
                Map<String,Object> map = new HashMap<String,Object>();
                for(int i = 0;i<nameArr.length;i++){
                    //把数据列名和数据都放进到map里
                    map.put(nameArr[i], rs.getString(nameArr[i]));
                }
                list.add(map);
            }
        } catch (Exception e) {
            //输出异常信息
            e.printStackTrace();
        }
        return list;
    }
}

简单封装JDBC的更多相关文章

  1. 简单通用JDBC辅助类封装

    哎,最近很好久没在博客园写点东西了,由于工作的原因,接触公司自己研发的底层orm框架,偶然发现该框架在调用jdbc操作的时候参考的是hibernate 里面的SimpleJdbcTemplate,这里 ...

  2. Spring jdbc 对象Mapper的简单封装

    一般查询实体的时候,都需要这么使用/**      * 根据id查询      *       * @return      */     public Emp queryEmpById(Intege ...

  3. java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)

    1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...

  4. JDBC【2】-- JDBC工作原理以及简单封装

    目录 1. 工作原理 1.1 加载驱动 1.1.1 类加载相关知识 1.1.2 为什么JDK 1.6之后不需要显示加载了? 1.2 驱动加载完成了,然后呢? 2. 简单封装 1. 工作原理 一般我们主 ...

  5. 一颗简单的JDBC栗子

    前言:安装好数据库之后,我们编写的java程序是不能直接使用数据库的,而JDBC(Java Database Connectivity,即java数据库连接)是java语言里用来规范客户端程序访问数据 ...

  6. DBUtils-对JDBC简单封装的开源工具类库

    DBUtils 是对JDBC简单封装的开源工具类 详细介绍地址:  https://baike.baidu.com/item/Dbutils/10655914?fr=aladdin 在使用DBUtil ...

  7. 简单的JDBC编程步骤

    1.加载数据库驱动(com.mysql.jdbc.Driver) 2.创建并获取数据库链接(Connection) 3.创建jdbc statement对象(PreparedStatement) 4. ...

  8. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  9. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

随机推荐

  1. word - 如何让 图片任意移动

    选中图片, 设置图片的自动换行  为四周环绕型

  2. 《zw版·Halcon-delphi系列原创教程》 3d汽车模型自动区域分割

    <zw版·Halcon-delphi系列原创教程> 3d汽车模型自动区域分割 目前,图像分析,在3D设计,机器视觉方面拥有很广.这个Halcon脚本是3d汽车模型自动区域分割,很简单才20 ...

  3. 给debian安装xfce桌面套装

    首先要有一个debian的基本系统,然后: 1.sudo apt-get install xorg slim xfce4       #xdm   由于目前源里面最新的版本是4.3.99,想安装4.4 ...

  4. SSAS 聚合设计提升CUBE的查询性能(转载)

    Problem What exactly are SQL Server Analysis Services (SSAS) Aggregations and how exactly can I revi ...

  5. 使用javascript判断浏览器对css3的支持情况【译】

    Quick Tip: Detect CSS3 Support in Browsers with JavaScript Jeffrey Way on Nov 15th 2010  步骤 1 首先我们要确 ...

  6. Spring MVC 和 Spring 总结

    1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的 ...

  7. ERR: Call to undefined function openssl_random_pseudo_bytes()

    最近使用TP5/PHP7,总是出现ERR: Call to undefined function index\index\openssl_random_pseudo_bytes(),才发现是php没有 ...

  8. android 中activity调用远程service中的方法之 aidl的使用

    服务端:只有服务,没有界面 1.编写interface文件,复制到 .aidl 文件中,并去掉其中的public 等修饰符.系统会自动在gen目录下生成对应的java文件  (对应本地调用中的接口文件 ...

  9. Array JSON

    Tool: Online jsonviewer JSON: JavaScript Object Notation. JSON is a syntax for storing and exchangin ...

  10. iOS开发- 蓝牙后台接收数据(BLE4.0)

    最近在做一个蓝牙相关的项目, 需要在应用进入后台, 或者手机属于锁屏状态的情况下, 仍然保持蓝牙连接, 并且能正常接收数据. 本来以后会很麻烦, 但是学习了下..发现就2步而已.简单的不能再简单了. ...