java jdbc dao_Java自学-JDBC DAO

基于JDBC设计DAO的实例

DAO=DataAccess Object

数据访问对象

实际上就是运用了ORM中的思路,把数据库相关的操作都封装在这个类里面,其他地方看不到JDBC的代码

步骤 1 : DAO接口

package jdbc;

import java.util.List;

import charactor.Hero;

public interface DAO{

//增加

public void add(Hero hero);

//修改

public void update(Hero hero);

//删除

public void delete(int id);

//获取

public Hero get(int id);

//查询

public List list();

//分页查询

public List list(int start, int count);

}

步骤 2 : HeroDAO

设计类HeroDAO,实现接口DAO

把驱动的初始化放在了构造方法HeroDAO里:

public HeroDAO() {

try {

Class.forName("com.mysql.jdbc.Driver");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

因为驱动初始化只需要执行一次,所以放在这里更合适,其他方法里也不需要写了,代码更简洁

提供一个getConnection方法返回连接

所有的数据库操作都需要事先拿到一个数据库连接Connection,以前的做法每个方法里都会写一个,如果要改动密码,那么每个地方都需要修改。 通过这种方式,只需要修改这一个地方就可以了。 代码变得更容易维护,而且也更加简洁。

package jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

import charactor.Hero;

public class HeroDAO implements DAO{

public HeroDAO() {

try {

Class.forName("com.mysql.jdbc.Driver");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

public Connection getConnection() throws SQLException {

return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root",

"admin");

}

public int getTotal() {

int total = 0;

try (Connection c = getConnection(); Statement s = c.createStatement();) {

String sql = "select count(*) from hero";

ResultSet rs = s.executeQuery(sql);

while (rs.next()) {

total = rs.getInt(1);

}

System.out.println("total:" + total);

} catch (SQLException e) {

e.printStackTrace();

}

return total;

}

public void add(Hero hero) {

String sql = "insert into hero values(null,?,?,?)";

try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {

ps.setString(1, hero.name);

ps.setFloat(2, hero.hp);

ps.setInt(3, hero.damage);

ps.execute();

ResultSet rs = ps.getGeneratedKeys();

if (rs.next()) {

int id = rs.getInt(1);

hero.id = id;

}

} catch (SQLException e) {

e.printStackTrace();

}

}

public void update(Hero hero) {

String sql = "update hero set name= ?, hp = ? , damage = ? where id = ?";

try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {

ps.setString(1, hero.name);

ps.setFloat(2, hero.hp);

ps.setInt(3, hero.damage);

ps.setInt(4, hero.id);

ps.execute();

} catch (SQLException e) {

e.printStackTrace();

}

}

public void delete(int id) {

try (Connection c = getConnection(); Statement s = c.createStatement();) {

String sql = "delete from hero where id = " + id;

s.execute(sql);

} catch (SQLException e) {

e.printStackTrace();

}

}

public Hero get(int id) {

Hero hero = null;

try (Connection c = getConnection(); Statement s = c.createStatement();) {

String sql = "select * from hero where id = " + id;

ResultSet rs = s.executeQuery(sql);

if (rs.next()) {

hero = new Hero();

String name = rs.getString(2);

float hp = rs.getFloat("hp");

int damage = rs.getInt(4);

hero.name = name;

hero.hp = hp;

hero.damage = damage;

hero.id = id;

}

} catch (SQLException e) {

e.printStackTrace();

}

return hero;

}

public List list() {

return list(0, Short.MAX_VALUE);

}

public List list(int start, int count) {

List heros = new ArrayList();

String sql = "select * from hero order by id desc limit ?,? ";

try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {

ps.setInt(1, start);

ps.setInt(2, count);

ResultSet rs = ps.executeQuery();

while (rs.next()) {

Hero hero = new Hero();

int id = rs.getInt(1);

String name = rs.getString(2);

float hp = rs.getFloat("hp");

int damage = rs.getInt(4);

hero.id = id;

hero.name = name;

hero.hp = hp;

hero.damage = damage;

heros.add(hero);

}

} catch (SQLException e) {

e.printStackTrace();

}

return heros;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 井字棋 人机_一个井字棋tictactoe游戏的java实现 | Soo Smart!

这是一个井字棋游戏的java实现。摘录于stackoverflow。游戏规则很简单,只要一方棋子在水平线,垂直线或者对角线任意一条线上排列成功即为获胜。作者原先的代码存在着一些问题:代码如下:一共有几个类: play, player, human, comput…

C++随机数(rand和srand)函数用法详解

C 提供了一组函数以生成和使用随机数字。随机数字就是从一组可能的值中进行随机选择而获得的一个值。该组中的值都有相同的被选中的几率。 随机数字常用于许多不同类型的程序中,以下是一些示例: 计算机游戏通常要使用随机数字来模拟一些随机过程&#x…

STL11-stack容器

#if 1 #include<iostream> #include<stack> using namespace std;void test01() {//初始化stack<int> s1;stack<int> s2(s1);//stack操作s1.push(10);s1.push(20);s1.push(30);s1.push(40);cout << "栈顶元素&#xff1a;" << e…

java犀牛是什么意思_深入浅出Rhino:Java与JS互操作

2011年10月6日&#xff0c;一年一度的JavaOne大会隆重举行。JavaOne2011大会的主题之一介绍针对不同Java平台的产品路线图&#xff0c;这其中包括移动版(ME&#xff0c;Micro Edition)、标准版(SE&#xff0c;Standard Edition)以及企业版(EE&#xff0c;Enterprise Edition)。…

STL12-queue容器

queue容器 队列容器 先进先出 队列只能在一端插入 一端删除 队列不能遍历 不提供迭代器 不支持随机访问 #if 1 #include<iostream> #include<queue> using namespace std; void test01() {queue<int> q; //创建队列queue<int> q2(q);q.push(10);q.pu…

java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...

Super CSV是读取/解析&#xff0c;验证和映射CSV文件到POJO的绝佳选择&#xff01;我们(Super CSV团队)刚刚发布了一个新版本(您可以从SourceForge或Maven下载它)。读取CSV文件以下示例使用read()(我们刚刚发布的新阅读器&#xff0c;使用Dozer进行具有深度映射和基于索引的映射…

Leedcode6-binary-tree-preorder-traversal

#include<iostream> #include<vector> #include<stack> using namespace std; // Definition for binary tree 先序遍历 根左右 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; #if 0 c…

java 对list增删_List 中正确的增删操作

这个为什么要单独说的原因是&#xff0c;在开发中的对数据库中的增删为最基本的&#xff0c;但是是不是写对了就尤为重要先来看代码:1 public voidtestLoopInList(){2 List a new ArrayList();3 a.add("1");4 a.add("2");5 a.add("w");6 for(St…

Leedcode7-binary-tree-postorder-traversal

#include<iostream> #include<vector> #include<stack> using namespace std; // Definition for binary tree 先序遍历 根左右 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; #if 0 c…

mysql zrm_mysql数据库备份—ZRM

ZRM是Zmanda Recovery Manager的缩写&#xff0c;这是一款备份mysql的开源软件。一、安装#yum install -y MySQL-zrm二、创建备用用户#mysql -uroot -pmysql>grant select,insert,update,create,drop,reload,shutdown,alter,super,lock table,replication client on *.* …

用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识

用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识 循环神经网络RNN相比传统的神经网络在处理序列化数据时更有优势&#xff0c;因为RNN能够将加入上&#xff08;下&#xff09;文信息进行考虑。一个简单的RNN如下图所示&#xff1a; 将这个循环展开得到下图&#xff1a; 上一…

java gzip rest_RestTemplate与Gzip压缩

Gzip 是一种压缩算法&#xff0c;服务器经常通过这个算法来压缩响应体&#xff0c;再响应给客户端&#xff0c;从而减少数据体积&#xff0c;提高传输速度。客户端再通过Gzip解压缩&#xff0c;获取到原始的数据。因为需要压缩计算&#xff0c;所以会耗费额外的CPU资源。Gzip 与…

RNN入门

雷锋网 AI科技评论按&#xff1a;本文作者何之源&#xff0c;原文载于知乎专栏AI Insight&#xff0c;雷锋网(公众号&#xff1a;雷锋网) AI科技评论获其授权发布。 上周写的文章《完全图解RNN、RNN变体、Seq2Seq、Attention机制》介绍了一下RNN的几种结构&#xff0c;今天就来…

Java二进制小数表示_《Java编程的逻辑》笔记9--小数的二进制表示

小数计算为什么会出错&#xff1f;简要答案实际上&#xff0c;不是运算本身会出错&#xff0c;而是计算机根本就不能精确的表示很多数&#xff0c;比如0.1这个数。计算机是用一种二进制格式存储小数的&#xff0c;这个二进制格式不能精确表示0.1&#xff0c;它只能表示一个非常…

『TensorFlow』模型保存和载入方法汇总

一、TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类&#xff0c;.save(sess, ckpt文件目录)方法 参数名称功能说明默认值var_listSaver中存储变量集合全局变量集合reshape加载时是否恢复变量形状Truesharded是否将变量轮循放在所有设备上Truemax_to_keep保留最近检…

STL13-list容器(链表)

链表是由一系列的结点组成&#xff0c;结点包括两个域&#xff1a;一个数据域&#xff0c;一个指针域 1、链表内存是非连续的&#xff0c;添加删除元素效率较高&#xff0c;时间复杂度都是常数项&#xff0c;不需要移动元素 2、链表只有在需要的时候才会分配内存 3、链表只要…

java调用el_[Java教程][javaEE] EL表达式调用java方法

[Java教程][javaEE] EL表达式调用java方法0 2016-07-03 18:00:031.新建个类&#xff0c;类里面定义静态方法package com.tsh.utils;import java.net.URLEncoder;public class ELFunc { public static String urlEncode(String str){ return URLEncoder.encode(str); }}2.在WEB-…

Leedcode8-reorder-list

#include<iostream> #include<vector> using namespace std; //Definition for singly-linked list. /*Given a singly linked list L : L 0→L 1→…→L n - 1→L n, reorder it to : L 0→L n →L 1→L n - 1→L 2→L n - 2→…*/ struct ListNode {int val;List…

java设计是什么软件下载_用Java设计下载软件

用Java设计下载软件HTTP 协议的简介HTTP协议是一种超文本传输协议(Hypertext Transfer Protocol)&#xff0c;工作于网络应用层&#xff0c;自1990年起广泛应用于WWW 的全球信息服务&#xff0c;HTTP协议的具体说明可以在网上查阅RFC2518、RFC2616等文档。HTTP 协议老的标准是H…

php 前往页面,PHP实现网页截图?

如何使用PHP实现网页截图PHP实现网页截图是一个在日常开发中不常见的需求&#xff0c;但是如果实现还是非常有意思的。目前业界有很多成熟的方案&#xff0c;下面我推荐使用一个很稳定的第三方服务来直接实现&#xff0c;该服务有如下特点&#xff1a;支持多线路支持登录截图支…