(十七)jdbc(Java Data Base Connectivity,java数据库连接)基础使用
一、JDBC相关概念介绍
1.1 JDBC介绍
SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC。这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。
如下图所示:
二、编写JDBC程序
2.1 搭建实验环境
A. 启动mysql数据库,即开启mysql/bin/mysqld.exe。
B. 创建数据库,并创建所需的表。如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后期容易出错):

2.2 创建一个web工程,并导入数据库驱动包。

2.3 编写javabean,即PO对象又叫持久化对象,此对象的成员属性与数据库的列一一对应,本例中数据库与userName和passWd两列,则PO对象中也应该有这两个成员属性。

UserPO.java
package po;
public class UserPO {
private String userName;
private String passWd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWd() {
return passWd;
}
public void setPassWd(String passWd) {
this.passWd = passWd;
}
}
解析: javabean对象中成员属性应该是private的,且必须要有get()和set()方法。
2.4 创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类。

- UserPOI.java
package dao;
import java.util.List;
import po.UserPO;
public interface UserPOI {
public boolean addUser(UserPO user);
public List<UserPO> gets();
}
- UserPOImpl.java(可优化本文件代码,在第十八篇中讲解)
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import po.UserPO; public class userPOImpl implements UserPOI { public boolean addUser(UserPO user) {
boolean flag=false;
Connection conn=null;
Statement stat=null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//从驱动中获取数据库的链接
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");
//创建条件语句对象,即创建数据库中写入sql语句的对象
stat= conn.createStatement();
//执行sql语句,并得到如果是增删改操作都是用executeUpdate()方法返回执行成功的记录的条数,如果是查操作得到ResultSet返回值
int res=stat.executeUpdate("insert into user values('"+user.getUserName()+"','"+user.getPassWd()+"') ");
if(res!=0){ //如果res不等于0则说明sql语句执行成功。
flag=true;
} } catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && stat.isClosed()){
stat.close();
}
}catch(Exception e){
e.printStackTrace();
}
} return flag;
} public List<UserPO> gets() {
List<UserPO> list=new ArrayList<UserPO>();
Connection conn=null;
Statement stat=null;
ResultSet res=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");
stat=conn.createStatement();
res=stat.executeQuery("select * from user");
while(res.next()){ //不能是if
UserPO user=new UserPO(); //注意这里的new UserPO()的位置,不能放在外面new 否则list里只有一个对象
user.setUserName(res.getString("userName"));
user.setPassWd(res.getString("passWd"));
list.add(user); } } catch (Exception e) { e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && stat.isClosed()){
stat.close();
}
if(res!=null && res.isClosed()){
res.close();
}
}catch(Exception e){
e.printStackTrace();
} } return list;
} }
2.5 创建测试类进行测试。
- UserTest.java
package test; import java.util.List; import org.junit.Test; import dao.userPOImpl;
import po.UserPO; public class UserTest {
@Test
public void UserPOTest(){
userPOImpl im=new userPOImpl(); UserPO user=new UserPO();
user.setUserName("张三");
user.setPassWd("123");
im.addUser(user);
} @Test
public void userPOget(){
userPOImpl im=new userPOImpl();
List<UserPO> list=im.gets();
for(int i=0;i<list.size();i++)
System.out.println(list.get(i).getUserName()); }
}
结果:



三、注意
- URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

