java map 增删改,java学习札记/JDBC——自定义工具类,对数据库进行增删改查(两种方案之其二以HashMap形式返回结果集)...

java学习笔记/JDBC——自定义工具类,对数据库进行增删改查(两种方案之其二以HashMap形式返回结果集)

工具类BaseDao.java

package com.accp.jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.log4j.Logger;

public class BaseDao {

// 使用log4j记录日志

private static Logger logger = Logger.getLogger(BaseDao.class);

// 连接驱动

private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

// 连接路径

private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=test";

// 用户名

private static final String USERNAME = "sa";

// 密码

private static final String PASSWORD = "sa";

//静态代码块

static {

try {

// 加载驱动

Class.forName(DRIVER);

} catch (ClassNotFoundException e) {

e.printStackTrace();

logger.error("加载驱动失败", e);

}

}

/*

* 获取数据库连接

*/

public Connection getConnection() {

Connection conn = null;

logger.debug("开始连接数据库");

try{

//与数据库建立连接

conn=DriverManager.getConnection(URL, USERNAME, PASSWORD);

}catch(SQLException e){

e.printStackTrace();

logger.error("数据库连接失败!",e);

}

logger.debug("数据库连接成功");

return conn;

}

/*

* 关闭数据库连接,注意关闭的顺序

*/

public void close(ResultSet rs, PreparedStatement ps, Connection conn) {

//注意:最后打开的最先关闭

if(rs!=null){

try{

rs.close();

rs=null;

}catch(SQLException e){

e.printStackTrace();

logger.error("关闭ResultSet失败",e);

}

}

if(ps!=null){

try{

ps.close();

ps=null;

}catch(SQLException e){

e.printStackTrace();

logger.error("关闭PreparedStatement失败",e);

}

}

if(conn!=null){

try{

conn.close();

conn=null;

}catch(SQLException e){

e.printStackTrace();

logger.error("关闭Connection失败",e);

}

}

}

/*

* 查询多个对象的方法

*

* sql: 要执行的sql语句

* obj:可变参数列表

*/

public List> queryList(String sql,Object... obj){

List> data=new ArrayList>();

Connection conn=getConnection(); //获得连接

PreparedStatement ps=null;

ResultSet rs=null;

try{

//创建PreparedStatement对象

ps=conn.prepareStatement(sql);

//为查询语句设置参数

setParameter(ps, obj);

//获得ResultSet结果集

rs=ps.executeQuery();

//获得结果集信息

ResultSetMetaData rsmd=rs.getMetaData();

// 获得列的总数

int columnCount=rsmd.getColumnCount();

Map row=null;

// 遍历结果集,根据信息封装成Map

while(rs.next()){

row=new HashMap();

for(int i=0;i

String columnLabel=rsmd.getColumnLabel(i+1);

row.put(columnLabel, rs.getObject(columnLabel));

}

data.add(row);

}

}catch(SQLException e){

e.printStackTrace();

logger.error("数据库操作异常",e);

}finally{

//关闭连接

close(rs,ps,conn);

logger.debug("释放资源成功");

}

return data;

}

/*

* 查询一个对象的方法

*

* sql: 要执行的sql语句

* obj:可变参数列表

*/

public Map query(String sql,Object... obj){

Map data=null;

Connection conn=getConnection(); //获得连接

PreparedStatement ps=null;

ResultSet rs=null;

try{

//创建PreparedStatement对象

ps=conn.prepareStatement(sql);

//为查询语句设置参数

setParameter(ps, obj);

//获得ResultSet结果集

rs=ps.executeQuery();

//获得结果集信息

ResultSetMetaData rsmd=rs.getMetaData();

// 获得列的总数

int columnCount=rsmd.getColumnCount();

// 遍历结果集,根据信息封装成Map

while(rs.next()){

data=new HashMap();

for(int i=0;i

String columnLabel=rsmd.getColumnLabel(i+1);

data.put(columnLabel, rs.getObject(columnLabel));

}

}

}catch(SQLException e){

e.printStackTrace();

logger.error("数据库操作异常",e);

}finally{

//关闭连接

close(rs,ps,conn);

logger.debug("释放资源成功");

}

return data;

}

/*

* 增加、修改、删除,的方法

*

* obj: 可变参数列表

*/

public int update(String sql,Object...obj ){

Connection conn=getConnection(); //获得连接

PreparedStatement ps=null;

int rows=0;

try{

//创建PreparedStatement对象

ps=conn.prepareStatement(sql);

//为查询语句设置参数

setParameter(ps, obj);

//获得受影响的行数

rows=ps.executeUpdate();

}catch(SQLException e){

e.printStackTrace();

logger.error("数据库操作异常",e);

}finally{

//关闭连接

close(null,ps,conn);

logger.debug("释放资源成功");

}

return rows;

}

/*

* 为预编译对象设置参数

*/

public void setParameter(PreparedStatement ps,Object... obj)

throws SQLException {

if(obj!=null && obj.length>0){

//循环设置参数

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

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

}

}

}

}

