JDBC操作数据库CRUD

本文介绍了一个Java环境下数据库操作的具体实现,包括连接数据库、执行增删改查操作等核心功能,并展示了如何通过PreparedStatement来防止SQL注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.hui.dao.impl;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;
import com.hui.dao.IBaseDao;
import com.hui.pop.PropertyEditor;
import com.hui.vo.HUserType;
import com.hui.vo.HUsers;
import com.hui.vo.HXswen;
@SuppressWarnings("unchecked")
public class BaseDao implements IBaseDao 
{
	private final Properties properties = DtString.getProperties();
	private final String driver =properties.get("driver").toString();
	private final String url=properties.get("url").toString();
	private final String user =properties.get("user").toString();
	private final String password=properties.get("password").toString();
	
	/**
	 * 获得数据库连接
	 * @return
	 */
	public Connection getConn() {
		Connection conn=null;
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	/**
	 * 关闭数据库连接 结果集 预编译ps
	 * @param rs
	 * @param ps
	 * @param conn
	 */
	public void closeSession(ResultSet rs, PreparedStatement ps, Connection conn) {

		try {
			if (rs != null) {
				rs.close();
				rs=null;
			}
			if (ps != null) {
				ps.close();
				ps=null;
			}
			if (conn != null) {
				conn.close();
				conn=null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

    /**
     * 执行 修改 保存 删除的通用方法
     */
	public int saveOrUpdate(String sql,Object[] objects)
	{
	   int exce=0;
	   PreparedStatement ps=null;
	   Connection conn=null;
	   try {
		  conn=this.getConn();
		  ps=conn.prepareStatement(sql);
		   if(objects!=null)
		   {
			  for (int i = 0; i < objects.length; i++)
			  {
			      ps.setObject(i+1, objects[i]);
			  } 
		
		   }
		   exce=ps.executeUpdate();
	} catch (SQLException e) {
		e.printStackTrace();
	}finally{
		 this.closeSession(null, ps, conn);
	}
	return exce;	
	}
	
	
	/**
	 * 执行查询 通用的查询方法
	 * @param sql
	 * @param objects
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */

	public Map[] query(String sql,Object[] objects)
	{
		 Connection conn=null;
		 PreparedStatement ps=null;
		 ResultSet rs=null;
	     Map[] maps=null;
		try {
			   conn=this.getConn();
			   ps=conn.prepareStatement(sql);
			   if(objects!=null)
			   {
				  for (int i = 0; i < objects.length; i++) 
				   {
				      ps.setObject(i+1, objects[i]);
			       } 
			   }
			  rs=ps.executeQuery();
			  Result result=ResultSupport.toResult(rs);
			  maps=result.getRows();
		} 
		
		catch(SQLException e) 
		{
		  e.printStackTrace();
		}finally
		{	
		    this.closeSession(rs, ps, conn);
		}
		return maps;
	}
	
	
    /**
     * 查询总条数 查询统计
	   total =rs.getInt(1);
     * @param sql
     * @param objects
     * @param pageSize
     * @return
     */
	public int getCount(String sql,Object[] objects)
	{
		 //总条数
		int total=0;
		ResultSet ts=null;
		PreparedStatement ps=null;
	    Connection conn=null;
		try {
			conn=this.getConn();
			ps=conn.prepareStatement(sql);
			   if(objects!=null)
			   {
				  for (int i = 0; i < objects.length; i++) 
				   {
				      ps.setObject(i+1, objects[i]);
			       } 
			   }
			   ts=ps.executeQuery();
			   if(ts.next())
			   {
				   total =ts.getInt(1); 
			   }
		} catch (SQLException e) {
			e.printStackTrace();
		}
		finally
		{
			this.closeSession(null, ps, conn);
		}
		return total;
	}

	
	    
   /**
    * 保存信息 并返回当前的ID
    */
	public int saveObject(String sql, Object[] obj) 
	{
		int exce=0;																																																PreparedStatement ps=null;
		   Connection conn=null;
		   try {
			   conn=this.getConn();
			ps=conn.prepareStatement(sql);
			   if(obj!=null)
			   {
				  for (int i = 0; i < obj.length; i++) {
				      ps.setObject(i+1, obj[i]);
				 } 
			   }
			ps.execute();
			ps.clearParameters();
			ResultSet rs=ps.executeQuery("select @@IDENTITY");
			if(rs.next())
			{
				exce=rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			 this.closeSession(null, ps, conn);
		}
		return exce;
	}
	
class DtString {

	public static Properties getProperties()
	{
		Properties properties = new Properties();
		InputStream fis = PropertyEditor.class.getResourceAsStream("/data.properties"); 
		try {
			properties.load(fis);// 将属性文件流装载到Properties对象中   
			fis.close();// 关闭流 
		}catch (IOException e) {
			e.printStackTrace();
		}
		return properties;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值