Java JDBC封装模式

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 模仿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的数据库下进行查看的,确实是插入进去了,而查找的时候也会返回我们想要查找的并且符合要求的值。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
37 8
|
2月前
|
Java 数据库连接 API
JDBC:Java数据库连接的“黑科技”大揭秘
JDBC:Java数据库连接的“黑科技”大揭秘
33 7
|
2月前
|
SQL Java 数据库连接
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
32 3
|
25天前
|
安全 Java 编译器
Java的封装详解
封装和多态是面向对象编程(OOP)的重要概念。封装通过私有属性和公共方法实现数据隐藏和保护,使类的内部细节对外部不可见;多态则通过方法重载和重写实现同一方法在不同对象上的不同表现形式,增强了代码的灵活性和可维护性。两者结合使用,可以使Java程序更加安全、灵活且易于维护。
|
25天前
|
Java
Java的封装详解
封装是Java中实现数据隐藏和保护的核心机制。它通过将对象的状态和行为结合并限制外部直接访问,确保类的内部细节对外不可见,仅能通过公共方法访问和修改对象状态。封装带来了数据隐藏、提高代码可维护性和增强安全性等好处。在Java中,封装主要通过将属性设为私有并提供getter和setter方法来实现。这种方式不仅保护了数据完整性,还允许在修改类内部实现时不影响外部代码,从而提升程序的健壮性和可读性。
|
8天前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
22天前
|
SQL Java 编译器
Java——类与对象(封装)
封装是面向对象编程中的概念,指将数据(属性)和相关操作(方法)组合成独立单元(类),使外部无法直接访问对象的内部状态,只能通过提供的方法进行交互,从而保护数据安全。例如,手机将各种组件封装起来,只暴露必要的接口供外部使用。实现封装时,使用`private`关键字修饰成员变量,并提供`get`和`set`方法进行访问和修改。此外,介绍了包的概念、导入包的方式及其注意事项,以及`static`关键字的使用,包括静态变量和方法的初始化与代码块的加载顺序。
25 10
Java——类与对象(封装)
|
9天前
|
安全 Java 数据安全/隐私保护
Java 封装怎么理解
封装是Java中的一种重要机制,它将对象的状态(数据)和行为(方法)打包在一起并控制外部访问权限,以保护数据不被随意修改。封装的主要目的包括数据保护、接口设计和增强模块性。通过使用`private`、`protected`及`public`等访问控制修饰符,结合getter和setter方法,可以有效隐藏对象内部实现细节。下面是一个简单的`BankAccount`类示例,展示了如何通过封装保护类的内部状态,确保数据安全和一致性,简化类的使用。理解封装有助于编写高质量代码和设计优秀程序架构。
|
9天前
|
Java 数据安全/隐私保护
Java 封装详解
在 Java 中,封装是面向对象编程的关键特性,通过将对象的状态(数据)和行为(方法)结合并利用访问控制保护数据,防止外部随意访问和修改。主要特点包括访问控制(如 `private` 和 `protected`)、数据隐藏及方法暴露(如 getter 和 setter)。封装的优点在于保护数据、隐藏实现细节、易于维护以及提高代码可读性。下面是一个简单的 `Person` 类封装示例,展示了如何通过 getter 和 setter 控制对类内部状态的访问,并进行合法性检查。总结而言,封装有助于构建清晰、易用且可维护的代码结构,是编写高质量 Java 程序的重要原则。
|
8天前
|
安全 Java 开发者
Java修饰符与封装:理解访问权限、行为控制与数据隐藏的重要性
Java中的修饰符和封装概念是构建健壯、易维护和扩展的Java应用程序的基石。通过合理利用访问权限修饰符和非访问修饰符,开发者能够设计出更加安全、灵活且高效的代码结构。封装不仅是面向对象编程的核心原则之一,也是提高软件项目质量和可维护性的关键策略。
11 1
下一篇
无影云桌面