操作类,进行增删改查 UserDao.java

package com.accp.jdbc;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.List;

import java.util.Map;

import com.accp.entity.User;

public class UserDao extends BaseDao {

public static void main(String[] args) {

UserDao user=new UserDao();

/* //查询id<20的数据

user.queryUser();

//查询单条数据

user.queryUserById(10);

//更新数据

User u=new User();

u.setId(2);

u.setName("张龙");

u.setAge(22);

System.out.println("更新"+user.updateUser(u)+"条数据");

//删除数据

System.out.println("删除"+user.deleteUser(15)+"条数据");

//插入数据

User u1=new User();

u1.setName("张三");

u1.setAge(18);

user.insertUser(u1); */

}

//查询多条信息

public void queryUser(){

List> dataUser=queryList("select * from users where id<20");

//遍历结果集

for(Map u:dataUser){

System.out.println(u);

}

}

//查询单条数据

public void queryUserById(int id){

System.out.println(query("select * from users where id=?",id));

}

//更新数据

public int updateUser(User user){

String sql="update users set name=?,age=? where id=?";

return update(sql, user.getName(),user.getAge(),user.getId());

}

//删除数据

public int deleteUser(int id){

String sql="delete from users where id=?";

return update(sql,id);

}

//插入数据,并返回自动增长的的主键值

public void insertUser(User user){

Connection conn=getConnection(); //获得连接

PreparedStatement ps=null;

ResultSet rs=null;

String sql="insert into users values(?,?)";

try{

// 创建能返回自动生成的主键的值的预编译对象

ps=conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

ps.setString(1,user.getName());

ps.setInt(2, user.getAge());

int rows=ps.executeUpdate();

// 获得自动增长的的主键值

rs=ps.getGeneratedKeys();

rs.next();

//获得id

int id=rs.getInt(1);

System.out.println("成功添加:"+rows+"条数据,id是:"+id);

}catch(SQLException e){

e.printStackTrace();

}finally{

close(rs,ps,conn);

}

}

}

插入测试数据 InsertTest.java

package com.accp.jdbc;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class InsertTest extends BaseDao {

public static void main(String[] args) {

InsertTest user=new InsertTest();

user.insertUser();

}

public void insertUser() {

String sql = "insert into users values(?,?)";

Connection conn = getConnection();

PreparedStatement ps = null;

try {

// 禁止自动提交事务

conn.setAutoCommit(false);

// 创建能返回自动生成的主键的值的预编译对象

ps = conn.prepareStatement(sql);

//开始时间的毫秒数

Long start=System.currentTimeMillis();

for (int i = 0; i < 10000; i++) {

ps.setString(1, i+"");

ps.setInt(2, 22);

ps.addBatch();// 添加到批处理命令中

}

ps.executeBatch();// 执行批处理

conn.commit();// 提交事务

//结束时间的毫秒数

Long stop=System.currentTimeMillis();

//得到总耗时

Long ms=stop-start;

System.out.println("插入一万记录耗时:"+ms+"毫秒");

} catch (SQLException e) {

e.printStackTrace();

//取消事务

try{

conn.rollback();

}catch(SQLException ee){

ee.printStackTrace();

}

} finally {

//打开自动提交事务

try {

conn.setAutoCommit(true);

} catch (SQLException e) {

e.printStackTrace();

}

close(null, ps, conn);

}

}

}

1楼aazz123qq昨天 15:32收藏了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值