- 常用数据库URL地址的写法:
- Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
- SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
- MySql写法:jdbc:mysql://localhost:3306/sid
- Statement类讲解
- executeQuery(String sql) :用于向数据发送查询语句。
- executeUpdate(String sql):用于向数据库发送insert、update或delete语句
- execute(String sql):用于向数据库发送任意sql语句
- addBatch(String sql) :把多条sql语句放到一个批处理中。
- executeBatch():向数据库发送一批sql语句执行。
- ResultSet类讲解
- next():移动到下一行
- Previous():移动到前一行
- absolute(int row):移动到指定行
- beforeFirst():移动resultSet的最前面。
- afterLast() :移动到resultSet的最后面。
- 释放资源
(十七)jdbc(Java Data Base Connectivity,java数据库连接)基础使用的更多相关文章
- JDBC(Java Data Base Connectivity,java数据库连接)
JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...
- J2EE学习从菜鸟变大鸟之五 JDBC(Java Data Base Connectivity)
JDBC刚开始学习这个的时候看到了,以为是ODBC呢,很是相似啊,总的来说还是基本上一类的东东,但是还有一些细微的区别,下面和大家一起分享学习. JDBC(Java Data Base Connect ...
- JDBC (Java DataBase Connectivity)数据库连接池原理解析与实现
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- JDBC
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.012-[疯狂Java讲义第3版 李刚]- JDBC Style:EBook Series:Java ...
- Spring Data:企业级Java的现代数据访问技术(影印版)
<Spring Data:企业级Java的现代数据访问技术(影印版)>基本信息原书名:Spring Data:Modern Data Access for Enterprise Java作 ...
- 自定义的jdbc连接工具类JDBCUtils【java 工具类】
JDBCUtils 类设计: 1. 创建私有的属性*(连接数据库必要的四个变量):dreiver url user password 2. 将构造函数私有化 3.将注册驱动写入静态代码块 4.外界只能 ...
- java jdbc ResultSet结果通过java反射赋值给java对象
在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. ...
- 第77节:Java中的事务和数据库连接池和DBUtiles
第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...
- java学习笔记41(数据库连接池 C3p0连接池)
在之前的学习中,我们发现,我们需要频繁的创建连接对象,用完之后还需要在关闭资源,因为这些连接对象都是占资源的,但是又不得不创建,比较繁琐,为了解决这种情况,Java出现了数据库连接池: 数据库连接池的 ...
随机推荐
- jmeter接口测试json详解
本篇围绕jmeter(压力测试工具),请求json与返回json串处理进行解析,初入测试,理解如有不对的地方请大家及时提点~~ 在这里jmeter工具的使用不在做解释 首先说下乱码问题,在这里无脑5步 ...
- 0019SpringBoot使用异步任务(多线程)与定时任务
SpringBoot开启异步任务只需要两步配置: 1.在主类上加上注解@EnableAsync开启异步功能 2.在service层的方法上加上注解@Async指定调用方法时是异步的 SpringBoo ...
- 《ABCD组》第六次作业:团队项目系统设计改进与详细设计
<ABCD组>第六次作业:团队项目系统设计改进与详细设计 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ht ...
- 17 webpack中babel的配置——静态属性与实例属性
// class关键字,是ES6中提供的新语法,是用来实现ES6中面向对象编程的方式 class Person{ // 使用static关键字,可以定义静态属性 // 所谓的静态属性,就是可以直接通过 ...
- 并发编程大师系列之:线程的定义和中断 interrupt
1.启动线程的三种方式: 1.1继承Thread类 public static class UseThread extends Thread { public void run() { System. ...
- C语言入坑指南-缓冲区溢出
前言 缓冲区溢出通常指的是向缓冲区写入了超过缓冲区所能保存的最大数据量的数据.如果说之前所提到的一些问题可能只是影响部分功能的实现,那么缓冲区溢出将可能会造成程序运行终止,被不安全代码攻击等严重问题, ...
- ubuntu下新立得(synaptic)软件包管理器安装
1.从ubuntu下的软件中心(面板主页中输入soft即可找到)搜索安装synaptic后,打开新立得一闪就自动关了.解决办法为: 1.1命令行下卸载,命令行下重新安装: 卸载: #purge表示卸载 ...
- P3410 拍照
漂亮小姐姐点击就送:https://www.luogu.org/problemnew/show/P3410 题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一 ...
- jmeter+ant+jenkins构建自动化测试
背景目的: 持续更新.... 参考文档:https://blog.csdn.net/cherish0123/article/details/79339732
- [线性代数] 矩阵代数進階:矩阵分解 Matrix factorization
Matrix factorization 导语:承载上集的矩阵代数入门,今天来聊聊进阶版,矩阵分解.其他集数可在[线性代数]标籤文章找到.有空再弄目录什麽的. Matrix factorization ...