Java JDBC封装模式

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法下面使用到的两个bean。首先是userbeanpackage bean;public class user { String username; String pass...

模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法


下面使用到的两个bean。首先是userbean

package bean;

public class user {

    String username;
    String password;

    public user(){
        username=null;
        password=null;
    }

    @Override
    public String toString() {
        return "user [username=" + username + ", password=" + password + "]";
    }
    public user(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

接下来是itemsbean的代码,都很简单

package bean;

public class Items {

    String title;
    String contents;
    public Items(){
        title=null;
        contents=null;
    }
    public Items(String title, String contents) {
        super();
        this.title = title;
        this.contents = contents;
    }
    @Override
    public String toString() {
        return "Items [title=" + title + ", contents=" + contents + "]";
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContents() {
        return contents;
    }
    public void setContents(String contents) {
        this.contents = contents;
    }

}

接下来就是重头戏了,也即是我们的DBHelper类,主要的思想是其中对bean的操作,还有是如何将数据集进行封装的

package DBUtils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import bean.Items;
import bean.user;


/**
 * 易错点:
 * 需要注意的是items表中有一项在数据库中为content,而bean里设置出错,设置成了contents,尤其应该注意;
 * @author Summer
 *
 */
public class Dbutiler {

    static String DRIVER="com.mysql.jdbc.Driver";
    static String CONNECTIONURL="jdbc:mysql://127.0.0.1:3306/summer";
    static String ROOT="root";
    static String PASSWORD="mysql";
    Connection conn=null;
    PreparedStatement ps=null;
    ResultSet result=null;

    public Dbutiler(){

        try {
            Class.forName(DRIVER);
            conn=(Connection) DriverManager.getConnection(CONNECTIONURL, ROOT, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        if(conn!=null){
            System.out.println("Connected!");
        }
    }


    //下面是获得用户信息数据集
    public List<user> getUserInfo(String sql){
        user tempUser=null;
        List<user> userList=new ArrayList<user>();
        try {
            ps=conn.prepareStatement(sql);
            result=ps.executeQuery();
            while(result.next()){
                tempUser=new user();
                String userName=result.getString("username");
                String passWord=result.getString("password");
                tempUser.setUsername(userName);
                tempUser.setPassword(passWord);
                userList.add(tempUser);

                //感悟就是,每次invoke之后,都要及时的进行置空,否则可能得不到新值
                tempUser=null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                ps=null;
            }
            if(result!=null){
                try {
                    result.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                result=null;
            }
        }
        return userList;

    }

    //下面是插入用户的方法
    public boolean addUser(user userInfo){
        int flag=0;
        try {
            String sql="insert into user(username,password) values(?,?);";
            ps=(PreparedStatement) conn.prepareStatement(sql);
            ps.setString(1,userInfo.getUsername());
            ps.setString(2, userInfo.getPassword());
            flag=ps.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                ps=null;
            }
            if(result!=null){
                try {
                    result.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                result=null;
            }
        }
        if(flag!=0){
            return true;
        }else{
            return false;
        }
    }


    public List<Items> getItemsInfo(String sql){
        Items tempItem=null;
        List<Items> ItemsInfo=new ArrayList<Items>();
        try {
            ps=conn.prepareStatement(sql);
            result=ps.executeQuery();
            while(result.next()){
                tempItem=new Items();
                String Title=result.getString("title");
                String Contents=result.getString("content");
                tempItem.setTitle(Title);
                tempItem.setContents(Contents);
                ItemsInfo.add(tempItem);

                //感悟就是,每次invoke之后,都要及时的进行置空,否则可能得不到新值
                tempItem=null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                ps=null;
            }
            if(result!=null){
                try {
                    result.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                result=null;
            }
        }
        return ItemsInfo;

    }

    //下面是添加数据信息的方法
        public boolean addOneItem(Items item){
            int flag=0;
            try {
                String sql="insert into items(title,content) values(?,?);";
                ps=(PreparedStatement) conn.prepareStatement(sql);
                ps.setString(1,item.getTitle());
                ps.setString(2, item.getContents());
                flag=ps.executeUpdate();

            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                if(ps!=null){
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                    ps=null;
                }
                if(result!=null){
                    try {
                        result.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                    result=null;
                }
            }
            if(flag!=0){
                return true;
            }else{
                return false;
            }
        }


    public static void main(String []args){
        Dbutiler helper=new Dbutiler();
        //对存储的用户信息进行测试
        user one=new user("Rui","Tiger");
        helper.addUser(one);
        List<user> res=new ArrayList<user>();
        res=helper.getUserInfo("select * from user;");
        for(int i=0;i<res.size();i++){
            System.out.println(res.get(i).toString());
        }


        //下面是对存储的内容的测试
        Items item=new Items("Graphics2D","http://bbs.csdn.net");
        helper.addOneItem(item);
        List<Items>itemsList=new ArrayList<Items>();
        itemsList=helper.getItemsInfo("select * from items;");
        if(itemsList.isEmpty()){
            System.out.println("This resultSet is empty!");
        }else{
            for(int i=0;i<itemsList.size();i++){
                System.out.println(itemsList.get(i).toString());
            }
        }

    }

}

相应的我们运行完程序之后,是可以在MySQL的数据库下进行查看的,确实是插入进去了,而查找的时候也会返回我们想要查找的并且符合要求的值。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL Java 中间件
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
|
1月前
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
1月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
|
2月前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
2月前
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
|
3月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
280 15
|
3月前
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
359 7
|
3月前
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
74 5
|
4月前
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
765 31
|
7月前
|
安全 Java 编译器
Java的封装详解
封装和多态是面向对象编程(OOP)的重要概念。封装通过私有属性和公共方法实现数据隐藏和保护,使类的内部细节对外部不可见;多态则通过方法重载和重写实现同一方法在不同对象上的不同表现形式,增强了代码的灵活性和可维护性。两者结合使用,可以使Java程序更加安全、灵活且易于维护。
293 82

热门文章

最新文章

下一篇
oss创建bucket