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 ...
随机推荐
- tf.nn.conv2d 和 tf.nn.max_pool 中 padding 分别为 'VALID' 和 'SAME' 的直觉上的经验和测试代码
这个地方一开始是迷糊的,写代码做比较分析,总结出直觉上的经验. 某人若想看精准的解释,移步这个网址(http://blog.csdn.net/fireflychh/article/details/73 ...
- 我在 Ubuntu 下使用 Sublime 编写 python 代码时遇到并解决的问题
Ubuntu 下 Sublime 无法输入中文 解决方法如下: sudo apt-get update && sudo apt-get upgrade 克隆项目到本地 : git cl ...
- js判断奇偶数实现隐藏显示功能 与css立体按钮
hello! 好久不见了 ,今天也没准备什么技术,知识想和大家就见个面,一个js判断奇数偶数来实现css样式 ,感觉最大的用途就是页面的导航.就这么一个小小的技术. 劳动快乐 当!当!当! ...
- PHP使用prepare(),insert数据时要注意的一点!!!
今天看了PHP防SQL注入,使用预处理prepare,但是我insert数据时,总是插不进去,但是select却可以,弄了很久终于知道原来问题在这里,先上代码 <?php header('con ...
- python中删除某个元素的3种方法
python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> st ...
- Docker 数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 卷会一直存在,直到没有容 ...
- 【机器学习】从SVM到SVR
注:最近在工作中,高频率的接触到了SVM模型,而且还有使用SVM模型做回归的情况,即SVR.另外考虑到自己从第一次知道这个模型到现在也差不多两年时间了,从最开始的腾云驾雾到现在有了一点直观的认识,花费 ...
- Mongo Index
摘要 mongo 的索引非常强大,和关系型数据库索引没什么区别.这里主要介绍本人在mongo索引上的犯的错. 索引种类 1.单字段索引 2.复合索引 多个字段索引 如{name:1,address:1 ...
- NLP系列(5)_从朴素贝叶斯到N-gram语言模型
作者: 龙心尘 && 寒小阳 时间:2016年2月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50646528 ...
- 安卓高级2 Volley框架的使用案例
初始化类: MyApp.java package qianfeng.com.day37_volley_pull.app; import android.app.Application; import ...