BaseJDBC和CRUDDAO的写法实例代码

网友投稿 253 2023-04-01


BaseJDBC和CRUDDAO的写法实例代码

我们首先看下BASEJDBC的写法实例:

package com.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import com.mysql.jdbc.Driver;

public class BaseJDBC {

// 表示你要操作的是哪种类型的数据库

private final String DRIVER = "com.mysql.jdbc.Driver";

// 表示你要连接的是哪一台电脑的服务器端口号是多少数据库的名字是什么

private final String URL = "jdbc:mysql://localhost:3306/zzy";//有时这里需要加上字符集

// 登录数据库的用户名

private fihttp://nal String USERNMAE = "root";

// 登录数据库的密码

private final String PASSWORD = "root";

/**

* 注册驱动 获取连接

*

* @return

*/

public Connection getConnection() {

try {

//Driver d=new Driver();

// 注册驱动:反射(是一项很高深的技术)

Class.forName(DRIVER);

// 由连接大管家创建连接对象

return DriverManager.getConnection(URL, USERNMAE, PASSWORD);

} catch (ClassNotFoundException e) {

//e.printStackTrace("数据库的驱动文件没有找到");

} catch (SQLException e) {

//数据库的连接错误

e.printStackTrace();

}

return null;

}

/**

* 关闭连接释放资源

* @param con

* @param st

* @param rt

*/

public void closeAll(Connection con, Statement st, ResultSet rt) {

try {

if (rt != null) {

rt.close();

rt = null;

}

} catch (SQLException e) {

e.printStackTrace();

}

try {

if (st != null) {

st.close();

st = null;

}

} catch (SQLException e) {

e.printStackTrace();

}

try {

if (con != null) {

con.close();

con = null;

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

CRUDDAO 写法代码实例:

package com.dao;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.sql.*;

import java.util.*;

import java.util.Map.Entry;

/**

*

* @author zzy

*

* 2016年12月1日下午1:49:49

*/

public class CRUDDAO extends BaseJDBC {

private Connection con = null;

private PreparedStatement pt = null;

private Statement st = null;

private ResultSet rt = null;

private Class c;

public CRUDDAO() {

}

public CRUDDAO(Class c) {

this.c = c;

}

/**

* 查询操作要改造的地方 第一:参数必须抽象 第二:返回类型必须抽象

*

* @param

* @param

*

* @return Map>

*/

public Map> selectAll(Map m) {

int index = 0;

Map> map = new LinkedHashMap>();

List list = null;

try {

con = super.getConnection();

if (con != null) {

Set> set = m.entrySet();

for (Entry entry : set) {

list = new ArrayList();

pt = con.prepareStatement(entry.getKey());

this.bind(entry.getValue());

rt = pt.executeQuery();

while (rt.next()) {

list.add(this.toBean2());

}

map.put(++index, list);

}

} else {

System.out.println("数据库连接失败");

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

super.closeAll(con, pt, rt);

}

return map;

}

/**

* 将数据库查询到的数据进行封装 封装成实体类之后再返回给调用者

*

* @return

*/

private T toBean() {

T t = null;

try {

t = c.newInstance();

Method[] m = c.getMethods();

ResultSetMetaData rmt = rt.getMetaData();

for (int i = 1, count = rmt.getColumnCount(); i <= count; i++) {

String columName = rmt.getColumnName(i);

columName = "set" + columName.substring(0, 1).toUpperCase()

+ columName.substring(1);

for (int j = 0; j < m.length; j++) {

if (columName.equals(m[j].getName())) {

m[j].invoke(t, rt.getObject(i));

break;

}

}

}

} catch (Exception e) {

e.printSfmnOkctackTrace();

}

return t;

}

private T toBean2() {

T t = null;

try {

// 创建反射类的实例

t = c.newInstance();

// 反射出所有字段

Field[] field = c.getDeclaredFields();

for (Field f : field) {

// 根据反射的字段名得到数据库中的字段值

Object value = rt.getObject(f.getName());

f.setAccessible(true);// 打开私有字段的操作权限

f.set(t, value);// 调用这个字段的公有的set方法封装字段的值

}

} catch (Exception e) {

e.printStackTrace();

}

return t;

}

/**

* 绑定参数

*

* @param obj

*/

private void bind(Object[] obj) {

try {

if (obj != null) {

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

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

}

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 修改操作 进行的事务的控制 所有命令要么同时提交成功 要么同时回滚

*

* @param name

* @param id

* @return

*/

public int[] updateAll(Map map) {

int[] row = new int[map.size()];

int index = 0;

int error = 0;

try {

con = super.getConnection();

if (con != null) {

Set> set = map.entrySet();

// 关闭连接对象的自动提交的功能

con.setAutoCommit(false);

for (Entry entry : set) {

pt = con.prepareStatement(entry.getKey());

this.bind(entry.getValue());

row[index] = pt.executeUpdate();

if (row[index] == 0) {

throw new Exception("修改失败,数据回滚!");

}

index++;

}

} else {

System.out.println("数据库连接失败");

}

} catch (Exception e) {

error++;

e.printStackTrace();

} finally {

if (error > 0) {

try {

// 将前面已经执行的命令回滚

con.rollback();

} catch (SQLException e) {

e.printStackTrace();

}

} else {

try {

// 全部提交

con.commit();

} catch (SQLException e) {

e.printStackTrace();

}

}

super.closeAll(con, st, null);

}

return row;

}

}

总结

以上就是本文关于BaseJDBC和CRUDDAO的写法实例代码的全部内容,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java 中 MD5加密的实例
下一篇:java 中设计模式(装饰设计模式)的实例详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~