反射的应用,jdbc封装
实现在Java中查询数据库并保存在Java中
1.创建Dept类(要查找的类)
package cn.ljs; public class Dept {
private int deptno;
private String dname;
private String loc; public int getDeptno() {
return deptno;
} public void setDeptno(int deptno) {
this.deptno = deptno;
} public String getDname() {
return dname;
} public void setDname(String dname) {
this.dname = dname;
} public String getLoc() {
return loc;
} public void setLoc(String loc) {
this.loc = loc;
} public Dept() {
super();
} public Dept(int deptno, String dname, String loc) {
super();
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
} @Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc
+ "]";
} }
2.自定义的工具类
package cn.ljs.utill; 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.Properties; public class Jdbcutill { private static String drive = "";
private static String url = "";
private static String user = "";
private static String password = ""; static {
try {
// 以流的形式获取db.properties
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"); // 创建Properties 类,通过load流读取到该对象中
Properties prop = new Properties();
prop.load(in);
drive = prop.getProperty("drive");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password"); System.out.println(drive);
System.out.println(url);
System.out.println(user);
System.out.println(password); // 1.加载数据库驱动类
Class.forName(drive); } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("配置文件失败");
}
} public static Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return connection; } public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.配置文件
# do not write space
drive=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
user=SCOTT
password=tiger
4实现在Java中查询数据库并保存在Java中
package cn.ljs; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import cn.ljs.utill.Jdbcutill; public class TestUser {
public static void main(String[] args) throws Exception {
TestUser testUser = new TestUser();
List list = testUser.rowToBean("select * from dept", Dept.class);
for (int i = 0; i < list.size(); i++) {
Dept dept = (Dept)list.get(i);
System.out.println(dept);
}
} public List rowToBean(String sql,Class cls) throws Exception{
List list = new ArrayList<>();
//调用自定义的方法,加载数据库,创建数据库的连接对象
Connection conn = Jdbcutill.getConnection();
//创建预编译对象,结果集对象
PreparedStatement ps= null;
ResultSet rs = null; ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
// 每一个rs对象都对应一个ResultSetMetaData对象
ResultSetMetaData metaData = rs.getMetaData();
// 获取查询的列数
int count = metaData.getColumnCount(); //遍历
while(rs.next()){
Object object = cls.newInstance();
for (int i = 0; i < count; i++) {
//获取第几列的名字
String fieldName = metaData.getColumnName(i+1).toLowerCase();
//通过类名获取类中的属性的描述
Field field = cls.getDeclaredField(fieldName);
//通过类名,拼接的方法名,属性描述的类型获取set方法
Method method = cls.getDeclaredMethod(getSetMethodName(fieldName),field.getType());
//通过结果集获取数据库中的属性值
Object objval = rs.getObject(fieldName);
//执行setfangfa(需要类的对象名,数据库的属性值)
if (objval != null) {
if (objval instanceof Number) {
if (field.getType().getName().equals("int")
|| field.getType().getName().equals("java.lang.Integer")) {
method.invoke(object, rs.getInt(fieldName));
} else if (field.getType().getName().equals("long")
|| field.getType().getName().equals("java.lang.Long")) {
method.invoke(object, rs.getLong(fieldName));
} else if (field.getType().getName().equals("double")
|| field.getType().getName().equals("java.lang.Double")) {
method.invoke(object, rs.getDouble(fieldName));
} else if (field.getType().getName().equals("short")
|| field.getType().getName().equals("java.lang.Short")) {
method.invoke(object, rs.getShort(fieldName));
} else if (field.getType().getName().equals("byte")
|| field.getType().getName().equals("java.lang.Byte")) {
method.invoke(object, rs.getByte(fieldName));
} else if (field.getType().getName().equals("float")
|| field.getType().getName().equals("java.lang.Float")) {
method.invoke(object, rs.getFloat(fieldName));
}
} else {
method.invoke(object, objval);
}
}
//关闭资源 } list.add(object);
} Jdbcutill.close(conn, ps, rs); return list;
}
//拼接set方法名
public String getSetMethodName(String fieldName){
return "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
} }
反射的应用,jdbc封装的更多相关文章
- 优化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 ...
- 利用java反射将结果集封装成为对象和对象集合
java反射机制是什么 反射机制是在运行状态中,可以知道任何一个类的属性和方法,并且调用类的属性和方法: 反射机制能够做什么 1.判断运行对象的所属类 2.构造任意一个类的对象 3.获取任意一个类的属 ...
- JDBC封装的工具类
1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...
- Mysql,JDBC封装
1.完成对数据库的表的增删改的操作 2.查询返回单条记录 3.查询返回多行记录 4.可以使用反射机制来封装,查询单条记录 5.反射机制,查询多条记录 package myjdbc; import ja ...
- 使用DbUtils对JDBC封装实现面向实体查询
直接上代码 package org.smart4j.chapter2.helper; import org.apache.commons.dbcp2.BasicDataSource; import o ...
- java jdbc 封装。。
JDBC工具类...package it.cast.jdbcutils; import java.io.InputStream; import java.sql.Connection; import ...
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- Java JDBC封装模式
模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法 下面使用到的两个bean.首先是userbean package bean; public class user { Stri ...
随机推荐
- fs.inotify.max_user_watches默认值太小,导致too many open files
运行环境:centos7.5 linux 打开文件数 too many open files 解决方法fs.inotify.max_user_watches默认值太小,导致too many open ...
- vmware ubuntu硬盘空间不够用,空间扩展
我从来没有想过我的虚拟机内存会不够用,毕竟已经20G了,可是最近学习python,装了些学习有关的软件, 期末做libvirt管理实验,存了两个镜像,就变成这样了,所以,我就像了要扩展硬盘空间,在网上 ...
- python实现目录大小计算(含子目录)
path=r"F:\\PYTHON\\day8\\ftp_server\\"#这里我直接写了固定地址,你可以自己输入 file_size = 0 def split_doc(pat ...
- C#代码执行耗时计算,此处是监测的mvc控制器方法
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011511086/article/details/78710980using System;usi ...
- cookie报错
错误: java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value 原因 ...
- WebSocket的Tomcat实现
一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...
- python3类方法与静态方法
静态⽅法和类⽅法 转载于:https://blog.csdn.net/qq_41020281/article/details/79634707 1. 类⽅法 是类对象所拥有的⽅法,需要⽤修饰器 @cl ...
- silverlight 调试问题
web端调用方式是:<param name="source" value="/ClientBin/Chns.Web.RoomChart.xap?v=012" ...
- Python中的__init__和__new__
一.__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- c ...
- __x__(20)0907第四天__列表ul,ol,dl
列表分为: 有序列表 ul: <ul type="disc"> <li>张三</li> <li>李四</li> < ...