2018-12-14

目标:做成一个比较通用的 sql 操作

import com.ljs.util.JDBCUtil;

类名:JdbcUtilDao

1: 更新操作, 针对任何表,增加,删除,更新操作都可以满足。

知识点: 可变数组, preparedstatement 对象。(?) 占位符。

public int update(String sql, Object ...objects){   // 

        // 1 获取conn 连接
Connection connection =null;
PreparedStatement pt = null;
try {
connection = JDBCUtil.getConn(); pt = connection.prepareStatement(sql); for( int i =; i < objects.length; ++i ){
pt.setObject(i+, objects[i]);
}
int len = pt.executeUpdate();
return len;
} catch ( Exception e) { e.printStackTrace();
return -;
} finally {
// 3 关闭 con
JDBCUtil.close(null, pt, connection);
} }

2: 通用的查询单条记录, 只返回一条的记录。  这条记录用 javabean 对象封装好。

知识点:泛型,ResultSetMetaData 对象保存结果集的属性结构。 和根据ResultSet 的值

反射,  生成对象,和获取对象的属性并且赋值。

ResultSet --> bean.

public<T> T queryOne(Class<T> clazz, String sql, Object ...Object){

        try {
Connection connection = JDBCUtil.getConn(); PreparedStatement pst = connection.prepareStatement(sql);
for( int i=; i<Object.length; ++i ){
pst.setObject(i+, Object[i]);
} ResultSet resultSet = pst.executeQuery(); // ResultSetMetaData 保存这个结果集的属性结构。
ResultSetMetaData metaData = resultSet.getMetaData();
int len = metaData.getColumnCount(); while( resultSet.next() ){ T bean = clazz.newInstance();
for( int i = ; i<=len; ++i ){
String column_name = metaData.getColumnLabel(i);
Object value = resultSet.getObject(column_name); /*
* 根据结果集的属性结构 构造 属性结构。
* 反射 。
*/
Field field = clazz.getDeclaredField(column_name);
field.setAccessible(true);
field.set(bean, value); }
return bean;
}
} catch (Exception e) {
e.printStackTrace();
} return null; }

3 查询多条记录,返回list容器列表中。

知识点: 和上一样。 ArrayList

public <T> List<T> queryMutil(Class<T> clazz, String sql, Object ...Object){

        try {
Connection connection = JDBCUtil.getConn();
PreparedStatement pst = connection.prepareStatement(sql);
List<T> list = new ArrayList<T>();
for( int i=; i<Object.length; ++i ){
pst.setObject(i+, Object[i]);
} ResultSet set = pst.executeQuery(); ResultSetMetaData metadata = set.getMetaData();
int len = metadata.getColumnCount(); while(set.next()){
T bean = clazz.newInstance();
for (int i = ; i <= len; i++) {
String name = metadata.getColumnLabel(i);
Object object2 = set.getObject(name); Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
field.set(bean, object2);
}
list.add(bean);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

上面的测试代码

package com.ljs.daoTest;

import java.util.List;

import org.junit.Test;

import com.ljs.bean.UserBean;
import com.ljs.dao.JdbcUtilDao; public class JdbcDaoTest { @Test
public void update(){ JdbcUtilDao dao = new JdbcUtilDao();
//String sql = "insert into user(name,password) values(?,?)";
String sql = "update user set name = ? where id = 11";
int len = dao.update(sql, "lijinsheng");
System.out.println(len>?"yes":"no");
} @Test
public void queryOne(){
JdbcUtilDao dao = new JdbcUtilDao();
String sql = "select * from user where name= ?";
UserBean tBean = dao.queryOne(UserBean.class, sql,"lijinsheng");
System.out.println(tBean); } @Test
public void queryMutil(){
JdbcUtilDao dao = new JdbcUtilDao();
List<UserBean> list;
String sql = "select * from user where name= ?";
list = dao.queryMutil(UserBean.class, sql, "lijinsheng");
for( int i=; i<list.size(); ++i ){
System.out.println(list.get(i));
}
} }
public class DaoImp implements Dao{

    @Override
public UserBean query(int id) throws SQLException { String sql = "select * from USER where id = ?";
Connection connection = JDBCUtil.getConn();
UserBean bean = new UserBean();
PreparedStatement preparedStatement = (PreparedStatement)
connection.prepareStatement(sql); preparedStatement.setInt(1,id); ResultSet rs = preparedStatement.executeQuery(); while(rs.next()){ bean.setId(rs.getInt(1));
bean.setName(rs.getString(2));
bean.setPassword(rs.getString(3));
bean.setPhone(rs.getString(4)); } JDBCUtil.close(connection,preparedStatement, rs);
return bean; } @Override
public void modify(UserBean userBean) throws SQLException {
String sql = "update user set name=?, password=?, phone=? where id=?";
Connection connection = JDBCUtil.getConn();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,userBean.getName());
preparedStatement.setString(2, userBean.getPassword());
preparedStatement.setString(3,userBean.getPhone());
preparedStatement.setInt(4,userBean.getId());
preparedStatement.executeUpdate(); } @Override
public void add(UserBean user) throws SQLException {
String sql = "insert into user(id,name,password,phone) values(?,?,?,?)";
Connection connection = JDBCUtil.getConn(); PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,user.getId());
preparedStatement.setString(2,user.getName());
preparedStatement.setString(3,user.getPhone());
preparedStatement.setString(4,user.getPassword());
preparedStatement.executeUpdate();
} @Override
public void delete(int id) throws SQLException { String sql = "delete from user where id=?";
Connection connection = JDBCUtil.getConn(); PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,id);
preparedStatement.executeUpdate(); }
}

  

