`
wsc830719
  • 浏览: 166883 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

自己做的仿照我的智囊团的小项目,适合初级的Java学习者

阅读更多

前段时间无聊写了个小练习,现在工作真难找呀!

本练习没什么新技术,就是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游戏.zip

    用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载使用。用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载使用。用java写的项目,适合初学者学习,在这里免费分享给大家,欢迎下载...

    仿照知乎做的一个Java web项目

    【标题】"仿照知乎做的一个Java web项目"与【描述】中的"python项目"存在不一致,这可能是因为信息提供有误。但从标题来看,我们可以聚焦于Java Web项目的相关知识点。 Java Web项目通常指的是使用Java语言开发的、...

    Java 游戏服务器 仿照网狐内核编写.zip

    Java 游戏服务器 仿照网狐内核编写.zipJava 游戏服务器 仿照网狐内核编写.zip Java 游戏服务器 仿照网狐内核编写.zipJava 游戏服务器 仿照网狐内核编写.zip Java 游戏服务器 仿照网狐内核编写.zipJava 游戏服务器 ...

    仿照今日头条的主页实现的java web项目

    仿照今日头条的主页toutiao.com做的一个Java web项目。使用SpringBoot+Mybatis+velocity开发。开发工具和Java语言介绍 内容包括: 开发工具和Java语言 Spring入门,模板语法和渲染 数据库交互iBatis集成 用户注册...

    基于javaweb的仿照百度网盘做的小型云盘系统 .zip

    【标题】"基于javaweb的仿照百度网盘做的小型云盘系统"是一个使用Java Web技术实现的项目,旨在模仿百度网盘的功能,提供个人或小团队的在线存储服务。这个系统可能包括了文件上传、下载、分享、管理等功能,用户...

    基于javaweb的仿照百度网盘的小型云盘系统源码+sql数据库.zip

    基于javaweb的仿照百度网盘的小型云盘系统源码+sql数据库.zip基于javaweb的仿照百度网盘的小型云盘系统源码+sql数据库.zip基于javaweb的仿照百度网盘的小型云盘系统源码+sql数据库.zip基于javaweb的仿照百度网盘的...

    java基础练习项目-仿照雷蛇商城.zip

    【标题】"java基础练习项目-仿照雷蛇商城.zip"是一个Java编程的学习资源,旨在帮助初学者通过实践提升Java基础知识。这个项目模仿了知名外设品牌雷蛇的在线商城系统,涵盖了Java Web开发的基本元素,如前端界面、...

    仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。

    仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。 适合学习/练手、毕业...

    基于javaweb的仿照百度网盘的小型云盘系统

    【基于javaweb的仿照百度网盘的小型云盘系统】是一个利用Java Web技术开发的个人云存储应用,旨在模仿百度网盘的功能和用户体验。这个项目的核心目标是提供一个安全、便捷的数据存储和分享平台,让用户能够在互联网...

    基于java基础的练习项目-仿照雷蛇商城

    【作品名称】:基于java基础的练习项目-仿照雷蛇商城 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:根据系统需求...

    仿照Java的mall项目.用Go重写接口.zip

    【标题】"仿照Java的mall项目.用Go重写接口.zip" 提供了一个实践性的IT项目,旨在通过使用Go语言重新实现一个基于Java的购物中心(Mall)系统的API接口。这个项目对于学习Go语言、分布式系统设计以及理解Java与Go在...

    基于Java的天天酷跑小游戏.zip

    【标题】"基于Java的天天酷跑小游戏.zip" 指的是一款利用Java编程语言开发的仿照"天天酷跑"的小游戏。在Java中,我们可以利用Java Swing或JavaFX库来创建图形用户界面(GUI),构建游戏场景,并通过Java的多线程技术...

    基于javaweb的仿照百度网盘的小型云盘系统源码+数据库

    基于javaweb的仿照百度网盘的小型云盘系统源码+数据库,本系统是一个基于javaweb的仿照百度网盘做的小型云盘系统,前端使用bootstrap框架构建,后台未使用框架,使用的是最基本的servlet实现。 基于javaweb的仿照...

    java仿照MSN做的聊天系统源代码

    Java仿照MSN做的聊天系统源代码是一套基于Java编程语言实现的即时通讯软件,它旨在模仿MSN(Microsoft Network)的功能和界面,为用户提供一个类似MSN的聊天体验。这个项目不仅对于学习Java编程、网络通信以及GUI...

    仿照小米商城做的java web购物网站.zip

    【标题】:“仿照小米商城做的java web购物网站”是一个基于Java Web技术开发的电子商务平台,旨在模拟小米商城的功能和用户体验。这个项目可能是为了教学、实践或是个人技能提升而创建的,展示了开发者对Java Web...

    仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。.zip

    仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。 软件开发设计:应用...

    JAVA记事本项目文档

    JAVA记事本项目是一个仿照Windows操作系统记事本工具的程序,旨在提供基本的文本编辑功能。这个项目的主要目标是创建一个用户友好的界面,包含“文件”、“编辑”和“关于”三个主要菜单,每个菜单下又包含了多个子...

Global site tag (gtag.js) - Google Analytics