iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JSP (3)------JDBC编程1
  • 864
分享到

JSP (3)------JDBC编程1

JSPJDBC 2023-01-31 01:01:25 864人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

JDBC api :是一系列的编程接口,可以用来连接数据库,访问数据等。DriverManager : 驱动程序管理类,用来装载驱动程序,为创建数据库连接提供支持。Connection:用于连接某一指定的数据库Statement : 提供了


JDBC api

是一系列的编程接口,可以用来连接数据库,访问数据等。

DriverManager : 驱动程序管理类,用来装载驱动程序,为创建数据库连接提供支持。

Connection:用于连接某一指定的数据库

Statement : 提供了执行sql语句,获取查询结果的方法。有两个子接口。分别是:

  • PrepareStatement:用于执行预编译的sql语句


ResultSet : 提供了对结果集处理的方法



JDBC Driver API

是面向驱动程序开发商的接口,JDBC驱动程序主要有四种类型:

  • JDBC-ODBC bridge : 将JDBC的调用全部委托给其他其他编程接口调用

  • 部分Java技术的本地API驱动程序: 部分基于java,其他的委托给本地客户端的代码实现

  • 全部基于java技术的本地API驱动程序

  • 全部基于java技术的本地协议驱动。





写一个JDBC的应用程序:

首先,在Mysql中创建表:


create table tbl_user(
	id int(11) unsigned not null auto_increment,
	name varchar(50) not null default '',
	passWord varchar(50) not null default '',
	email varchar(50) default '',
	primary key (id)
)
engine = InnoDB	   
default charset = utf8;


create table tbl_address(
	id int(11) unsigned not null auto_increment,
	city varchar(20) default null,
	country varchar(20) default null,
	user_id int(11) unsigned not null,  
	primary key(id)
)
engine = InnoDB
default charset = utf8;


在数据库中显示如下:

wKiom1V1X2rQyupBAAA7DZ4IoFo049.jpg

wKiom1V1X-XwqV3eAADX1QSglL0293.jpg

wKioL1V1YYnRN9LlAADN0HsV_xw343.jpg


insert into tbl_user(id, name, password, email) values
(1,'xiaoming', '123456', 'xiaom@sina.com'),
(2, 'daming', '654321','daming@163.com');

insert into tbl_address(city, country, user_id) values
('beijing', 'china', 1),
('NewYork', 'USA', 2);


JDBC 编程的步骤:

  • 加载驱动

  • 打开连接

  • 执行查询

  • 处理结果

  • 清理环境


添加java代码测试:将user表中的数据输出

