(十七)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出现了数据库连接池: 数据库连接池的 ...
随机推荐
- Java类与类之间的6种关系及uml表示
一.继承关系 继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议 ...
- 《TheOne团队》团队作业三:团队项目原型设计与开发
项目 内容 作业所属课程 http://www.cnblogs.com/nwnu-daizh/ 作业要求 https://www.cnblogs.com/nwnu-daizh/p/10761596.h ...
- GET和POST的区别【转载】
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- 遇见zTree和chrome的俩坑
今天后台系统发现一bug,就是前几天用zTree做的树形结构,今下午突然不好使了,然后就查问题.我自己电脑装的是chrome浏览器,后台debug一看传的json数据,没毛病,想当然的断定不是数据的问 ...
- 洛谷P2221 高速公路【线段树】
题目:https://www.luogu.org/problemnew/show/P2221 题意:有n个节点排成一条链,相邻节点之间有一条路. C u v val表示从u到v的路径上的每条边权值都加 ...
- PHP读取文件内容的方法
下面我们就为大家详细介绍PHP读取文件内容的两种方法. 第一种方法:fread函数 <?php $file=fopen('1.txt','rb+'); echo fread($file,file ...
- 学到了林海峰,武沛齐讲的Day17-5 内置函数
zip print(list(zip(('a','n','c','d'),(1,2,3)))) =====[('a', 1), ('n', 2), ('c', 3)] 一一对应====元组变列表 ...
- P3038 [USACO11DEC]牧草种植Grass Planting
题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirectional road ...
- OpenCV:Python下OpenCV安装和入门最强详细攻略
一.关于OpenCV简介 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效— ...
- manjaro 滚动更新后无法开机,Failed to start load kernel modules,nvidia驱动导致
今天滚动后无法开机,启动时显示Faild to start load kernel modules,卡在后面无法进入登录界面 systemctl status systemd-modules-load ...