JDBC:

概念:Java DataBase Connectivity Java 数据库连接,Java语言操作数据库

本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口,各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口编程,真正执行的代码是驱动jar包中的实现类(多态调用 Fu f = new Zi();)

package cn.itcast.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class JdbcDemo1 {public static void main(String[] args) throws Exception{//导入驱动jar包//加载Driver类进内存,执行Driver类的静态代码块,就可以注册驱动Class.forName("com.mysql.jdbc.Driver");//获取数据库连接对象// DriverManager驱动管理对象,//DriverManager是一个类// DriverManager类中的方法getConnection ,会返回一个Connection对象//Connection叫做数据库连接对象//Connection是一个接口Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","12345");//定义一条sql语句String sql = "update emp set salary = 10000 where id = 1001";//DriverManager.getConnection返回的是一个Connection对象,所以可以使用该对象conn调用需要的方法//该createStatement方法将会获得一个可以执行sql语句的对象//获取执行sql对象 StatementStatement stmt = conn.createStatement();//执行sql语句,返回值Int代表着有多少行执行成功,受到影响int count = stmt.executeUpdate(sql);System.out.println(count);stmt.close();conn.close();}
}

JDBC练习

package cn.itcast.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;// 通过JDBC添加一条记录
public class JdbcDemo2 {public static void main(String[] args){Statement stmt = null;Connection conn = null;try{//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//定义sql语句String sql = "insert into emp values(null,'张飞','男',5000,'2014-05-20',3)";//获取执行Connection对象conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2","root","12345");//获取执行sql的对象stmt = conn.createStatement();//执行sqlstmt.executeUpdate(sql);}catch(Exception e){e.printStackTrace();}finally{//避免空指针异常if(stmt !=null){try{stmt.close();}catch(Exception e){e.printStackTrace();}}else{System.out.println("发生null指针异常");}if(conn !=null){try {conn.close();}catch(Exception e){e.printStackTrace();}}else{System.out.println("null指针异常");}}}
}
ResultSet:结果集对象,封装查询结果

常用方法有两个:

boolean next():游标向下移动一行,判断当前行是否是最后一行末尾

getxxx(参数) xxx代表数据类型,参数代表编号,编号从1开始,也可以代表列的名称

package cn.itcast.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;import static javax.swing.text.html.parser.DTDConstants.NAME;// 通过JDBC添加一条记录
public class JdbcDemo2 {public static void main(String[] args){Statement stmt = null;Connection conn = null;ResultSet rs = null;try{//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//定义sql语句String sql = "select * from emp";//获取执行Connection对象conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2","root","12345");//获取执行sql的对象stmt = conn.createStatement();//执行sqlrs = stmt.executeQuery(sql);//re.next的返回值是boolean类型while(rs.next()){//若为真,则获取数据int i= rs.getInt(1);//这个参数是编号参数String s = rs.getString("name"); //这个参数是一个列名称参数String s1 = rs.getString("gender");System.out.println(i+" "+s1+" "+s);}}catch(Exception e){e.printStackTrace();}finally{//避免空指针异常if(rs!=null){try{stmt.close();}catch(Exception e){e.printStackTrace();}}else{System.out.println("发生null指针异常");}}}
}

//定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回
import java.util.Date;/*** 封装Emp表数据的JavaBean*/
public class Emp {private int id;private String ename;private int job_id;private int mgr;private Date joindate;private double salary;private double bonus;private int dept_id;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public int getJob_id() {return job_id;}public void setJob_id(int job_id) {this.job_id = job_id;}public int getMgr() {return mgr;}public void setMgr(int mgr) {this.mgr = mgr;}public Date getJoindate() {return joindate;}public void setJoindate(Date joindate) {this.joindate = joindate;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public int getDept_id() {return dept_id;}public void setDept_id(int dept_id) {this.dept_id = dept_id;}public double getBonus() {return bonus;}public void setBonus(double bonus) {this.bonus = bonus;}@Overridepublic String toString() {return "Emp{" +"id=" + id +", ename='" + ename + '\'' +", job_id=" + job_id +", mgr=" + mgr +", joindate=" + joindate +", salary=" + salary +", bonus=" + bonus +", dept_id=" + dept_id +'}';}
}
import java.sql.*;
import java.util.ArrayList;
import java.util.List;public class JDBCDemo3 {public static void main(String[] args){List<Emp> list = new JDBCDemo3().findALL();System.out.println(list);}public List<Emp> findALL() {Connection conn = null;Statement stat = null;ResultSet rs = null;List<Emp> list = null;try {Class.forName("com.mysql.jdbc.Driver");//获取到Connection对象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "12345");//有了Connecttion对象才会有Statement执行sql语句的对象stat = conn.createStatement();//定义sql语句String sql = "SELECT * FROM emp";//执行sql语句,返回的是结果集对象ResultSet()rs = stat.executeQuery(sql);//通过结果集对象的方法,可以获取到每一行的数据Emp emp = null;list = new ArrayList<Emp>();while (rs.next()) {int id = rs.getInt("id");String ename = rs.getString("ename");int job_id = rs.getInt("job_id");int mgr = rs.getInt("mgr");Date joindate = rs.getDate("joindate");double salary = rs.getDouble("salary");double bonus = rs.getDouble("bonus");int dept_id = rs.getInt("dept_id");emp  = new Emp();emp.setId(id);emp.setEname(ename);emp.setJob_id(job_id);emp.setMgr(mgr);emp.setJoindate(joindate);emp.setSalary(salary);emp.setBonus(bonus);emp.setDept_id(dept_id);list.add(emp);}} catch (Exception e) {e.printStackTrace();} finally {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (stat != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}return list;}
}

通过JDBCutils工具类改进代码

package cn.itcast.jdbc;import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;public class JDBCUtils {private static String url;private static String user;private static String password;private static String driver;static {try{Properties pro = new Properties();//可以通过字节码来获取类加载器ClassLoader classLoader = JDBCUtils.class.getClassLoader();//getResource方法可以找到sre文件夹下的配置文件URL res = classLoader.getResource("jdbc.properties");String path = res.getPath();pro.load(new FileReader(path));url = pro.getProperty("url");user = pro.getProperty("user");password = pro.getProperty("password");driver = pro.getProperty("driver");Class.forName(driver);}catch(IOException e){e.printStackTrace();}catch(ClassNotFoundException e){e.printStackTrace();}}//调用方法,返回Connection对象public static Connection getConnection() throws SQLException{return DriverManager.getConnection(url,user,password);}//执行增删改需要释放Statement和Connection对象public static void close(Statement stmt, Connection conn){if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}//执行查询需要释放resultset,Statement和Connection对象public static void close(ResultSet rs, Statement stmt, Connection conn){if(rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}
package cn.itcast.jdbc;import java.sql.*;
import java.util.ArrayList;
import java.util.List;public class JDBCDemo3 {public static void main(String[] args){List<Emp> list = new JDBCDemo3().findALL();System.out.println(list);}public List<Emp> findALL() {Connection conn = null;Statement stat = null;ResultSet rs = null;List<Emp> list = null;try {conn = JDBCUtils.getConnection();//有了Connecttion对象才会有Statement执行sql语句的对象stat = conn.createStatement();//定义sql语句String sql = "SELECT * FROM emp";//执行sql语句,返回的是结果集对象ResultSet()rs = stat.executeQuery(sql);//通过结果集对象的方法,可以获取到每一行的数据Emp emp = null;list = new ArrayList<Emp>();while (rs.next()) {int id = rs.getInt("id");String ename = rs.getString("ename");int job_id = rs.getInt("job_id");int mgr = rs.getInt("mgr");Date joindate = rs.getDate("joindate");double salary = rs.getDouble("salary");double bonus = rs.getDouble("bonus");int dept_id = rs.getInt("dept_id");emp  = new Emp();emp.setId(id);emp.setEname(ename);emp.setJob_id(job_id);emp.setMgr(mgr);emp.setJoindate(joindate);emp.setSalary(salary);emp.setBonus(bonus);emp.setDept_id(dept_id);list.add(emp);}} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.close(rs,stat,conn);}return list;}
}
JDBC练习_登录案例

需求:通过键盘录入用户名和密码,查看数据库,判断是否登录成功

CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(32),PASSWORD VARCHAR(32)
);
INSERT INTO USER VALUES
(NULL,'zhangsan','123'),
(NULL,'lisi','234');
package cn.itcast.newjdbc;import javax.xml.transform.Result;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;public class JDBCDemo5 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入用户名: ");String username = sc.nextLine();System.out.println("请输入密码: ");String password  = sc.nextLine();boolean flag = new JDBCDemo5().login(username,password);if(flag){System.out.println("登录成功");}else{System.out.println("用户名或密码错误");}}public boolean login(String username,String password){//若传入参数为null,自接返回falseif(username == null|| password == null){return  false;}Connection conn = null;Statement stme = null;ResultSet rs = null;try{//获得数据库连接Connectionconn=  JDBCUtils.getConnection();//写sql语句String sql = "select * from user where username = '"+username+"'and password='"+password+"'";//获得执行sql语句对象Statement stmt = conn.createStatement();rs = stmt.executeQuery(sql);return rs.next();}catch (SQLException e){e.printStackTrace();}return  false;}
}
JDBC管理事务:

事务:一个包含多个步骤的业务操作,如果这个业务被操作被事务管理,则这多个步骤要么同时成功,要么同时失败

使用Connection对象来管理事务操作:

1.开启事务:在执行sql语句之前开启事务

2.提交事务,当所有sql都执行完提交事务

3,回滚事务,在catch中回滚事务

使用Connection对象来管理事务

数据库连接池

概念:其实就是一个容器,存放数据库连接的容器

数据库连接池c3p0的使用

步骤:

  1. 导入jar包,jar包要单独一个目录
  2. 定义配置文件
  3. 创建核心对象
  4. 获取连接
package cn.itcast.datasourcejdbc;import com.mchange.v2.c3p0.ComboPooledDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;public class C3P0Demo1 {public static void main(String[] args) {//DataSource是一个接口//创建数据库连接池对象//使用父类引用指向子类对象,多态DataSource ds = new ComboPooledDataSource();//获取连接对象try {Connection conn = ds.getConnection();System.out.println(conn);} catch (SQLException e) {e.printStackTrace();}}
}

转载于:https://www.cnblogs.com/train99999/p/10965249.html

笔记-JavaWeb学习之旅4相关推荐

  1. 笔记-JavaWeb学习之旅2

    数据库的基本概念 1.数据库:DataBase 简称 DB,用于存储和管理数据的仓库 特点: 1.持久化存储数据的,其实数据库就是一个文件系统, 2.方便存储和管理数据 3.使用了统一操作数据库 -- ...

  2. 笔记-JavaWeb学习之旅19

    Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...

  3. 【EL】【JSTL】【文件上传下载】【学习笔记】寒假javaweb学习之旅1.5

    厦工我的厦工

  4. 我的javaweb学习之旅--html常用块级标签

    html常用块级标签 常用的有p,h1~h6,div,ul 等 1.h1~h6 <body> <h1></h1>   一级标题 ...... <h6>& ...

  5. JavaWeb学习笔记(软件系统体系结构、Tomcat、Web应用、HTTP协议)

    JavaWeb学习笔记 JavaWeb学习笔记 软件系统体系结构 常见软件系统体系结构C/S.B/S Web资源 Web服务器 Tomcat Tomcat概述 安装.启动.配置Tomcat Web应用 ...

  6. Vue3学习之旅--Vue3高级语法补充-自定义指令,vue插件,Teleport......

    文章目录 Vue3高级语法补充 自定义指令 认识自定义指令 实现方式一:默认实现 实现方式二:局部自定义指令 方式三:自定义全局指令 指令的生命周期 指令的参数和修饰符 自定义指令练习 时间格式化指令 ...

  7. JavaWeb学习笔记(十)--HttpServletRequest

    1. HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中 2. Ht ...

  8. java message bus_【Microsoft Azure学习之旅】消息服务Service Bus的学习笔记及Demo示例...

    今年项目组做的是Cloud产品,有幸接触到了云计算的知识,也了解并使用了当今流行的云计算平台Amazon AWS与Microsoft Azure.我们的产品最初只部署在AWS平台上,现在产品决定同时支 ...

  9. JavaWeb学习笔记-目录(待完成)

    JavaWeb学习笔记-目录(待完成) 01-基础加强(注解+反射) 02-mysql基础 03-mysql约束 04-mysql多表事务 05-jdbc 06-jdbc连接池JDBCTemplate ...

最新文章

  1. 在matlab中有几种获得帮助的途径,matlab经典习题及解答
  2. MFC串口通信上位机(采用静态库编译生成的)不能在其他电脑运行的问题
  3. 任务和特权级保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记27
  4. flex与java集成开发(基于eclipse)
  5. java资源文件获取属性_Java读写资源文件类Properties
  6. nginx 499 502 413 404 处理
  7. 【maven】新建一个maven项目的基本配置
  8. 科技公司都是如何应对 COVID-19?
  9. 为什么Visual Studio的安装目录下有名为1033或2052的文件夹?
  10. Linux console/tty/gui终端模拟器
  11. SQL递归查询树型分类数据
  12. 阿里云盘webdev挂载
  13. 相机闪光灯(camera flash)
  14. java使用递归,复制文件夹下的所有子文件
  15. Day 73 Npm包管理 +Express+路由+中间件
  16. 打包带走极客时间大数据课程的正确姿势
  17. 悬浮View,可拖动,放手后自动吸附到屏幕边上。
  18. Spring Boot 2.x系列【9】功能篇之SpringApplication启动参数使用详解
  19. 微信新版 公众号隐藏导航条
  20. matlab 有源电力滤波器,基于MATLAB的有源电力滤波器研究

热门文章

  1. 银行卡扫描(基于swift)
  2. 手把手教你部署Nagios
  3. LeetCode10. 正则表达式匹配
  4. Python中用户管理(用户的登陆、用户的增删改查)
  5. polybase配置 sql_在 Windows 上配置 PolyBase 横向扩展组
  6. Failed to parse PID from file /run/nginx.pid: Invalid argument
  7. 进程与线程的区别和联系
  8. DeFi协议ValueDeFi疑似再次遭到攻击
  9. DeFIL.org的资金池规模达168万枚FIL 已借出105万枚FIL
  10. 以太坊2.0存款合约地址余额28.87万ETH,进度达55%