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 ...
随机推荐
- JVM内部原理
这篇文章详细描述了Java虚拟机的内在结构.下面这张图来自<The Java Virtual Machine Specification Java SE 7 Edition>,它展示了一个 ...
- Java 并发编程——Executor框架和线程池原理
Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务 ...
- 关于Linux下软件包aptitude的相关操作
aptitude+回车 - 进入aptitude操作界面,可以对预览查看各种软件包 aptitude show package_name - 列出与XXX相关的软件包信息,但是并不能看到该软件包所安装 ...
- AC的故事大结局山寨版(下)(最大流)
福建工程学院第十二届ACM程序设计大赛真题 AC的故事大结局山寨版(下) TimeLimit:2000MS MemoryLimit:128MB 64-bit integer IO format:%l ...
- 【移动开发】targetSdkVersion的作用
在AndroidMenifest.xml中,常常会有下面的语句: <uses-sdk android:minSdkVersion="4" android:targetSdkV ...
- 计算机网络之万维网WWW
万维网 WWW (World Wide Web)并非某种特殊的计算机网络,而是一个大规模的.联机式的信息储藏所. 万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰 ...
- Weblogic 12c 集群环境搭建
本文是在windows7操作系统下配置的,jdk版本1.7 ,weblogic版本12.1.3.0.0. 搭建集群前的规划 其中AdminServer是总控制端,server1.server2.ser ...
- Android Multimedia框架总结(二十二)MediaCodec中C++中创建到start过程及状态变换
上一章介绍MediaCodec中创建到start过程(到jni部分),从今天开始,将深入源码中看看其c++过程,看下Agenda如下: mediacodec.h CreateByType initMe ...
- Ajax PHP JavaScript MySQL实现简易的无刷新在线聊天室
思路 消息显示区 发消息 板块 消息显示 消息发送 优化 显示非重复性的数据 优化显示 加上滚动条 每次都显示最新消息 完整代码 前端代码 数据库表结构 服务器端代码 总结与展望 总结 展望 为更好的 ...
- Android Studio中Git的配置及协同开发
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51595096 本文出自:[openXu的博客] 目录: 一 Android Stutio配置 ...