1.编写实体类User

public class User {
private Integer id;
private String username;
private Integer age;
private Date registerTime; //mysql 使用时间戳 public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Date getRegisterTime() {
return registerTime;
} public void setRegisterTime(Date registerTime) {
this.registerTime = registerTime;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
", registerTime=" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(registerTime) +
'}';
}
}

User.java

注意:java的Date对应数据库的timestamp

2.创建表

 CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20),
age int,
registerTime timestamp default now()
)

3. 编写DBUtil

package work;

import com.sun.rowset.CachedRowSetImpl;

import java.sql.*;
import java.util.HashMap;
import java.util.Map; public class DbUtil {
private Connection conn;
private String url = "jdbc:mysql://localhost:3306/db_jdbc?characterEncoding=utf8"; protected void setConnection() {
//初始化conn
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, "root", "");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 查询操作,返回缓存类,防止数据库连接关闭后无法访问ResultSet
*
* @param sql
* @param params
* @return
*/
//Object ...
public CachedRowSetImpl executeQuery(String sql, Map<Integer, Object> params) {
if (conn == null) {
setConnection();
}
PreparedStatement statement = null;
ResultSet rs = null;
CachedRowSetImpl rowset = null;
try {
statement = conn.prepareStatement(sql);
if (params != null) {
for (int i = ; i < params.size(); i++) {
statement.setObject(i + , params.get(i));
}
}
rs = statement.executeQuery();
rowset = new CachedRowSetImpl();
rowset.populate(rs);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close();
}
return rowset;
} /**
* 执行删除、修改和添加操作
*
* @param sql
* @param params
* @return
*/
public int executeUpdate(String sql, Map<Integer, Object> params) {
int rs = ;
if (conn == null) {
setConnection();
}
PreparedStatement statement = null;
try {
statement = conn.prepareStatement(sql);
if(params!=null){
for (int i = ; i < params.size(); i++) {
statement.setObject(i + , params.get(i));
}
}
rs = statement.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close();
}
return rs;
} protected void close() {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void main(String[] args) throws SQLException {
CachedRowSetImpl rowSet = new DbUtil()
.executeQuery("select * from student where id < ?", new HashMap<Integer, Object>(){{put(,);}});
while (rowSet.next()) {
int id = rowSet.getInt("id");
String name = rowSet.getString("name");
String className = rowSet.getString("className");
System.out.println("[id=" + id + ", name=" + name + ", className=" + className + "]");
}
}
}

DbUtil.java

4.UserDao.java

package work;

import com.sun.rowset.CachedRowSetImpl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List; public class UserDao {
private DbUtil db; public DbUtil getDb() {
return db;
} public void setDb(DbUtil db) {
this.db = db;
} public UserDao(DbUtil db) {
this.db = db;
} /**
* 查询所有user
* @return
*/
public List<User> getUsers(){
List<User> users = new ArrayList<User>();
String sql = "select * from users ";
CachedRowSetImpl rowSet = db.executeQuery(sql, null);
try {
while(rowSet.next()){
User user = new User();
user.setId(rowSet.getInt("id"));
user.setUsername(rowSet.getString("username"));
user.setAge(rowSet.getInt("age"));
user.setRegisterTime(rowSet.getTime("registerTime"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
} /**
* 添加用户
* @param user
* @return
*/
public int addUser(User user){
int rs = ;
String sql = "insert into users (username, age, registerTime) values (?, ?, ?)";
rs = db.executeUpdate(sql, new HashMap<Integer, Object>(){{
put(, user.getUsername());
put(, user.getAge());
put(, user.getRegisterTime());
}});
return rs;
} /**
* 删除user
* @param id
* @return
*/
public int deleteUser(int id){
int rs = ;
String sql = "delete from users where id = ? ";
rs = db.executeUpdate(sql, new HashMap<Integer, Object>(){{put(, id);}});
return rs;
} /**
* 修改user
* @param user
* @return
*/
public int updateUser(User user){
int rs = ;
String sql = "update users set username = ?, age = ?, registerTime = ? where id = ? ";
rs = db.executeUpdate(sql, new HashMap<Integer, Object>(){{
put(, user.getUsername());
put(, user.getAge());
put(, user.getRegisterTime());
put(, user.getId());
}});
return rs;
}
}

UserDao.java

jdbc封装DBUtil的更多相关文章

  1. 封装jdbc、DBUtil

    package com.cmos.util; import java.io.IOException; import java.io.InputStream; import java.sql.Conne ...

  2. 优化JDBC封装

    可重用性较强的JDBC封装 以下为代码,注释中写了主要思想 主类 com.util.JDBCUtil.java package com.util; import java.lang.reflect.F ...

  3. jdbc封装代码

    jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...

  4. JDBC封装的工具类

    1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...

  5. JDBC封装

    在模拟servlet调用dao中,我们发现在dao的实现类中有许多重复代码,我们可以将其封装起来. 步骤: 一. 创建一个类 DBUtil 1加载驱动和建立链接的代码 完全一样 加载驱动写到静态代码快 ...

  6. Phoenix的jdbc封装

    一.Phoenix版本 <dependency> <groupId>org.apache.phoenix</groupId> <artifactId>p ...

  7. JDBC封装-Java(新手)

    JDBC的封装,自己总结的自己总结的自己总结的 dao (代码分层)命名规范: 1.com.XXX.dao 存放dao相关的类型 例如 StudentDAOImpl 处理 数据库的链接 存取数据 2. ...

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

    转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...

  9. Mysql,JDBC封装

    1.完成对数据库的表的增删改的操作 2.查询返回单条记录 3.查询返回多行记录 4.可以使用反射机制来封装,查询单条记录 5.反射机制,查询多条记录 package myjdbc; import ja ...

随机推荐

  1. 个人常用Markdow语法代码备用

    1.分隔线 -------------------------------- 2.OC代码 ``` Objective-C ``` 3.字体加粗 ##加粗## 4.标题样式 <h1> &l ...

  2. HttpClient 基于连接池的使用

    场景:调用外部系统接口的http请求 要求: 1:可能是http请求,也可能是https请求 2:需要加入连接池的概念,不能每次发起请求都新建一个连接(每次连接握手三次,效率太低) 准备使用httpc ...

  3. winform跨线程问题(有参数和无参数)

    1.invoke是同步线程 using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...

  4. What Goes Up UVA - 481 LIS+打印路径 【模板】

    打印严格上升子序列: #include<iostream> #include<cstdio> #include<algorithm> #include<cst ...

  5. Python之freshman07 面向对象编程jinjie

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程 经典类vs新式类 把下面代码 ...

  6. 16. js 判断变量类型,包括ES6 新类型Symbol

    相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...

  7. linux中tr的功能多多

    功能 通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能. 您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您也可以用它来 ...

  8. IIS环境下上传文件失败

    跟随学习代码练习 php 上传文件,一开始是点击按钮后没有反应,不知道是否成功,使用 var_dump($_FILES) 查看,发现空空如也.遂百度一下,发现基本代码应如下 <form acti ...

  9. gym 100589A queries on the Tree 树状数组 + 分块

    题目传送门 题目大意: 给定一颗根节点为1的树,有两种操作,第一种操作是将与根节点距离为L的节点权值全部加上val,第二个操作是查询以x为根节点的子树的权重. 思路: 思考后发现,以dfs序建立树状数 ...

  10. Dojo2 前端框架基本操作

    安裝CLI,需要先有npm: npm install -g @dojo/cli npm install -g @dojo/cli-create-app 创建项目目录,-n 后面是名字,创建完成后会自动 ...