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 ...
随机推荐
- 2. struct A 和 typedef struct A
2. struct A 和 typedef struct A 2.1 struct A struct A{}定义一个名为struct A的结构体. 下例定义了struct A同时,声明了两个变量(注意 ...
- iOS Push详述,了解一下?
WeTest 导读 本文主要对iOS Push的在线push.本地push及离线(远程)push进行梳理,介绍了相关逻辑,测试时要注意的要点以及相关工具.小小的Push背后蕴藏着大大的逻辑! Push ...
- Hive中yyyymmdd和yyyy-mm-dd日期之间的切换
以2017-12-05和20171205相互转换为例说明 方法1: from_unixtime+ unix_timestamp --20171205转成2017-12-05 ','yyyymmdd') ...
- js强大的日期格式化函数,不仅可以格式化日期,还可以查询星期,一年中第几天等
js强大的日期格式化,timestamp支持10位或13位的时间戳,或是时间字符串,同时支持android ios的处理,不只是日期的格式化还有其它方法,比如获 获取某月有多少天 .获取某个日期在这一 ...
- SSA-一种适合中小型企业的新型服务架构
写在前面 好久好久没写了,最近刚换了工作,花了几天的时候熟悉了项目,接着就是功能的完善,随后就是对新项目的基础架构搭建. 看过Po主博客的都知道,Po主一直致力于推广.Net Core在微服务架构上的 ...
- 01_Struts2概述及环境搭建
1.Struts2概述: Struts2是一个用来开发MVC应用程序的框架. Struts2提供了web应用程序开发过程中一些常见问题的解决方案; 对用户输入的数据进行合法性验证 统一的布局 可扩展性 ...
- Sybase identity 字段
1.identity Oracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity 2 ...
- Oracle性能优化-读懂执行计划
Oracle的执行计划 得到执行计划的方式 Autotrace例子 使用Explain explain plan set STATEMENT_ID='testplan' for select * fr ...
- Common-used commands in Docker
1. Start running a image in background mode docker run -it -d <image>:<tag> e.g. docker ...
- RxJava(十)switchIfEmpty操作符实现Android检查本地缓存逻辑判断
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52585912 本文出自:[余志强的博客] switchIfEmpty ...