jdbc--------JdbcUtilDao 类的更多相关文章

  1. MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. java使用注解和反射打造一个简单的jdbc工具类

    a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...

  4. 开源JDBC工具类DbUtils

    本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...

  5. MySQL JDBC事务处理、封装JDBC工具类

    MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...

  6. DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...

  7. 开涛spring3(7.2) - 对JDBC的支持 之 7.2 JDBC模板类

    7.2  JDBC模板类 7.2.1  概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDB ...

  8. JDBC第三篇--【事务、元数据、改造JDBC工具类】

    这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 这是我JDBC的第二篇 http://blog.csdn.net/ho ...

  9. JDBC【事务、元数据、改造JDBC工具类】

    1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...

  10. JDBC工具类完整版!

    package com.aaa.util; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; impor ...

随机推荐

  1. Kotlin VS Java:基本语法差异(转载)

    5月18号,goole宣布Kotlin成为官方支持的开发语言以来,Kotlin语言社区,公众号,qq群等全面轰炸,本文是一篇译文,来自国外的一个用户,将给大家介绍,基础语法部分Kotlin和java之 ...

  2. 基于CentOS搭建VNC远程桌面服务

    系统要求:CentOS 7.2 64 位操作系统 安装.启动 VNC VNC 远程桌面原理 名词解释: Xorg:在 Linux 用户中非常流行,已经成为图形用户程序的必备条件,所以大部分发行版都提供 ...

  3. 10.2.翻译系列:使用Fluent API进行属性映射【EF 6 Code-First】

    原文链接:https://www.entityframeworktutorial.net/code-first/configure-property-mappings-using-fluent-api ...

  4. SNF快速开发平台--规则引擎整体介绍及使用说明书

    一.设计目标 a)规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b)能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c)运算速度快 ...

  5. 审核流(1)SNF.WorkFlow审核流简介--SNF快速开发平台3.1

    本项目是的在Spring.Net.Framework 平台之上进行研发.SNF.WorkFlow审核流是一款完全自主知识产权研发的为软件项目. 审核流基本概念:什么是审核流? 审核流:两个或两个以上的 ...

  6. json-server 详解

    JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源. 安装json-server npm install -g json ...

  7. Go Revel - Testing(测试模块)

    revel提供了一个测试框架来方便的为自己的程序编写功能测试用例. 默认创建的应用骨架附带一个简单的测试用例,这里将它作为起点 ##概览 测试保存在`tests`目录: corp/myapp app/ ...

  8. 用panels 制作drupal首页

    1.下载zen主题 路径:https://www.drupal.org/project/zen2.“启用并设为默认”3.基于zen制作子主题 把zen目录下STARTERKIT文件夹,复制到sites ...

  9. (原)关于i++和++i的小程序测试

    今天看到一个程序,于是用vs运行了一下,结果出乎我的意料: 代码: ; +(i++))+(+(i++)); i=; +(++i))+(+(++i)); i=; printf("x=%d,y= ...

  10. Spark学习笔记——在集群上运行Spark

    Spark运行的时候,采用的是主从结构,有一个节点负责中央协调, 调度各个分布式工作节点.这个中央协调节点被称为驱动器( Driver) 节点.与之对应的工作节点被称为执行器( executor) 节 ...