JDBC

1、概述:

1.1概念:

java数据库连接

1.2作用:

提供了通用访问关系型数据库的接口规范.

2、入门案例

2.1导入驱动jar包

​ 1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
​ 2.右键–>Add As Library

2.2注册驱动

​ Class.forName(“com.mysql.jdbc.Driver”)

2.3获取连接

​ Connection conn =DriverManager.getConnection(“jdbc:mysql://localhost:3306/db2”,“root”,“1234”)

2.4编写SQL
2.5获取语句执行对象 Statement

​ Statement st = conn.createStatement();

2.6执行SQL

​ int executeUpdate(sql) 执行DML语句
​ Result executeQuery(sql) 执行DQL语句

2.7处理结果集(查询操作)
2.8释放资源
package com.itfenghua01;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JdbcDemo01 {public static void main(String[] args) throws ClassNotFoundException, SQLException {//注册驱动Class.forName("com.mysql.jdbc.Driver");//获取连接Connection con = DriverManager.getConnection("jdbc:mysql:///demo01", "root", "root");//sql语句String sql = "update stu set math=100 where name ='陈墨瞳' ";//获取执行对象Statement sta = con.createStatement();//执行语句int update = sta.executeUpdate(sql);System.out.println(update);//释放资源sta.close();con.close();}
}

3、相关的Api

3.1DriverManager ★

3.1.1注册驱动 registerDriver(Driver driver) -
3.1.2获取连接 getConnection(url,user,pwd)

​ 1.参数url:
​ 标准写法: jdbc:mysql://localhost:3306/数据库名称
​ 简单写法: jdbc:mysql:///数据库名称
​ 2.参数user: 数据库用户
​ 3.参数pwd: 数据库密码

3.2Connection连接 ★

3.2.1获取语句执行对象
  1. Statement st = conn.createStatement();

  2. PreparedStatement pst = conn.preparedStatement(String sql);

    3.区别:

    1)PreparedStatement 防止SQL注入问题

    2)执行效率更高

    3)编写起来更加简单

    3.2.2管理事务
  3. 开启事务 setAutoCommit(false);

    1. 提交事务 commit();
    2. 回滚事务 rollback();

    3.3 Statement语句执行

    1.int executeUpdate(String sql) 用于执行增删改的SQL语句,返回影响的行数

    2.ResultSet executeQuery(String sql); 用于执行查询语句,返回结果集对象

    3.4 ResultSet 结果集 ★

3.4.1作用:

封装了查询的数据

3.4.2操作

1.boolean next(); 游标向下移动一行, 若有下一行返回true,反之为false
2.getXxx(int 编号);
3.getXxx(“列名”) ★
Xxx 必须和 列类型一样
int getInt(…)
varchar getString(…)
Date getDate(…)
double getDouble(…)

package com.itfenghua01;import java.sql.*;public class jdbcDemo03 {public static void main(String[] args)  {Connection con =null;Statement sta =null;ResultSet resultSet =null;try {con = DriverManager.getConnection("jdbc:mysql:///demo01", "root", "root");String sql ="select  * from  stu ";sta = con.createStatement();resultSet = sta.executeQuery(sql);while (resultSet.next()){String name = resultSet.getString("name");int age = resultSet.getInt("age");Date date = resultSet.getDate("time");int math = resultSet.getInt("math");String sex = resultSet.getString("sex");System.out.println(name+","+age+","+date+","+math+","+sex);}} catch (SQLException e) {e.printStackTrace();}finally {if (sta!=null)try {resultSet.close();sta.close();con.close();} catch (SQLException e) {e.printStackTrace();}}}}

4、PreparedStatement预处理对象 ★

4.1SQL注入问题

用户输入一些特殊字符,导致整个SQL的结构发生了改变

4.2开发步骤

1.导入jar包

2.注册驱动

  1. 获取连接

  2. 编写SQL
    SELECT * FROM USER WHERE username = ? AND PASSWORD = ? ;

  3. 获取语句执行对象 PreparedStatement
    conn.preparedStatement(String sql);

  4. 给?占位符赋值
    preparedStatement.setXxx(int 问号的编号,值)
    注意: ? 从 1开始的
    Xxx 必须 和数据库列类型一样
    7 执行SQL

8.处理结果集(查询操作)

9.释放资源

4.3操作

1.int executeUpdate() 用于执行增删改的SQL语句,返回影响的行数

2.ResultSet executeQuery(); 用于执行查询语句,返回结果集对象

package com.itfenghua02;import com.JDBCUtils.JDBCUtils;
import org.junit.Test;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class JDBCDemo01 {@Testpublic void add() throws SQLException {Connection conn = JDBCUtils.getConnection();String sql = "insert into ss VALUE(?,?)";PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1,8);pst.setInt(2,119);pst.executeUpdate();JDBCUtils.close(null,pst,conn);}@Testpublic void delect() throws SQLException {//获取连接Connection conn = JDBCUtils.getConnection();//sql语句String sql = "delete from ss where id=? ";//获取预处理对象PreparedStatement pst = conn.prepareStatement(sql);//给占位符赋值pst.setInt(1,1);//执行操作pst.executeUpdate();//释放资源JDBCUtils.close(null,pst,conn);}@Testpublic void update() throws SQLException {Connection conn = JDBCUtils.getConnection();String sql ="update ss set num=? where id=? ";PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1,10000);pst.setInt(2,2);pst.executeUpdate();JDBCUtils.close(null,pst,conn);}@Testpublic void query() throws SQLException {Connection conn = JDBCUtils.getConnection();String sql = "select * from ss";PreparedStatement pst = conn.prepareStatement(sql);//结果集ResultSet res = pst.executeQuery();//遍历结果集,结果集对象,封装查询结果while (res.next()){int id = res.getInt("id");int num = res.getInt("num");System.out.println(id+","+num);}JDBCUtils.close(res,pst,conn);}
}