package com.jike.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCTest {
	public static void main(String[] args) {
		String sql = "SELECT * FROM tbl_user";
		Connection conn = null;   // 当前的数据连接
		Statement st = null;   // 向数据库发送sql语句
		ResultSet rs = null;   // 封装从数据库里查询到的数据
		// 用ctrl+shift+o自动导入以上用到的三个接口
		try {
			Class.forName("com.mysql.jdbc.Driver"); // 注册MySQL的jdbc驱动程序  
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/info", "******", "*******");// 获取数据库连接,后面两个分别是数据库用户名和密码
			st = conn.createStatement();
			rs = st.executeQuery(sql);   // 发送sql语句
			
			while(rs.next()){
				System.out.print(rs.getInt("id")+" ");
				System.out.print(rs.getString("name")+" ");
				System.out.print(rs.getString("password")+" ");
				System.out.print(rs.getString("email")+" ");
				System.out.println();
				
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{ // 关闭顺序由小到大
			try{
				rs.close();
			}catch(Exception e2){
			}
			try {
				st.close();
			} catch (Exception e3) {
				// TODO: handle exception
			}
			try {
				conn.close();
			} catch (Exception e4) {
				// TODO: handle exception
			}
		}
	}
}


JDBC数据库的插入,更新,删除


package com.jike.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCTest {
	
	// 获取数据库连接
	public static Connection getConnection(){
		Connection conn = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");  
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/info", "********", "*********");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return conn;
	}
	
	// 向数据库表中插入数据
	public static void insert(){
		Connection conn = getConnection();
		try {
			String sql = "insert into tbl_user(name, password, email)"+
							"values('deci', '2255225', 'deci@mail.com')";
			Statement st = conn.createStatement();
			int count = st.executeUpdate(sql);
			System.out.println("向数据库中插入了" + count + "条记录");
			conn.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	// 更新内容
	public static void update(){
		Connection conn = getConnection();
		try {
			String sql = "update tbl_user set email='DDDd@123.com' where name = 'deci'";
			Statement st = conn.createStatement();
			int count = st.executeUpdate(sql);
			System.out.println("向数据库中更新了" + count + "条记录");
			conn.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	//删除记录
	public static void delete(){
		Connection conn = getConnection();
		try {
			String sql = "delete from tbl_user where name = 'deci'";
			Statement st = conn.createStatement();
			int count = st.executeUpdate(sql);
			System.out.println("向数据库删除了" + count + "条记录");
			conn.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		//insert();
		//update();
		delete();
	}
}


依次调用定义的方法,得到如图结果:

wKiom1V8Ya3Ty8hqAAIrJraJzDA435.jpg





JDBC 编程 ----事务处理:

事务:维护数据一致性的工作单位,要么全部执行,要么全部不执行。

事务的基本特征:

  • 原子性

  • 一致性

  • 隔离性

  • 持久性


与事务相关的sql语句

开始事务: begin transaction

提交事务: commit transaction

回滚事务:rollback transaction


举例:在用户表和地址表中分别插入数据:

用户表 插入:

"insert into tbl_user(id, name, password, email)"+
         "values(10, 'Tom', '2525252', 'tom@123.com')"

地址表插入:

"insert into tbl_address(id, city, country, user_id)"+
	"values(1, 'shanghai', 'china', '10')";


可以看出,原有的数据库中地址表中已经有主键id=1的数据,程序会报出主键冲突的错误,具体代码如下:

package com.jike.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class TransactionTest {
	public static Connection getConnection(){
		Connection conn = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/info", "******","*******");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return conn;
	}
	
	// 向用户表中插入数据
	public static void insertUserData(){
		Connection conn = getConnection();
		try {
			String sql = "insert into tbl_user(id, name, password, email)"+
						"values(10, 'Tom', '2525252', 'tom@123.com')";
			Statement st = conn.createStatement();
			int count = st.executeUpdate(sql);
			System.out.println("向用户表中插入了"+count+"条数据");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	// 向地址表中插入数据
	public static void insertAddressData(){
		Connection conn = getConnection();
		try {
			String sql = "insert into tbl_address(id, city, country, user_id)"+
						"values(1, 'shanghai', 'china', '10')";
			//这里注意, 因为这条语句规定插入地址表中的数据id号为1,但是地址表中已经有id=1的数据,因此会抛出异常
			// 这是一个很严重的问题,因为数据只有部分被插入。需要采用事务保证数据要么完全插入,要么全部回滚。
			Statement st = conn.createStatement();
			int count = st.executeUpdate(sql);
			System.out.println("向地址表中输入了"+count+"条记录");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		insertUserData();
		insertAddressData();
	}
	
	
}


程序报出异常如图:

wKioL1V8bWPz3blyAAPCUg8UNTg851.jpg


这是,数据表中的插入结果如下:

wKioL1V8baPR-rVSAAEyfIe30qs590.jpg


可见,地址表中的信息没有正确插入,而用户表中的信息插入成功,这种插入是非常危险的,其无法保持数据的完整性。因此使用事务来处理这类问题。




极客学院地址:Http://www.jikexueyuan.com/course/625.html

--结束END--

本文标题: JSP (3)------JDBC编程1

本文链接: https://www.lsjlt.com/news/184979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JSP (3)------JDBC编程1
    JDBC API :是一系列的编程接口,可以用来连接数据库,访问数据等。DriverManager : 驱动程序管理类,用来装载驱动程序,为创建数据库连接提供支持。Connection:用于连接某一指定的数据库Statement : 提供了...
    99+
    2023-01-31
    JSP JDBC
  • JSP(4)----servlet编程3
    Servlet过滤器由Servlet容器管理的对象,过滤器的功能是在原数据和目的数据之间起过滤作用的中间组件。简单实例实现:过滤器功能:在访问指定资源之前,打印一条日志,访问指定资源之后,打印一条日志package com.jike.fil...
    99+
    2023-01-31
    JSP servlet
  • JDBC编程
    文章目录 一、JDBC简介二、驱动的下载三、JDBC的使用DriverManagerDataSourceConnectionStatementResultSetPreparedStatement数据库连接池 一、JDBC简...
    99+
    2023-08-18
    数据库 mysql java
  • Day 3 - 编写ORM 修改1
    #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'Michael Liao' import asyncio, logging import aiomysql def ...
    99+
    2023-01-31
    Day ORM
  • MySQL的JDBC 编程
    目录 1.数据库编程:JDBC 2. JDBC工作原理 3. JDBC使用 3.1 驱动包的下载与导入 3.2 JDBC使用步骤(插入) 4.JDBC修改删除查询 1. 将数据库驱动包,添加到项目依赖中 创建目录,拷贝jar包,然...
    99+
    2023-09-02
    mysql 数据库 java
  • [MySQL]初始JDBC编程
    专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现...
    99+
    2023-09-11
    mysql 数据库 java
  • 【MySQL】 Java的JDBC编程
    文章目录 🌲数据库编程的必备条件🎋Java的数据库编程:JDBC🎍JDBC工作原理🌳建立数据库连接📌在项目中新建...
    99+
    2023-09-27
    mysql java 数据库 开发语言 基础操作
  • 6.Java的JDBC编程
    文章目录 🌆1. 数据库编程🌆🏯1.1数据库编程的必备条件🏯🏰1.2下载驱动包🏰⛺️1.3导入驱动包:⛺️🏭1.4编写J...
    99+
    2023-08-17
    java 数据库 JDBC mysql sql
  • 如何实现JDBC编程
    本篇文章给大家分享的是有关如何实现JDBC编程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言JDBC,即Java Database Connectivity,java数据库...
    99+
    2023-06-14
  • 切面编程(3)
    过滤器相对比较简单了public class WebFiler implements Filter{     //在bean销毁的时候执行 @Override public void destroy() { System.out.p...
    99+
    2023-01-31
    切面
  • 【MySQL系列】Java的JDBC编程
    ☕目录☕       🍚前言             🍜一、背景知识引入             🥡二、安装MySQL数据库驱动包,并且导入到项目中             🧇...
    99+
    2023-09-05
    MySQL数据库
  • JDBC编程的详细步骤
    目录前言1.创建数据库连接Connection2.创建操作命令对象Statement3.执行SQL,替换占位符,之后再执行4.如果是查询操作,处理结果集5.释放资源返回对象前言 JD...
    99+
    2024-04-02
  • 【通关MySQL】Java的JDBC编程
    ✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【通关MySQL】 ✈️✈️本篇内容:Java的JDBC编程。 🚀🚀代码存放仓库gitee:MySQL码云存放...
    99+
    2023-09-06
    mysql 数据库 java
  • pythonnet-网络编程(1)
    python的网络编程有不少难点,也容易忘记,最近我会陆续发出系统、完整pythonnet知识的博客,一边复习一边分享,感兴趣的可以关注我。 话不多说,开始吧。   网络编程 目的:数据的传输 ISO(国际标准化组织) OSI七层模型--...
    99+
    2023-01-30
    网络编程 pythonnet
  • python 编程实例 1
    #python 100 例 1.py#题目:有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多 #少?a = {}c = 1for i in range(1,5):    for j in range(1,5): ...
    99+
    2023-01-31
    实例 python
  • linux系统编程(3)
    一 线程间同步 同步:相互之间配合完成一件事情 互斥:保证访问共享资源的完整性(有你没我) POSIX 线程中同步:使用信号量实现 信号量 : 表示一类资源,它的值表示资源的个数 对资源访问: p操作(申请资源) [将资源的值 -...
    99+
    2023-01-31
    系统 linux
  • Java编程思想(3)
     第三章控制程序流 但是在为对象“赋值”的时候,情况却发生了变化。对一个对象进行操作时,我们真正操作的是对对象的引用。所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方. 94页 ...
    99+
    2023-01-31
    思想 Java
  • Linux下C编程(3)
    创建一个能用的SOCKET是非常简单的,因为GLIBC已经为你做了很多简化工作,但是从另一个角度来说,一个通用的SOCKET不代表一个高效性能的网络应用。我们前面说到sockfd其实同真正的FD是一样的。都是LINUX下的一个打开的设备描述...
    99+
    2023-01-31
    Linux
  • MySQL数据库JDBC编程详解流程
    目录一、数据库编程的必备条件二、Java的数据库编程:JDBC三、JDBC工作原理四、JDBC开发步骤五、JDBC操作步骤六、优化JDBC的部分代码1.获取数据库连接对象2.操作命令...
    99+
    2024-04-02
  • jsp编程软件怎么使用
    JSP编程软件是一种用于开发Java Web应用程序的工具,常见的JSP编程软件有Eclipse、IntelliJ IDEA、Net...
    99+
    2023-06-08
    jsp编程软件 jsp
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作