Java JDBC封装模式
模仿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的数据库下进行查看的,确实是插入进去了,而查找的时候也会返回我们想要查找的并且符合要求的值。
Java JDBC封装模式的更多相关文章
- java jdbc 封装。。
JDBC工具类...package it.cast.jdbcutils; import java.io.InputStream; import java.sql.Connection; import ...
- Java设计模式—门面模式(带案例分析)
1.门面模式的定义: 门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如下: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式 ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- 彻底理解Java的Future模式
先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材.网上购买厨具比较方便,食材去超市买更放心. 实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材.所以,在主线程里面另起一个子线 ...
- Java多线程Future模式
Java多线程Future模式有些类似于Ajax的异步请求Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 假设服务器的处理某个业务,该业务可以分 ...
- Java Web开发模式
一 Java Web开发模式的变迁 1 最初的Java web服务器端编程技术是Servlet,利用Servlet就可以开发出一个Web应用程序. 2 为了解决Servlet缺陷,SUN推出了JSP技 ...
- Java JDBC的基础知识(二)
在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...
- 彻底理解Java的feature模式
先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材.网上购买厨具比较方便,食材去超市买更放心. 实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材.所以,在主线程里面另起一个子线 ...
- 3.java设计模式-建造者模式
Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...
随机推荐
- WMI远程启动软件(某个应用程序)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.M ...
- aways on 配置部署(二)——配置域
前一篇中我们基本了解了配置aways on的三个步骤,本篇就具体讲解如何配置域. DNS的配置 上篇可以看到三台服务器的ip地址,网关,DNS等配置,其中sqlDNS服务器的dns为自己的ip地址,s ...
- rhel7 启动网络
我装的是rhel7 服务器版本(在virtualbox虚拟机里),安装后默认不启动网络,另外还有很多命令也不能用,比如ifconfig, yum-config-manager等. 先解决网络问题: 切 ...
- Android POJO 转换器 —> RapidOOO
博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml 原文链接:https://blog.wang ...
- Go 语言多维数组
Go 语言支持多维数组,以下为常用的多维数组声明方式: var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type 以下实例声明了三维的整型数组: ...
- PHP MySQL 创建数据表
PHP 创建 MySQL 表 一个数据表有一个唯一名称,并有行和列组成. 使用 MySQLi 和 PDO 创建 MySQL 表 CREATE TABLE 语句用于创建 MySQL 表. 我们将创建一个 ...
- Python pandas.io.data 模块迁移
这段时间用pandas做数据分析, import pandas.io.data as web 然后得到下面的错误提示 "The pandas.io.data module is moved ...
- RDO Stack: Failed connect to server
Issue: When you create an instance, but cannot connect to the VNC Server because of the error messag ...
- sublime 安装package control
import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d15146761 ...
- iOS图形手势识别框架SGGestureRecognizer
简介 苹果官方为我们提供了简单手势的识别器,但对于图形手势,例如五角星.三角形等的识别,就需要自己实现了.通过识别这些手势,可以去执行特定的操作,或是输入公式.释放魔法等,可以为App增光添彩. 下载 ...