5、事务管理

1.开启事务 setAutoCommit(false);

  1. 提交事务 commit();
  2. 回滚事务 rollback();
    事务模版

6、JDBC工具类提取

package com.JDBCUtils;import java.io.InputStream;
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 prop = new Properties();//读取配置文件:jdbc.propertiesInputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");//加载文件prop.load(in);//获取文件中的关键字值url = prop.getProperty("url");user = prop.getProperty("user");password = prop.getProperty("password");driver = prop.getProperty("driver");//1.注册驱动Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}/*** //2.获取连接* @return* @throws SQLException*/public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url,user,password);}/*** //释放资源* @param res* @param sta* @param con*/public static void close(ResultSet res, Statement sta,Connection con){if (res!=null){try {res.close();} catch (SQLException e) {e.printStackTrace();}}  if (sta!=null){try {sta.close();} catch (SQLException e) {e.printStackTrace();}}  if (con!=null){try {con.close();} catch (SQLException e) {e.printStackTrace();}}}
}

JDBC与数据库连接相关推荐

  1. day04 JDBC java数据库连接

    day04 JDBC java数据库连接 yuxiaohu已关注 2017.12.03 16:12:19字数 139阅读 85 1 导包 mysql 提供的实现java接口的包路径 C:\Progra ...

  2. Java -- JDBC 学习--数据库连接池

    JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...

  3. JavaWeb:JDBC之数据库连接池

    JDBC系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 池参数(所有池参数都有默认值) ...

  4. 基于JDBC的数据库连接池技术研究与应用

    引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开 ...

  5. Java JDBC和数据库连接池 韩顺平老师自学笔记

    JDBC和数据库连接池 JDBC 概述 基本介绍 原理示意图 代码示例 JdbcInterface 模拟Java公司提供给其它数据库厂商的接口,供给调用 TestJdbc 模拟一个类来实现数据库的调用 ...

  6. 【JDBC】数据库连接池技术

    文章目录 一.数据库连接池技术 二.多种开源的数据库连接池 一.数据库连接池技术 1.数据库连接池的基本思想︰ 就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接 ...

  7. JDBC 关闭数据库连接与自动提交

    // Jdbc关闭数据库连接时,会隐含一个提交事务的操作 private final static String DB_DRIVER = "oracle.jdbc.driver.Oracle ...

  8. JDBC以及数据库连接池的使用

    文章目录 JDBC 步骤 数据库连接池 1.概念 2.接口规范方法 3.第三方数据库连接池技术 C3p0 Druid:由阿里提供 Druid工具类 JDBC 概念 ​ JDBC是sun公司提供的一套用 ...

  9. [JDBC] 获取数据库连接方式

    方式一:将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接 此种方式的好处? 1.实现了数据与代码的分离.实现了解耦 2.如果需要修改配置文件信息,可以避免程序重新打包. ...

  10. 从JDBC到数据库连接池

    文章目录 基本的JDBC操作方式 基本的JDBC操作在高并发的情况下带来的问题 第三方应该具备条件 连接池的初步设计 C3P0从数据源获取到连接的过程 如何从C3P0获取连接池状态信息 基本的JDBC ...

最新文章

  1. Pytorch: 命名实体识别: BertForTokenClassification/pytorch-crf
  2. 一行代码不用写,就可以训练、测试、使用模型,这个star量1.5k的项目帮你做到...
  3. 字符串异或c语言编写,C语言实现字符串的异或校验.doc
  4. Mybatis Plus 是如何实现动态 SQL 语句的?原理你懂吗?
  5. matlab 计算大圆距离,已知两点经纬度计算两点之间的大圆距离
  6. python中如何打印两行代码间的空行_python 打印几行空行、 打印不换行
  7. install scikit-learn
  8. selenium, firefox, python环境搭建指南
  9. .NET 内存管理与垃圾回收:实现IDisposable接口和析构函数
  10. python 类函数 实例函数_python_30期【实例函数 类里面的函数】
  11. 单片机ADC采样算法----中位值平均滤波法
  12. Egret中的三种单例写法
  13. php赛车,php调用接口及三分赛车平台搭建出租编写接口
  14. mid制作乐谱_作品1:MIDI彩虹钢琴(将简谱或五线谱制作成mid)
  15. 英雄无敌王朝 服务器维护,《魔法门之英雄无敌:王朝》版本更新公告
  16. pixhawk启动脚本分析
  17. R语言差异检验:非参数检验
  18. Python中字母大小写转换
  19. Vue进阶(六十八):JS 判断当前浏览器是否为 IE
  20. 第九层(1):初识STL

热门文章

  1. python微信小程序实例制作入门_python flask零基础打造微信小程序实战教程
  2. 爬虫6_周杰伦新歌《Mojito》B站弹幕分析
  3. 【转载】测试面试知识点
  4. 钓鱼网站盯上加油卡充值
  5. 华为手机的视频剪辑功能居然这么强大,太实用啦
  6. 各大EMM厂商功能比较 第三部分 Network Gateway比较
  7. deepfacelab应用报错原因和解决办法
  8. matlab的GUI怎么嵌入图片,如何用matlab在GUI中显示一张图片
  9. 二手闲鱼源码 php 如何搭建
  10. 进程间同步---system v ipc 对象信号灯集