jdbc封装DBUtil
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的更多相关文章
- 封装jdbc、DBUtil
package com.cmos.util; import java.io.IOException; import java.io.InputStream; import java.sql.Conne ...
- 优化JDBC封装
可重用性较强的JDBC封装 以下为代码,注释中写了主要思想 主类 com.util.JDBCUtil.java package com.util; import java.lang.reflect.F ...
- jdbc封装代码
jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...
- JDBC封装的工具类
1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...
- JDBC封装
在模拟servlet调用dao中,我们发现在dao的实现类中有许多重复代码,我们可以将其封装起来. 步骤: 一. 创建一个类 DBUtil 1加载驱动和建立链接的代码 完全一样 加载驱动写到静态代码快 ...
- Phoenix的jdbc封装
一.Phoenix版本 <dependency> <groupId>org.apache.phoenix</groupId> <artifactId>p ...
- JDBC封装-Java(新手)
JDBC的封装,自己总结的自己总结的自己总结的 dao (代码分层)命名规范: 1.com.XXX.dao 存放dao相关的类型 例如 StudentDAOImpl 处理 数据库的链接 存取数据 2. ...
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- Mysql,JDBC封装
1.完成对数据库的表的增删改的操作 2.查询返回单条记录 3.查询返回多行记录 4.可以使用反射机制来封装,查询单条记录 5.反射机制,查询多条记录 package myjdbc; import ja ...
随机推荐
- 个人常用Markdow语法代码备用
1.分隔线 -------------------------------- 2.OC代码 ``` Objective-C ``` 3.字体加粗 ##加粗## 4.标题样式 <h1> &l ...
- HttpClient 基于连接池的使用
场景:调用外部系统接口的http请求 要求: 1:可能是http请求,也可能是https请求 2:需要加入连接池的概念,不能每次发起请求都新建一个连接(每次连接握手三次,效率太低) 准备使用httpc ...
- winform跨线程问题(有参数和无参数)
1.invoke是同步线程 using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...
- What Goes Up UVA - 481 LIS+打印路径 【模板】
打印严格上升子序列: #include<iostream> #include<cstdio> #include<algorithm> #include<cst ...
- Python之freshman07 面向对象编程jinjie
本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程 经典类vs新式类 把下面代码 ...
- 16. js 判断变量类型,包括ES6 新类型Symbol
相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...
- linux中tr的功能多多
功能 通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能. 您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您也可以用它来 ...
- IIS环境下上传文件失败
跟随学习代码练习 php 上传文件,一开始是点击按钮后没有反应,不知道是否成功,使用 var_dump($_FILES) 查看,发现空空如也.遂百度一下,发现基本代码应如下 <form acti ...
- gym 100589A queries on the Tree 树状数组 + 分块
题目传送门 题目大意: 给定一颗根节点为1的树,有两种操作,第一种操作是将与根节点距离为L的节点权值全部加上val,第二个操作是查询以x为根节点的子树的权重. 思路: 思考后发现,以dfs序建立树状数 ...
- Dojo2 前端框架基本操作
安裝CLI,需要先有npm: npm install -g @dojo/cli npm install -g @dojo/cli-create-app 创建项目目录,-n 后面是名字,创建完成后会自动 ...