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 ...
随机推荐
- 多线程《五》GIL全局解释器锁
一 引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native t ...
- 【10.2.3】ArcGIS Runtime for Android搭建开发环境过程中问题具体解释
一.Visual Studio Ultimate2012安装过程问题 1.问题描写叙述 安装完毕后,您将看到一条消息,指示安装程序已完毕.但并非全部的功能具有已正确安装.以及下面警告消息: Micro ...
- 【转】VS2010不能引用System.Data.OracleClient解决方法
源地址:http://blog.csdn.net/iloli/article/details/8484674
- 【spring cloud】并发测试问题
一,问题 并发测试,对外接口测试50个并发的时候开发报错,报错信息类似如下: {"status":"0500","message":&qu ...
- The server of Nginx(一)——Nginx基础及静态网站的构建
一.Nginx介绍 火了半边天的Nginx和Apache一样也是Web服务器,专为性能优化而开发,也可以像Squid一样做反向代理,或者邮件代理等许多用途,并有windows的移植版,其最知名的优点是 ...
- ubuntu 18.04 通过联网方式安装wine
ubuntu 18.04 通过联网方式安装wine 1.如果是64位机器,先开启允许32位架构程序运行 sudo dpkg --add-architecture i386 2.添加元wine源码安装仓 ...
- How to: Create a Business Model in the XPO Data Model Designer
How to: Create a Business Model in the XPO Data Model Designer This topic provides step-by-step inst ...
- 【MySQL】20个经典面试题
转自:https://blog.csdn.net/suifenglie/article/details/78919045 Part1:经典题目 1.MySQL的复制原理以及流程 基本原理流程,3个线程 ...
- 关于 FPDF、HTML2PDF里的中文、日文、韩文等双字节字符换行问题
最近使用 FPDF.HTML2PDF导出中文PDF,发现表格里的数据不会自动换行,格式乱了,看了一下手册,有个 functionCell()可以设置换行,但是设置了半天也没反应!最后搞了一个笨办法完美 ...
- centos下 KeyboardInterrupt 退不出来的结局方法