package com.yc.dao;
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 com.yc.sun.Log;
public class DBHleper {
private static Connection con=null;
private PreparedStatement pstmt=null;
private ResultSet rs=null;
//加载驱动
static {
try {
Class.forName(Mypro.getInstance().getProperty("sql.driver"));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获得连接
public Connection getConnection(){
try {
con=DriverManager.getConnection(Mypro.getInstance().getProperty("sql.url"),
Mypro.getInstance().getProperty("sql.username"),Mypro.getInstance().getProperty("sql.password"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
//关闭的方法
public void close(Connection con,PreparedStatement pstmt,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
Log.log.info(toString());
}
}
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
Log.log.info(toString());
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
Log.log.info(toString());
}
}
}
//设置?的参数
public void setValues(PreparedStatement pstmt,List<String> params){
if(pstmt!=null&¶ms!=null&¶ms.size()>0){
for(int i=0;i<params.size();i++){
try {
pstmt.setString(i+1, params.get(i));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//更新的方法
public int update(String sql,List<String> params){
int r=0;
getConnection();
try {
pstmt=con.prepareStatement(sql);
this.setValues(pstmt, params);
r=pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.close(con, pstmt, rs);
}
return r;
}
//求只有一个值的聚合函数的值
public String uniqueResult(String sql,List<String> params){
String result="";
try {
con=this.getConnection();
pstmt=con.prepareStatement(sql);
this.setValues(pstmt, params);
rs=pstmt.executeQuery();
if(rs.next()){
result=rs.getString(1);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.close(con, pstmt, rs);
}
return result;
}
//求多个聚合的值
public List<String> Results(String sql,List<String>params){
List<String> result=new ArrayList<String>();
try {
con=this.getConnection();
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
int mdc=rs.getMetaData().getColumnCount();
//System.out.println(mdc);
while(rs.next()){
for(int i=0;i<mdc;i++){
result.add(rs.getString(i+1));
//i++;
}
}
} catch (SQLException e) {
Log.log.error(e.getMessage());
}
return result;
}
/**
* 查询单表的数据,返回一个List类型的集合
* 用到的技术:反射,泛型
* @param <T>泛型,即你要得到的集合中存的对象的类型
* @param sql :查询语句,可以包含?
* @param params :?所对应的参数值集合
* @param c :泛型类型所对应的反射对象 Product =》 Class.forname(XXX.XXX)
* @return :返回存储了对象的集合 如果查询product表则返回List<Product>
*/
public <T> List<T> findSignalTables(String sql ,List<String>params,Class<T> c){
List<T> list=new ArrayList<T>();
con=this.getCon(); //获取连接
try {
pstmt=con.prepareStatement(sql); //语句对象
this.setValues(pstmt, params); //设置占位符
ResultSet rs=pstmt.executeQuery();
//获取方法名
Method[] ms=c.getMethods();
//获取数据中表的列名
ResultSetMetaData rsmd=rs.getMetaData();
String[] columnames=new String[rsmd.getColumnCount()];
for(int i=0 ;i<columnames.length;i++){
columnames[i]=rsmd.getColumnName(i+1);
}
while(rs.next()){
T t=(T)c.newInstance();
for(Method m:ms){
String mname=m.getName();
for(int i=0;i<columnames.length;i++){
String cname=columnames[i];
if(mname.equalsIgnoreCase("set"+cname)){
String ctypename=rs.getObject(columnames[i]).getClass().getName();//得到列的数据类型
// System.out.println(ctypename);
//进行数据匹配
if("java.lang.Integer".equals(ctypename)){
m.invoke(t, rs.getInt(columnames[i]));
}else if("java.lang.String".equals(ctypename)){
m.invoke(t, rs.getString(columnames[i]));
}else if("java.math.BigDecimal".equals(ctypename)){
m.invoke(t, rs.getDouble(columnames[i]));
}//如果还有其他的数据类型直接在这里加代码
//m.invoke(t, rs.getString(columnames[i]));
}
}
}
list.add(t);
}
} catch (SecurityException e) {
LogUtil.log.error(e.getMessage());
} catch (IllegalArgumentException e) {
LogUtil.log.error(e.getMessage());
} catch (SQLException e) {
LogUtil.log.error(e.getMessage());
} catch (InstantiationException e) {
LogUtil.log.error(e.getMessage());
} catch (IllegalAccessException e) {
LogUtil.log.error(e.getMessage());
} catch (InvocationTargetException e) {
LogUtil.log.error(e.getMessage());
}
return list;
}
/**
* 查询多表的数据,先将数据存在一个map中,在将这个map存到list中
* @param sql
* @param params
* @return
* @throws SQLException
*/
public List<String> findMutilTable(String sql,List<String> params) throws SQLException{
Map<String,String> map=new HashMap<String,String>();
//List<Map<String,String>> list=new ArrayList<Map<String,String>>();
List<String> list=new ArrayList<String>();
con=this.getCon();
pstmt=con.prepareStatement(sql);
this.setValues(pstmt, params);
ResultSet rs=pstmt.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
String[] columname=new String[rsmd.getColumnCount()];
for(int i=0;i<columname.length;i++){
columname[i]=rsmd.getColumnName(i+1);
//System.out.println(columname[i]);
}
while(rs.next()){
for(int i=0;i<columname.length;i++){
map.put(columname[i], rs.getString(i+1));
String e=map.get(columname[i]);
list.add(e);
}
}
return list;
}
}
分享到:
相关推荐
标题中的“一款封装java访问数据库的底层数据库操作的jar”指的是一个Java库,它将数据库交互的底层细节进行了抽象和封装,使得开发者可以更高效、更便捷地在Java应用程序中进行数据库操作。这样的库通常会包含一...
### 数据库小知识:用Java访问数据库 #### 概述 在软件开发过程中,数据库连接是至关重要的一环。尤其对于Java开发者来说,掌握如何高效、稳定地与数据库交互是非常重要的技能之一。然而,许多Java初学者在尝试...
Java访问数据库是开发Java应用程序时常见的任务,尤其是在构建企业级应用时。Java通过Java Database Connectivity (JDBC) API与各种数据库进行交互。本篇将详细解释如何使用Java连接和操作数据库,以及如何优化代码...
在Java编程语言中,JDBC(Java Database Connectivity)是一个用于访问和操作数据库的标准接口。它允许程序员使用SQL语句来与各种类型的数据库进行交互。在这个名为"JAVA操作数据库模板代码"的压缩包中,我们有两个...
通过jdbc的方式访问数据库: 1.程序是整理的韩顺平oracle教学视频中的一个例子。 2.假设本机安装了oracle数据库,并在orcl的数据库中建立了基于scott用户的emp表。 3.把数据库的驱动信息、用户、密码、url写到外部...
本资源"实用数据库访问类,封装常见的数据库访问类助手"提供了一个方便的工具,可以简化数据库操作,提高代码的可维护性和复用性。 首先,我们要理解什么是数据库访问类。数据库访问类是面向对象编程中的一种设计...
总的来说,Java访问数据库的方式多样,从基础的JDBC到高级的ORM框架,每种都有其适用场景。选择哪种方式取决于项目需求,例如对性能的要求、开发效率、数据库操作的复杂度等。了解并掌握这些技术,对于Java开发人员...
JDBC是Java中标准的数据库访问接口,它提供了与各种数据库通信的能力,但其API较为底层,使用时需要编写大量的重复代码。因此,封装类可以对JDBC进行抽象和简化,提供更友好的API。 首先,封装类可能会包含一个`...
综上所述,通过采用数据库连接池技术、选择合适的JDBC驱动程序以及利用JavaBean技术封装数据库操作等方式,可以在很大程度上提高Java访问数据库的效率,进而提升整个系统的性能表现。这些方法不仅有助于优化资源利用...
封装了常用的数据库访问的模式化操作,可以大大简化程序的复杂性,和提高代码的利用率!
2. **JDBC(Java Database Connectivity)**:JDBC是Java访问数据库的标准API,通过它,开发者可以编写代码来连接数据库、发送SQL语句、处理结果集。学习者需要理解DriverManager类、Connection接口、Statement和...
### JAVA:数据库操作封装 #### 概述 在Java开发中,进行数据库操作是一项非常常见的任务。为了提高代码的可维护性、复用性和降低出错率,通常会将常用的数据库操作方法进行封装,形成一个统一的操作接口。这种...
首先,JDBC是Java中用于与关系型数据库交互的一组接口和类,它为开发者提供了一种标准的、平台无关的方式来访问数据库。要连接到数据库,你需要以下步骤: 1. **加载驱动**:使用`Class.forName()`方法加载数据库...
在Java编程中,访问数据库通常涉及到JDBC(Java Database Connectivity),这是一个Java API,用于与各种数据库系统交互。在给定的文件中,我们看到一个简单的示例,展示了如何使用JDBC连接到SQL Server 2005数据库...
8. DAO(Data Access Object)模式:DAO是设计模式之一,用于封装数据库操作,使业务逻辑和数据访问逻辑分离,提高代码的可维护性和可测试性。 9. ORM(Object-Relational Mapping)框架:如Hibernate、MyBatis等,...
本资料包"Java封装hibernate操作数据库.rar"主要涉及了如何使用Hibernate进行数据库操作,并通过DAO(Data Access Object)层的封装来实现更加高效、简洁的代码结构。 首先,让我们深入了解Hibernate。Hibernate是一...
在Java中,通常使用DAO(数据访问对象)设计模式来实现这一层,将数据库操作封装起来。 2. **视图(View)**:视图层主要负责显示数据,它是用户看到并与其交互的界面。在Java MVC中,视图通常由JSP(JavaServer ...
JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一的访问接口。JDBC的目标是允许开发人员能够编写数据库独立的应用程序,即应用程序无需依赖于底层数据库的具体...
总结起来,不直接写SQL语句的Java MySQL数据库操作通常依赖于ORM框架或Spring提供的数据访问工具,这些工具通过映射机制和高级API,使得开发者可以更加专注于业务逻辑,而不是数据库细节。在实际项目中,`DataAccess...
总的来说,这个压缩包提供的内容有助于理解和学习如何在Java项目中有效地利用Ibatis进行数据库操作,同时通过DAO层封装,可以使得业务逻辑和数据访问层分离,提高代码的复用性和模块化。对于想要深入理解Ibatis或者...