前段时间无聊写了个小练习,现在工作真难找呀!
本练习没什么新技术,就是jsp+servlet+JSTL+MySQL的简单应用而已。
大以前的时候,看过尚学堂的一个论坛视频,感觉数据库访问封装的不好,毕竟这个视频有好几年了。主要我就发现,
方法每调用一次,都需要打开数据库连接,使用完后关闭数据库连接,而且异常处理的早,我觉得应该适当抛出,到
接近前端再捕获,不知道这样好不好?下面是一些代码示例:
看见封装EntityManager有使用ThreadLocal的,我也照着写了下封装:
1 数据库的访问封装类DBUtil.java:
package com.question.util;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
*
* @author w
*/
public class DBUtil {
private static final ThreadLocal<Connection> threadLocal;
private static final ThreadLocal<Boolean> autoCommit;
private static Properties p = null;
static {
threadLocal = new ThreadLocal<Connection>();
autoCommit = new ThreadLocal<Boolean>();
}
private static Properties getProperties() {
if (p == null) {
InputStream in = PropertyUtil.newInstance().getClass().getResourceAsStream("datesource.properties");
try {
p = PropertyUtil.get(in);
} catch (FileNotFoundException ex) {
LoggerUtil.error(DBUtil.class, "未能找到数据库配置文件datesource.properties!" + ex);
} catch (IOException ex) {
LoggerUtil.error(DBUtil.class, "找到数据库配置文件,但读取时发生错误!" + ex);
}
}
return p;
}
private static Connection createConnection() throws SQLException {
Connection conn = null;
try {
getProperties();
Class.forName(p.getProperty("driver"));
conn = DriverManager.getConnection(p.getProperty("url"), p.getProperty("username"), p.getProperty("password"));
} catch (ClassNotFoundException ex) {
LoggerUtil.error(DBUtil.class, "找不到数据库驱动程序!" + ex);
}
System.out.println(conn);
return conn;
}
private static Connection getConnection() throws SQLException {
Connection conn = threadLocal.get();
if (conn == null || conn.isClosed()) {
conn = createConnection();
threadLocal.set(conn);
}
return conn;
}
public static void begin() throws SQLException {
autoCommit.set(getConnection().getAutoCommit());
getConnection().setAutoCommit(false);
}
public static void commit() throws SQLException {
getConnection().commit();
getConnection().setAutoCommit(autoCommit.get());
}
public static void rollback() {
try {
getConnection().rollback();
getConnection().setAutoCommit(autoCommit.get());
} catch (SQLException ex) {
LoggerUtil.error(DBUtil.class, "数据库事物回滚失败!" + ex);
}
}
public static Statement getStatement() throws SQLException {
return getConnection().createStatement();
}
public static PreparedStatement prestmt(String sql) throws SQLException {
return getConnection().prepareStatement(sql);
}
public static PreparedStatement prestmt(String sql, int autoGeneratedKeys) throws SQLException {
return getConnection().prepareStatement(sql, autoGeneratedKeys);
}
public static PreparedStatement prestmt(String sql,
int resultSetType, int resultSetConcurrency) throws SQLException {
return getConnection().prepareStatement(sql, resultSetType, resultSetType);
}
public static void close() {
Connection conn = threadLocal.get();
threadLocal.set(null);
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
LoggerUtil.error(DBUtil.class, "数据库连接关闭失败!" + ex);
}
}
}
}
2 简单地使用示例:
package com.question.impl;
import com.question.dao.AdminDao;
import com.question.entity.Admin;
import com.question.util.DBUtil;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @author wangshuochen
*/
public class AdminDaoImpl implements AdminDao {
public void save(Admin admin) throws SQLException {
PreparedStatement pstmt = DBUtil.prestmt("insert into admin(null , ?, ?)");
pstmt.setInt(1, admin.getId());
pstmt.setString(2, admin.getUsername());
pstmt.setString(3, admin.getPassword());
pstmt.executeUpdate();
pstmt.close();
}
public Admin findByName(String username) throws SQLException {
Admin a = new Admin();
PreparedStatement pstmt = DBUtil.prestmt("select * from admin where username = ?");
pstmt.setString(1, username);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
a.setId(rs.getInt("id"));
a.setUsername(rs.getString("username"));
a.setPassword(rs.getString("password"));
}
rs.close();
pstmt.close();
return a;
}
}
其余的就在servlet里调用dao就可以了,然后进行捕获异常,并把适当的异常信息以错误页面的方式显示给客户。
这个项目里面还包括一个简单的生成4个字母的验证码的程序,非常简单,因为字母使用int值就可以生成,代码很少,因此执行很快的。适合小项目要求不高,占用资源少。当然了为了增加安全性,可以扩展下加入数字。
下面是首页预览:前台已经做了大部分,后台只是用户和分类管理部分,可以说,可以继续完成,自己觉得太没水准,不想继续了。想做个大项目,成熟一些的。
还有,本项目基于netbeans6.7.1开发,因为是自己写,netbeans直接能在jsp中提示js、jstl、css等代码,很方便。
如果使用eclipse,可能需要按照项目结构拷贝相应的文件夹。
分享到:
相关推荐
用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载使用。用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载使用。用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载...
【标题】"仿照知乎做的一个Java web项目"与【描述】中的"python项目"存在不一致,这可能是因为信息提供有误。但从标题来看,我们可以聚焦于Java Web项目的相关知识点。 Java Web项目通常指的是使用Java语言开发的、...
Java 游戏服务器 仿照网狐内核编写.zipJava 游戏服务器 仿照网狐内核编写.zip Java 游戏服务器 仿照网狐内核编写.zipJava 游戏服务器 仿照网狐内核编写.zip Java 游戏服务器 仿照网狐内核编写.zipJava 游戏服务器 ...
仿照今日头条的主页toutiao.com做的一个Java web项目。使用SpringBoot+Mybatis+velocity开发。开发工具和Java语言介绍 内容包括: 开发工具和Java语言 Spring入门,模板语法和渲染 数据库交互iBatis集成 用户注册...
【标题】"基于javaweb的仿照百度网盘做的小型云盘系统"是一个使用Java Web技术实现的项目,旨在模仿百度网盘的功能,提供个人或小团队的在线存储服务。这个系统可能包括了文件上传、下载、分享、管理等功能,用户...
基于javaweb的仿照百度网盘的小型云盘系统源码+sql数据库.zip基于javaweb的仿照百度网盘的小型云盘系统源码+sql数据库.zip基于javaweb的仿照百度网盘的小型云盘系统源码+sql数据库.zip基于javaweb的仿照百度网盘的...
【标题】"java基础练习项目-仿照雷蛇商城.zip"是一个Java编程的学习资源,旨在帮助初学者通过实践提升Java基础知识。这个项目模仿了知名外设品牌雷蛇的在线商城系统,涵盖了Java Web开发的基本元素,如前端界面、...
仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。 适合学习/练手、毕业...
【基于javaweb的仿照百度网盘的小型云盘系统】是一个利用Java Web技术开发的个人云存储应用,旨在模仿百度网盘的功能和用户体验。这个项目的核心目标是提供一个安全、便捷的数据存储和分享平台,让用户能够在互联网...
【作品名称】:基于java基础的练习项目-仿照雷蛇商城 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:根据系统需求...
【标题】"仿照Java的mall项目.用Go重写接口.zip" 提供了一个实践性的IT项目,旨在通过使用Go语言重新实现一个基于Java的购物中心(Mall)系统的API接口。这个项目对于学习Go语言、分布式系统设计以及理解Java与Go在...
【标题】"基于Java的天天酷跑小游戏.zip" 指的是一款利用Java编程语言开发的仿照"天天酷跑"的小游戏。在Java中,我们可以利用Java Swing或JavaFX库来创建图形用户界面(GUI),构建游戏场景,并通过Java的多线程技术...
基于javaweb的仿照百度网盘的小型云盘系统源码+数据库,本系统是一个基于javaweb的仿照百度网盘做的小型云盘系统,前端使用bootstrap框架构建,后台未使用框架,使用的是最基本的servlet实现。 基于javaweb的仿照...
Java仿照MSN做的聊天系统源代码是一套基于Java编程语言实现的即时通讯软件,它旨在模仿MSN(Microsoft Network)的功能和界面,为用户提供一个类似MSN的聊天体验。这个项目不仅对于学习Java编程、网络通信以及GUI...
【标题】:“仿照小米商城做的java web购物网站”是一个基于Java Web技术开发的电子商务平台,旨在模拟小米商城的功能和用户体验。这个项目可能是为了教学、实践或是个人技能提升而创建的,展示了开发者对Java Web...
仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。 软件开发设计:应用...
JAVA记事本项目是一个仿照Windows操作系统记事本工具的程序,旨在提供基本的文本编辑功能。这个项目的主要目标是创建一个用户友好的界面,包含“文件”、“编辑”和“关于”三个主要菜单,每个菜单下又包含了多个子...