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. [php] How to debug PHP in the terminal

    Here I use Netbeans, xdebug to debug the PHP in the terminal of Ubuntu. 1. you have to install the x ...

  2. 【RoR win32】新rails运行后0.0.0.0:3000不能访问

    在浏览器中使用127.0.0.1:3000来访问

  3. Mysql 的存储引擎,myisam和innodb的区别

    MyISAM 是非事务的存储引擎,innodb是支持事务的存储引擎. innodb的引擎比较适合于插入和更新操作比较多的应用,而MyISAM 则适合用于频繁查询的应用 . MyISAM --表锁,in ...

  4. ASP.NET 中通过Form身份验证 来模拟Windows 域服务身份验证的方法

    This step-by-step article demonstrates how an ASP.NET   application can use Forms authentication to ...

  5. YUI Reset CSS (学习摘抄)

    正在使用CSS的你,用过CSS Reset吗?当然,或许你用了,却不知道正在用,比如你可能用到: *{    margin: 0;    border: 0;    padding: 0;   } 这 ...

  6. Android侧滑

    人人客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示. 据说人人客户端的这个特效是从facebook客户端模仿来 ...

  7. 鸟哥的linux私房菜学习记录之档案权限与目录配置

    在linux中可以通过ls来查看文件 如ls -al,可以看到类似以下的内容 给个例子来理解下 在目录中如果只有r权限没有x权限无法进入该目录

  8. 安装keepalived

    主机名  网络IP                     VIPnode1 192.168.2.161     192.168.2.165node2 192.168.2.162 [root@node ...

  9. Nagios监控磁盘

    1.查看check_disk脚本 [oracle@rhel5 ~]$ /usr/local/nagios/libexec/check_disk --h check_disk v1.) Copyrigh ...

  10. fork和exec一起使用

    先预览一下工程的目录树: 实现的功能:master进程启动slave进程. 看看Makefile内容: all: master.out slave.out master.out: master.cpp ...