mysql jdbc 原理_java篇之JDBC原理和使用方法

JDBC学过但又属于很容易忘记的那种,每次要用到,都要看下连接模式。每次找又很费时间,总之好麻烦呀呀呀,所以写篇博客,总结下原理和常用接口,要是又忘了可以直接来博客上看,嘿嘿。

一、什么是JDBC

1、JDBC全称是 Java DataBase Connectivity,可以为多种关系型数据库DBMS提供统一的访问方式,主要目的是用Java来操作数据库。

2、JDBC API主要负责三个功能:(1)与数据库建立连接(2)发送SQL语句给数据库(3)数据库将结果返回

2d48323eeff2cd4bdd00f7d8b22d688f.png

具体过程大致是这样子的:

1f7fcbf41454df5ed663082eeb41e637.png

3、实现方法:(1)DriverManager:管理jdbc驱动(2)Connection 连接数据库(3)Statement(PreparedStatement)增删改查 CallableStatement 调用数据库的存储过程和存储函数 (4)ResultSet 结果集

4、实现步骤:(1)导入驱动,加载具体驱动类(2)与数据库建立连接(3)执行SQL语句(4)返回结果

5、常见数据库 oracle,mysql,SQLServer的加载驱动

oracle---具体驱动类:oracle.jdbc.OracleDriver     连接字符串:jdbc:oracle:thin:@localhost(ip地址):1521:ORCL

mysql---具体驱动类:com.mysql.jdbc.Driver    连接字符串:jdbc:mysql://localhost(ip地址):3306/数据库实名

SQLServer---具体驱动类:com.microsoft.sqlserver.jdbc.SQLServerDriver     连接字符串:jdbc.microsoft.sqlserver:localhost(ip地址):1433;数据库实名

6、举个实例(以mysql数据库为例)实现对数据库增删改 查

建一个JDBCDemo

public classJDBCDemo {private String driver="com.mysql.jdbc.Driver";private String url="jdbc:mysql://localhost:3306/test";private String username="root";private String password="root";

Connection conn=null;

Statement statement=null;

ResultSet set=null;public voidupdateSql(){try{//加载驱动类

Class.forName(driver);//与数据库建立连接

conn=DriverManager.getConnection(url,username,password);//发送SQL语句

statement=conn.createStatement();//插入数据

String sql="insert into user(username,password) values('114','1234')";//修改数据//String sql="update user set password='1232' where id=2"//删除数据//String sql= "delete from user where id=2";//sql语句结果,一般进行 增删改 的SQL语句用excuteUpdate

int count=statement.executeUpdate(sql);if(count>0){

System.out.println("操作成功");

}else{

System.out.println("操作失败");

}

}catch(ClassNotFoundException e){

e.printStackTrace();

}catch(SQLException e){

e.printStackTrace();

}catch(Exception e){

e.printStackTrace();

}finally{try{if (statement == null) {//用判断来防止statement空异常

statement.close();

}if (conn == null) {

conn.close();

}

}catch(SQLException e){

e.printStackTrace();

}

}

}public voidquerySql(){try{//加载驱动类

Class.forName(driver);//与数据库建立连接

conn=DriverManager.getConnection(url,username,password);//发送SQL语句

statement=conn.createStatement();

String sql="select * from user where username='111' and password='1234' ";//返回结果集

set=statement.executeQuery(sql);while(set.next()){

//用两种方式获取值,一种是根据列名,一种是所在的列数

String name=set.getString("username");

String pass=set.getString("password");//String name=set.getString(2);//String pass=set.getString(3);

System.out.println(name+","+pass);

}

}catch(ClassNotFoundException e){

e.printStackTrace();

}catch(SQLException e){

e.printStackTrace();

}catch(Exception e){

e.printStackTrace();

}finally{try{if (statement == null) {//用判断来防止statement空异常

statement.close();

}if (conn == null) {

conn.close();

}

}catch(SQLException e){

e.printStackTrace();

}

}

}

上述代码主要使用Statement方式发送SQL,还有preparedStatement方式。他们之间有相同点,但是又不是一样,下面就来比较下Statement和PreparedStatement

二、Statement与PreparedStatement的比较

Statement:(1)产生方式:Connection.createStatement()(2)增删改 executeUpdate()(3)查询 executeQuery()(4)一般将SQL语句放在executeUpdate()中

PreparedStatement:(1)产生方式:Connection.prepareStatement()(2)增删改 executeUpdate()(3)查询 executeQuery()(4)一系列SetXXX方法(5)将SQL放在Connection.PrepareStatement(SQL)(6)需要预编译

查看PreparedStatement的源码 ,可知PreparedStatement继承Statement,Statement里有的方法PreparedStatement都有,但是PreparedStatement还有很多SetXXX方法

19e9dd480c9a716dd91e7af78951b3c1.png

d9b9393adfbeb4ddff0df2a2d3e763ff.png

用代码直观的体现两者的区别:

1be495845172d9c79b6b84439f5cac0a.png

除了这部分之外,其他和上述代码一样,多了一步预编译。

三、PreparedStatement较Statement的优势

(1)编码更加简洁灵活:在PreparedStatement中SQL语句后的查询条件,插入的值可以用占位符(?)来表示,不用像Statement一样写具体的值,只需要调用PreparedStatement中的SetXXX方法赋值即可。

(2)提高性能:如果要执行一条SQL语句100回,Statement需要connection,createStatement(sql)语句编译SQL100次,PreparedStatemnet只需要编译SQL语句一回(即connection.PreparedStatement(sql)),重复执行100次preparedStatement.executeQuery();减少编译SQL次数,提高性能。

(3)安全性高,可以有效防止SQL注入的风险:Statement存在SQL注入的风险,PreparedStatement可以防止SQL注入的风险。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本
使用JDBCMySQL数据库中查询数据的方法可以分为以下几步: 1. 加载驱动:使用Class.forName()方法加载MySQLJDBC驱动。 2. 获取连接使用DriverManager.getConnection()方法获取数据库连接。 3. 创建Statement对象:使用Connection对象的createStatement()方法创建Statement对象。 4. 执行查询语句:使用Statement对象的executeQuery()方法执行查询语句,并将结果保存在ResultSet对象中。 5. 处理结果集:使用ResultSet对象的getXXX()方法获取查询结果。 6. 关闭连接使用Connection对象的close()方法关闭连接。 下面是一个简单的示例代码: ```java import java.sql.*; public class QueryDemo { public static void main(String[] args) { try { // 加载驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取连接 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, user, password); // 创建Statement对象 Statement stmt = conn.createStatement(); // 执行查询语句 String sql = "SELECT * FROM student"; ResultSet rs = stmt.executeQuery(sql); // 处理结果集 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("id:" + id + ", name:" + name + ", age:" + age); } // 关闭连接 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 注意:在使用完ResultSet、Statement和Connection对象后,需要及时关闭连接,以释放资源。另外,为了避免SQL注入等安全问题,应该使用PreparedStatement对象来执行带有参数的SQL语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值