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 ...
随机推荐
- 模仿天猫实战【SSM版】——项目起步
前言:现在自己的学习似乎遇到了瓶颈,感觉学习了 SSM 之后有一些迷茫,不知道接下来该往哪里去努力了,我觉得这是个很不好的状态,为了度过这段时期,我准备把天猫模仿下来(给自己找点事做)之后开始去巩固 ...
- List Set Map比较
List按对象进入的顺序保存对象,不做排序或编辑操作. Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序–否则应该使用List). Map同 ...
- Win10 下Cmake编译配置 Opencv3.1 + Cuda7.5 + VS2013
折腾了三天终于配置成功了,在此写下编译配置的全部步骤和遇到的很多坑. 整体介绍: OpenCV 中 CUDA 实现的函数还不是太多,使用前要在OpenCV的官网上确认以下你想要的功能是否已经实现,否则 ...
- Java面试18|关于进程、线程与协程
1.IPC(Inter-Process Communication,进程间通信)与线程通信的几种方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进 ...
- Linux下查看进程打开的文件句柄数
---查看系统默认的最大文件句柄数,系统默认是1024 # ulimit -n ----查看当前进程打开了多少句柄数 # lsof -n|awk '{print $2}'|sort|uniq -c|s ...
- MacOS下Rails+Nginx+SSL环境的搭建(上)
这里把主要的步骤写下来,反正我是走了不少弯路,希望由此需求的朋友们别再走类似的弯路.虽说环境是在MacOS下搭建,但是基本上和linux下的很相像,大家可以举一反三. 一.安装Rails 这个是最简单 ...
- Android中典型的ROOT原理(5)
ROOT的作用 Customization 用户的个人定制,如删除一些预安装,定制开机动画等. 特权操作 所有需要特权操作的基本都是要通过ROOT,这也是ROOT的初衷. ROOT的第一步:寻找漏洞并 ...
- Docker新手入门:基本用法
Docker新手入门:基本用法 1.Docker简介 1.1 第一本Docker书 工作中不断碰到Docker,今天终于算是正式开始学习了.在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少 ...
- windows 消除文件名中的快捷方式
1)运行regedit进入注册表.2)依次打开:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer3)右侧框图,把 ...
- CSDN 支持Markdown写文章了!
开源中国等其他技术博客很早就支持markdown格式写文章了,今天发现csdn竟然也可以了,不仅支持而且可以在线预览,本地导入导出,远程导入. 这些对于程序员写东西都非常好用,不用总是花时间来排版了. ...