DBhelper封装jdbc并解决特殊字符的问题

简介: 1、测试数据库1.1 数据库数据  1.2 数据库结构  1.3 数据库脚本DROP TABLE IF EXISTS `school`.`student`; CREATE TABLE `school`.

1、测试数据库

1.1 数据库数据

  

1.2 数据库结构

  

1.3 数据库脚本

DROP TABLE IF EXISTS `school`.`student`;

 

CREATE TABLE `school`.`student` (

`id` int(11) NOT NULL default '0',

`name` varchar(20) default NULL,

`sex` varchar(10) default NULL,

`age` int(10) default NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

INSERT INTO `student` VALUES ('201201', '张三', '男', '21');

INSERT INTO `student` VALUES ('201202', '李四', '男', '22');

INSERT INTO `student` VALUES ('201203', '王五', '女', '20');

INSERT INTO `student` VALUES ('201204', '赵六', '男', '21');

INSERT INTO `student` VALUES ('201205', '小红', '女', '19');

INSERT INTO `student` VALUES ('201206', '小明', '男', '22');

2、DBHelper用法

2.1 增加【Add】

    【示例代码

 

package com.hebut.util;

 

public class DBHelperApp {

 

    /**

     * 增加【Add

     */

    public static void main(String[] args) {

        //第一种情况

        String sql1="Insert Into student Values ('201208', '张三', '', '21')";

        System.out.println(DBHelper.executeNonQuery(sql1));

       

        //第二种情况

        String sql2="Insert Into student Values (?,?,?,?)";

        Object[] obj = new Object[]{"201209","张三""""21"};

        System.out.println(DBHelper.executeNonQuery(sql2,obj));

    }

}

 

    【运行结果

    1)控制台

 

1

1

    

2)数据库

  

2.2 删除【Del】

    【示例代码

 

package com.hebut.util;

 

public class DBHelperApp {

 

    /**

     * 删除【Del

     */

    public static void main(String[] args) {

        //第一种情况

        String sql1="Delete From student Where id='201202'";

        System.out.println(DBHelper.executeNonQuery(sql1));

       

        //第二种情况

        String sql2="Delete From student Where id=? And name=?";

        Object[] obj = new Object[]{"201208","张三"};

        System.out.println(DBHelper.executeNonQuery(sql2,obj));

    }

 

}

 

    【运行结果

    1)控制台

 

1

1

 

    2)数据库

  

    从图中可以看出id为"201202"和"201208"已经删除。

2.3 修改【Update】

    【示例代码

 

package com.hebut.util;

 

public class DBHelperApp {

 

    /**

     * 修改【Update

     */

    public static void main(String[] args) {

        //第一种情况

        String sql1="Update student Set age='27' Where id='201207'";

        System.out.println(DBHelper.executeNonQuery(sql1));

       

        //第二种情况

        String sql2="Update student Set name=? Where id=?";

        Object[] obj = new Object[]{"张二","201201"};

        System.out.println(DBHelper.executeNonQuery(sql2,obj));

    }

}

 

    【运行结果

    1)控制台

 

1

1

 

    2)数据库

  

  备注:后面的操作都以上面数据为基准。

2.4 查询【Query】

    【示例代码

 

package com.hebut.util;

 

import java.sql.ResultSet;

import java.sql.SQLException;

 

public class DBHelperApp {

 

    /**

     * 查询【Query

     * @throws SQLException

     */

    public static void main(String[] args) throws SQLException {

        //第一种情况

        String sql1="Select * From student";

        //第一步:查询

        ResultSet rs1 = DBHelper.executeQuery(sql1);

        //二步:输出

        while(rs1.next()){

            System.out.println("姓名:"+rs1.getString(2));

        }

        //第三步:关闭

        DBHelper.free(rs1);

       

        //第二种情况

        String sql2="Select * From student Where name=?";

        Object[] obj = new Object[]{"张三"};

        //第一步:查询

        ResultSet rs2 = DBHelper.executeQuery(sql2,obj);

        //第二步:输出

        while(rs2.next()){

            System.out.println("学号:"+rs2.getString(1));

        }

        //第三步:关闭

        DBHelper.free(rs2);

    }

}

 

    【运行结果

 

姓名:张二

姓名:王五

姓名:赵六

姓名:小红

姓名:小明

姓名:张三

姓名:张三

学号:201207

学号:201209

 

2.5 获取查询行数

    【示例代码

 

package com.hebut.util;

 

public class DBHelperApp {

 

    /**

     * 获取查询行数

     */

    public static void main(String[] args) {

        //第一种情况

        String sql1="Select * From student";

        System.out.println(DBHelper.getCount(sql1));

       

        //第二种情况

        String sql2="Select * From student Where name=?";

        Object[] obj = new Object[]{"张三"};

        System.out.println(DBHelper.getCount(sql2,obj));

    }

}

 

    【运行结果

 

7

2

 

2.6 判断记录存在

    【示例代码

 

package com.hebut.util;

 

public class DBHelperApp {

 

    /**

     * 判断记录存在

     */

    public static void main(String[] args) {

        //第一种情况

        String sql1="Select * From student";

        System.out.println(DBHelper.isExist(sql1));

       

        //第二种情况

        String sql2="Select * From student Where name=?";

        Object[] obj = new Object[]{"张五"};

        System.out.println(DBHelper.isExist(sql2,obj));

    }

}

 

    【运行结果

 

true

false

 

3、DBHelper代码

 

package com.hebut.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 final class DBHelper {

 

    // 此方法为获取数据库连接

    public static Connection getConnection() {

        Connection conn = null;

 

        try {

            String driver = "com.mysql.jdbc.Driver"// 数据库驱动

            String url = "jdbc:MySQL://127.0.0.1:3306/school";// 数据库

            String user = "root"// 用户名

            String password = "hadoop"// 密码

            Class.forName(driver); // 加载数据库驱动

            if (null == conn) {

                conn = DriverManager.getConnection(url, user, password);

            }

        } catch (ClassNotFoundException e) {

            System.out.println("Sorry,can't find the Driver!");

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return conn;

    }

 

    /**

     * 增删改【AddDelUpdate

     *

     * @param sql

     * @return int

     */

    public static int executeNonQuery(String sql) {

        int result = 0;

        Connection conn = null;

        Statement stmt = null;

 

        try {

            conn = getConnection();

            stmt = conn.createStatement();

            result = stmt.executeUpdate(sql);

        } catch (SQLException err) {

            err.printStackTrace();

            free(null, stmt, conn);

        } finally {

            free(null, stmt, conn);

        }

 

        return result;

    }

 

    /**

     * 增删改【AddDeleteUpdate

     *

     * @param sql

     * @param obj

     * @return int

     */

    public static int executeNonQuery(String sql, Object... obj) {

        int result = 0;

        Connection conn = null;

        PreparedStatement pstmt = null;

 

        try {

            conn = getConnection();

            pstmt = conn.prepareStatement(sql);

 

            for (int i = 0; i < obj.length; i++) {

                pstmt.setObject(i + 1, obj[i]);

            }

 

            result = pstmt.executeUpdate();

        } catch (SQLException err) {

            err.printStackTrace();

            free(null, pstmt, conn);

        } finally {

            free(null, pstmt, conn);

        }

        return result;

    }

 

    /**

     * 查【Query

     *

     * @param sql

     * @return ResultSet

     */

    public static ResultSet executeQuery(String sql) {

        Connection conn = null;

        Statement stmt = null;

        ResultSet rs = null;

 

        try {

            conn = getConnection();

            stmt = conn.createStatement();

            rs = stmt.executeQuery(sql);

        } catch (SQLException err) {

            err.printStackTrace();

            free(rs, stmt, conn);

        }

 

        return rs;

    }

 

    /**

     * 查【Query

     *

     * @param sql

     * @param obj

     * @return ResultSet

     */

    public static ResultSet executeQuery(String sql, Object... obj) {

        Connection conn = null;

        PreparedStatement pstmt = null;

        ResultSet rs = null;

 

        try {

            conn = getConnection();

            pstmt = conn.prepareStatement(sql);

           

            for (int i = 0; i < obj.length; i++) {

                pstmt.setObject(i + 1, obj[i]);

            }

           

            rs = pstmt.executeQuery();

        } catch (SQLException err) {

            err.printStackTrace();

            free(rs, pstmt, conn);

        }

 

        return rs;

    }

 

    /**

     * 判断记录是否存在

     *

     * @param sql

     * @return Boolean

     */

    public static Boolean isExist(String sql) {

        ResultSet rs = null;

 

        try {

            rs = executeQuery(sql);

            rs.last();

            int count = rs.getRow();

            if (count > 0) {

                return true;

            } else {

                return false;

            }

        } catch (SQLException err) {

            err.printStackTrace();

            free(rs);

            return false;

        } finally {

            free(rs);

        }

    }

 

    /**

     * 判断记录是否存在

     *

     * @param sql

     * @return Boolean

     */

    public static Boolean isExist(String sql, Object... obj) {

        ResultSet rs = null;

 

        try {

            rs = executeQuery(sql, obj);

            rs.last();

            int count = rs.getRow();

            if (count > 0) {

                return true;

            } else {

                return false;

            }

        } catch (SQLException err) {

            err.printStackTrace();

            free(rs);

            return false;

        } finally {

            free(rs);

        }

    }

 

    /**

     * 获取查询记录的总行数

     *

     * @param sql

     * @return int

     */

    public static int getCount(String sql) {

        int result = 0;

        ResultSet rs = null;

 

        try {

            rs = executeQuery(sql);

            rs.last();

            result = rs.getRow();

        } catch (SQLException err) {

            free(rs);

            err.printStackTrace();

        } finally {

            free(rs);

        }

 

        return result;

    }

 

    /**

     * 获取查询记录的总行数

     *

     * @param sql

     * @param obj

     * @return int

     */

    public static int getCount(String sql, Object... obj) {

        int result = 0;

        ResultSet rs = null;

 

        try {

            rs = executeQuery(sql, obj);

            rs.last();

            result = rs.getRow();

        } catch (SQLException err) {

            err.printStackTrace();

        } finally {

            free(rs);

        }

 

        return result;

    }

 

    /**

     * 释放【ResultSet】资源

     *

     * @param rs

     */

    public static void free(ResultSet rs) {

        try {

            if (rs != null) {

                rs.close();

            }

        } catch (SQLException err) {

            err.printStackTrace();

        }

    }

 

    /**

     * 释放【Statement】资源

     *

     * @param st

     */

    public static void free(Statement st) {

        try {

            if (st != null) {

                st.close();

            }

        } catch (SQLException err) {

            err.printStackTrace();

        }

    }

 

    /**

     * 释放【Connection】资源

     *

     * @param conn

     */

    public static void free(Connection conn) {

        try {

            if (conn != null) {

                conn.close();

            }

        } catch (SQLException err) {

            err.printStackTrace();

        }

    }

 

    /**

     * 释放所有数据资源

     *

     * @param rs

     * @param st

     * @param conn

     */

    public static void free(ResultSet rs, Statement st, Connection conn) {

        free(rs);

        free(st);

        free(conn);

    }

}

 

转载自:http://www.cnblogs.com/xia520pi/archive/2012/05/22/2513920.html 

若转载请注明出处!若有疑问,请回复交流!
目录
相关文章
|
4月前
|
Java 数据库连接
JDBC跨平台封装工具类
JDBC跨平台封装工具类
|
1月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
29 1
|
3月前
|
SQL Java 数据库连接
老程序员分享:JDBC工具类封装、封装DAO方法与数据库表实体类封装的使用案列详情
老程序员分享:JDBC工具类封装、封装DAO方法与数据库表实体类封装的使用案列详情
|
4月前
|
Java 关系型数据库 MySQL
flea-db使用之封装JDBC接入
【4月更文挑战第6天】本篇 Huazie 介绍 Flea 框架下的 flea-db 模块中封装JDBC的逻辑
50 1
flea-db使用之封装JDBC接入
|
Java 数据库连接
Java 中封装JDBC连接到JDBCUtils工具类的详解
Java 中封装JDBC连接到JDBCUtils工具类的详解
68 0
|
4月前
|
SQL Java 数据库连接
JDBC如何封装成Mybaits持久层框架只需4
本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架。再而论述Mybatis作为一个数据持久层框架本身有待改进之处。
28 0
|
4月前
|
SQL Java 数据库连接
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)(下)
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
498 1
|
4月前
|
SQL druid Java
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
51 0
|
4月前
|
SQL Java 数据库连接
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)(中)
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
48 0
|
4月前
|
SQL 存储 Java
JDBC技术【封装JDBC工具类、Statement的使用、PreparedStatement的使用(重点)、ResultSet的使用】(二)-全面详解(学习总结---从入门到深化)
JDBC技术【封装JDBC工具类、Statement的使用、PreparedStatement的使用(重点)、ResultSet的使用】(二)-全面详解(学习总结---从入门到深化)
223 0