package com.iflytek.sms.dao.impl.db4;
import java.lang.reflect.Method;
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.Date;
import java.util.List;
public class OrmUtil {
private static String driverClassName = "oracle.jdbc.OracleDriver"; // 驱动字符串
private static String url = "jdbc:oracle:thin:@172.22.247.11:1521:orcl";// 数据库连接字符串
private static String user = "ztc_lizq"; // 用户名
private static String password = "1111";// 密码
static {
// 1、加载数据库驱动
try {
Class.forName(driverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
private static void close(ResultSet rs, PreparedStatement ps,
Connection conn) {
// 7、关闭对象,释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private static int executeUpdate(String sql, Object... params) {
int row = 0;
Connection conn = null;
PreparedStatement ps = null;
try {
// 2、获取数据库连接
conn = getConnection();
// 3、获取对象(负责执行SQL语句)
ps = conn.prepareStatement(sql);
// 4、如果SQL中有占位符,进行参数赋值
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
// 5、执行SQL命令
row = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6、关闭对象,释放资源
close(null, ps, conn);
}
return row;
}
@SuppressWarnings("unchecked")
private static <T> List<T> executeQuery(Class<?> cla, String sql,
Object... params)
{
List<T> list = new ArrayList<T>();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 2、获取数据库连接
conn = OrmUtil.getConnection();
// 3、获取对象(负责执行SQL语句)
ps = conn.prepareStatement(sql);
// 4、如果SQL中有占位符,进行参数赋值
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
// 5、执行SQL命令
rs = ps.executeQuery();
// 获取结果的元数据(结果的结构)
ResultSetMetaData rsmt = rs.getMetaData();
int colCount = rsmt.getColumnCount();// 获取列数
// for (int i = 1; i <= colCount; i++) {
// String colName = rsmt.getColumnLabel(i);// 列名
// String colType = rsmt.getColumnTypeName(i);// 列的数据类型
// }
// 6、循环处理结果集
T obj = null; // Student obj = null;
Method[] methods = cla.getDeclaredMethods();
while (rs.next()) {
obj = (T) cla.newInstance();
for (Method m : methods) {
if (m.getName().startsWith("set")) {
String name = m.getName().substring(3);// 属性名
for (int i = 1; i <= colCount; i++) {
String colName = rsmt.getColumnLabel(i);// 列名
// 结果集存在该列
if (colName.equalsIgnoreCase(name)) {
Object data = null;
if (m.getParameterTypes().length > 0
&& m.getParameterTypes()[0] == int.class) {
data = rs.getInt(colName);// 该列的值
} else {
data = rs.getObject(colName);
}
if (data != null) {
m.invoke(obj, data);// 通过set方法将取出的列值赋值给刚才创建的对象obj
}
break;
}
}
}
}
list.add(obj);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7、关闭对象,释放资源
OrmUtil.close(rs, ps, conn);
}
return list;
}
public static boolean add(Object obj) {
Class<?> cla = obj.getClass();
StringBuffer sql = new StringBuffer();
sql.append("insert into ");
sql.append(cla.getName().substring(cla.getName().lastIndexOf(".") + 1));
sql.append("(");
StringBuffer values = new StringBuffer();
List<Object> params = new ArrayList<Object>();
Method[] methods = cla.getDeclaredMethods();
for (Method m : methods) {
String name = m.getName();
if (name.startsWith("get")) {
// 获取属性名(列名)
String colName = name.substring(3);
// 拼接列名
sql.append(colName + ",");
// 拼占位符,id直接为seq.nextval
if (colName.equalsIgnoreCase("id")) {
values.append("seq.nextval,");
} else {
values.append("?,");
}
// 拼参数值,id除外
if (!colName.equalsIgnoreCase("id")) {
Object val = null;
try {
val = m.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
}
if (val != null && m.getReturnType() == Date.class) {
Date d = (Date) val;
params.add(new java.sql.Date(d.getTime()));
} else {
params.add(val);
}
}
}
}
sql.deleteCharAt(sql.length() - 1);// 删除多余的,
values.deleteCharAt(values.length() - 1);// 删除多余的,
sql.append(")");
sql.append(" values (" + values + ")");
int row = executeUpdate(sql.toString(), params.toArray());
return row > 0 ? true : false;
}
public static boolean edit(Object obj) {
Class<?> cla = obj.getClass();
StringBuffer sql = new StringBuffer();
sql.append("update ");
sql.append(cla.getName().substring(cla.getName().lastIndexOf(".") + 1));
sql.append(" set ");
List<Object> params = new ArrayList<Object>();
Method[] methods = cla.getDeclaredMethods();
for (Method m : methods) {
String name = m.getName();
if (name.startsWith("get")) {
// 获取属性名(列名)
String colName = name.substring(3);
// 拼占位符,id直接为seq.nextval
if (!colName.equalsIgnoreCase("id")) {
sql.append(colName + "=?,");
Object val = null;
try {
val = m.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
}
if (val != null && m.getReturnType() == Date.class) {
Date d = (Date) val;
params.add(new java.sql.Date(d.getTime()));
} else {
params.add(val);
}
}
}
}
sql.deleteCharAt(sql.length() - 1);// 删除多余的,
sql.append(" where id=?");
Method m;
try {
m = cla.getDeclaredMethod("getId");
params.add(m.invoke(obj));
} catch (Exception e) {
e.printStackTrace();
}
int row = executeUpdate(sql.toString(), params.toArray());
return row > 0 ? true : false;
}
public static boolean delete(Class<?> cla, int id) {
StringBuffer sql = new StringBuffer();
sql.append("delete from ");
sql.append(cla.getName().substring(cla.getName().lastIndexOf(".") + 1));
sql.append(" where id=?");
int row = executeUpdate(sql.toString(), id);
return row > 0 ? true : false;
}
// 根据主键获取对象
public static <T> T getObject(Class<?> cla, int id) {
String sql = "select * from "
+ cla.getName().substring(cla.getName().lastIndexOf(".") + 1)
+ " where id=?";
List<T> list = OrmUtil.<T> executeQuery(cla, sql, id);
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
}
public static <T> List<T> query(Class<?> cla, String order, String where,
Object... params) {
StringBuffer sql = new StringBuffer();
sql.append("select * from ");
sql.append(cla.getName().substring(cla.getName().lastIndexOf(".") + 1));
if (order != null && !order.trim().equals("")) {
sql.append(" order by " + order);
} else {
sql.append(" order by id");
}
if (where != null && !where.trim().equals("")) {
sql.append(" where " + where);
}
List<T> list = OrmUtil.<T> executeQuery(cla, sql.toString(), params);
return list;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
aaa.zip_oracle
共106个文件
class:60个
java:35个
prefs:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 66 浏览量
2022-09-24
21:10:16
上传
评论
收藏 123KB ZIP 举报
温馨提示
一个基于Java和oracle数据库的学生信息管理系统,有三个版本,功能从少到多!
资源推荐
资源详情
资源评论
收起资源包目录
aaa.zip_oracle (106个子文件)
SimpleOrm.class 9KB
OrmUtil.class 9KB
StudentDaoImpl.class 7KB
StudentDaoImpl.class 7KB
StudentDaoImpl.class 7KB
OrmUtil.class 6KB
Test.class 6KB
Test.class 6KB
StudentDaoImpl.class 6KB
StudentDaoImpl.class 6KB
StudentDaoImpl.class 5KB
Test.class 4KB
StudentDaoImpl.class 3KB
DbUtil.class 3KB
DbUtil.class 3KB
DbUtil.class 3KB
Student.class 3KB
DbUtil.class 3KB
DbUtil.class 3KB
StudentDaoImpl.class 3KB
StudentDaoImpl.class 3KB
StudentDaoImpl.class 3KB
Student.class 3KB
StudentDaoImpl.class 2KB
StudentDaoImpl.class 2KB
Student.class 2KB
StudentDaoImpl$1.class 2KB
StudentDaoImpl$2.class 2KB
StudentDaoImpl.class 2KB
Test.class 1KB
StudentDaoImpl$1.class 1KB
StudentDaoImpl$2.class 1KB
StudentDaoImpl$1.class 1KB
StudentDaoImpl$1.class 1KB
StudentDaoImpl$1.class 1KB
StudentDaoImpl$2.class 1KB
StudentDaoImpl$2.class 1KB
StudentDaoImpl$2.class 1KB
StudentDaoImpl$1.class 1KB
StudentDaoImpl$1.class 1KB
StudentDaoImpl$2.class 1KB
StudentDaoImpl$2.class 1KB
StudentDaoImpl$1.class 1KB
StudentDaoImpl$2.class 1KB
StudentDaoImpl$3.class 1KB
StudentDaoImpl$3.class 1KB
StudentDaoImpl$3.class 1KB
StudentDaoImpl$3.class 1KB
StudentDaoImpl$3.class 1KB
StudentDaoImpl$3.class 1KB
LoginScreen.class 1KB
StudentDao.class 465B
StudentDao.class 465B
BaseFactory.class 461B
BaseFactory.class 461B
BaseFactory.class 461B
StudentDao.class 319B
RowMapper.class 186B
RowMapper.class 186B
RowMapper.class 186B
.classpath 366B
.classpath 366B
.classpath 301B
OrmUtil.java 8KB
SimpleOrm.java 8KB
StudentDaoImpl.java 6KB
StudentDaoImpl.java 6KB
StudentDaoImpl.java 6KB
Test.java 5KB
OrmUtil.java 5KB
Test.java 5KB
StudentDaoImpl.java 5KB
StudentDaoImpl.java 5KB
StudentDaoImpl.java 4KB
Test.java 3KB
StudentDaoImpl.java 3KB
Student.java 2KB
StudentDaoImpl.java 2KB
DbUtil.java 2KB
DbUtil.java 2KB
DbUtil.java 2KB
DbUtil.java 2KB
DbUtil.java 2KB
Student.java 2KB
Student.java 2KB
StudentDaoImpl.java 2KB
StudentDaoImpl.java 2KB
StudentDaoImpl.java 2KB
StudentDaoImpl.java 1KB
StudentDaoImpl.java 1KB
LoginScreen.java 580B
Test.java 364B
StudentDao.java 350B
StudentDao.java 350B
StudentDao.java 249B
BaseFactory.java 244B
BaseFactory.java 244B
BaseFactory.java 244B
org.eclipse.jdt.core.prefs 598B
org.eclipse.jdt.core.prefs 598B
共 106 条
- 1
- 2
资源评论
Kinonoyomeo
- 粉丝: 74
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功