java 使用策略模式操作JDBC数据库

网友投稿 253 2023-04-18


java 使用策略模式操作JDBC数据库

java 使用策略模式操作JDBC数据库

1:构造一个操作数据库的工具类,可以获得连接和释放连接

public class DBUtil {

private static Connection conn = null;

static { //静态初始块

try {

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "064319"); //初始化获取连接

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 释放连接

* @param rs

* @param psmt

* @param conn

* @throws SQLException

*/

public static void closeAll(ResultSet rs, PreparedStatement psmt, Connection conn) throws SQLException {

if(rs != null) {

rs.close();

}

if(psmt != null) {

psmt.close();

}

if(conn != null) {

conn.close();

}

}

/**

* 获取连接

* @return

*/

public static Connection getConnection() {

return conn;

}

/**

* 根据表的名字来获得表的列信息

* @param tableName

*/

public static void getTableColumnInfoByTableName(String tableName) {

Connection conn = getConnection();

ResultSet rs = null;

PreparedStatement psmt = null;

String sql = "select * from " + tableName;

try {

psmt = conn.prepareStatement(sql);

rs = psmt.executeQuery();

ResultSetMetaData resultSetMetaData = rs.getMetaData();

for(int i = 1; i<= resultSetMetaData.getColumnCount(); i++) {

System.out.println(resultSetMetaData.getColumnName(i));

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

try {

closeAll(rs, psmt, conn);

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

* 根据表的名字来获得表的信息

* @param tableName

*/

public static void getTableInfoByTableName(String tableName) {

Connection conn = getConnection();

PreparedStatement psmt = null;

ResultSet rs = null;

String sql = "select * from " + tableName;

try {

psmt = conn.prepareStatement(sql);

rs = psmt.executeQuery();

while(rs.next()) {

ResultSetMetaData resultSetMetaData = rs.getMetaData();

for(int i = 1; i<= resultSetMetaData.getColumnCount(); i++) {

if(i < resultSetMetaData.getColumnCount()) {

System.out.print(rs.getObject(resultSetMetaData.getColumnName(i)) + ", ");

} else {

System.out.print(rs.getObject(resultSetMetaData.getColumnName(i)));

}

}

System.out.println();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

try {

closeAll(rs, psmt, conn);

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

2:构造一个操作数据库的BaseDao类

public class BaseDao {

/**

* 根据一些参数来保存相应的对象

* @param sql 要执行的sql语句

* @param params 为sql语句中相应的参数赋值

* @return

*/

protected boolean saveOrUpdate(String sql, Object[] params) {

Connection conn = null;

PreparedStatement psmt = null;

boolean flag = false;

conn = DBUtil.getConnection();

if(conn != null) {

try {

psmt = conn.prepareStatement(sql);

for(int i = 1; i <= params.length; i++) {

psmt.setObject(i, params[i-1]);

}

if(psmt.executeUpdate() > 0) {

flag = true;

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

try {

DBUtil.closeAll(null, psmt, conn);

} catch (SQLException e) {

e.printStackTrace();

}

}

}

return flag;

}

/**

* 根据一定的参数获得某个具体的对象

* @param sql 要执行的sql语句

* @param params 为sql语句中相应的参数赋值

* @return

*/

public Object queryForObject(String sql, Object[] params, RowMapForObject rowMapForObject) {

Connection conn = null;

PreparedStatement psmt = null;

conn = DBUtil.getConnection();

Object obj = null;

ResultSet rs = null;

if(conn != null) {

try {

psmt = conn.prepareStatement(sql);

if(params != null && params.length > 0) {

for(int i = 1; i <= params.length; i++) {

psmt.setObject(i, params[i - 1]);

}

}

rs = psmt.executeQuery();

obj = rowMapForObject.rowMapForObject(rs);

} catch (SQLException e) {

e.printStackTrace();

} finally {

try {

DBUtil.closeAll(null, psmt, conn);

} catch (SQLException e) {

e.printStackTrace();

}

}

}

return obj;

}

/**

* 根据相应的参数获得查询的结果集

* @param sql

* @param params

* @return

*/

public List queryForList(String sql, Object[] params, RowMapForList rowMapForList) {

Connection conn = null;

PreparedStatement psmt = null;

conn = DBUtil.getConnection();

List list = null;

ResultSet rs = null;

if(conn != null) {

try {

psmt = conn.prepareStatement(sql);

if(params != null && params.length > 0) {

for(int i = 1; i <= params.length; i++) {

psmt.setObject(i, params[i - 1]);

}

}

rs = psmt.executeQuery(sql);

list = new ArrayList();

http:// list = rowMapForList.rowMapForList(rs);

} catch (SQLException e) {

e.printStackTrace();

} finally {

try {

DBUtil.closeAll(null, psmt, conn);

} catch (SQLException e) {

e.printStackTrace();

}

}

}

return list;

}

}

3:新建一个StudentDao类,该类继承自BaseDao,实现对Student的管理

public class StudentDao extends BaseDao {

/**

* 保存一个Student的信息

*/

public boolean saveStudent(Student student) {

String sql = "insert into t_student(name, age) values(?, ?)";

Object[] params = new Object[]{student.getName(), student.getAge()};

return super.saveOrUpdate(sql, params);

}

/**

* 根据id获得一个Student的信息

* @param id

* @return

*/

public Student getStudentById(long id) {

String sql = "select * from t_student where id=?";

Object[] params = new Object[]{id};

return (Student)super.queryForObject(sql, params, new RowMapForObject() {

public Object rowMapForObject(ResultSet rs) {

Student student = null;

try {

if(rs != null && rs.next()) {

student = new Student();

student.setAge(rs.getInt(Student.AGE));

student.setId(rs.getLong(Student.ID));

student.setName(rs.getString(Student.NAME));

}

} catch (SQLException e) {

e.printStackTrace();

}

return student;

}

});

}

/**

* 获得所有Student的信息

* @return

*/

public List getStudentAll() {

String sql = "select * from t_student";

List list = super.queryForList(sql, null, new RowMapForList() {

@Override

public List rowMapForList(ResultSet rs) {

List list = null;

try {

if(rs != null) {

list = new ArrayList();

while(rs.next()) {

Student student = new Student();

student.setId(rs.getLong("id"));

student.setAge(rs.getInt("age"));

student.setName(rs.getString("name"));

list.add(student);

}

}

} catch(SQLException e) {

e.printStackTrace();

}

return list;

}

});

return list;

}

}

如有疑问请留言或者到本站社区交流讨论,大家共同进步,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


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

上一篇:mock工具转发功能(mock数据的工具)
下一篇:Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
相关文章

 发表评论

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