JDBC JDBC介绍&编程六步 CAMELLIA 2024-05-17 2024-09-11 JDBC 一、JDBC介绍
JDBC是Java语言连接数据库(Java DataBase Connectivity)
JDBC的本质是什么?
JDBC是SUN公司制定的一套接口(interface)
接口都有调用者和实现者
面向接口调用、面向接口写实现类,这都属于面向接口编程。
为什么SUN制定一套JDBC接口呢? 因为每个数据库的底层实现原理都不一样。
3. JDBC开发前的准备工作,先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath当中。
==JDBC编程六步 ==
[!IMPORTANT]
注册数据库(作用:告诉Java程序,即将要连接的是哪个品牌的数据库)
获取连接(表示JVM的进程和数据库进程之间的通道打开了,属于进程之间的通信,重量级、使用完一定要关闭。)
获取数据库操作对象(专门执行Sql语句的对象)
执行SQL语句(DQL DML…)
处理查询结果集(只有第四步执行的是select语句的时候,才会有第五步处理查询结果集。)
释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程通信,开启之后一定要关闭。)
二、JDBC快速入门
注册驱动
1 2 DriverManager.registerDriver(new com .mysql.cj.jdbc.Driver());
1 2 Class.forName("com.mysql.cj.jdbc.Driver" );
自动注册驱动:在 JDBC 4.0 及更高版本中,驱动程序 jar 包中的 META-INF/services/java.sql.Driver 文件会自动注册驱动程序。 所以在mysql 5之后的驱动包,可以省略Class.forName步骤。
获取连接
1 2 3 4 String url="jdbc:mysql://127.0.0.1:3306/testjdbc" ; String username="root" ; String password="24211" ; Connection connection = DriverManager.getConnection(url, username, password);
注意:使用配置文件绑定信息
获取数据库操作对象Statement
1 Statement statement=connection.createStatement();
执行sql
1 2 3 4 5 6 String sql = "update user set money=2000 where id=1" ;int count = statement.executeUpdate(sql);System.out.println(count); System.out.println(count==1 ?"数据更新成功" :"数据更新失败" );
JDBC中的sql语句不要写;
释放资源
1 2 3 4 5 6 7 8 9 10 11 12 13 try { if (statement!=null )statement.close(); }catch (SQLException e){ e.printStackTrace(); } try { if (connection!=null )connection.close(); }catch (SQLException e){ e.printStackTrace(); }
注意,释放顺序不能打乱。
2.1、快速开始完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 package com.jdbc.quickstart;import org.junit.jupiter.api.Test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import java.util.ResourceBundle;public class JDBCTest { @Test public void testQuickStart () { Connection connection=null ; Statement statement=null ; try { Class.forName("com.mysql.cj.jdbc.Driver" ); String url = "jdbc:mysql://127.0.0.1:3306/testjdbc?useSSL=false" ; String username = "root" ; String password = "24211" ; connection = DriverManager.getConnection(url, username, password); statement = connection.createStatement(); String sql = "update user set money=2000 where id=1" ; int count = statement.executeUpdate(sql); System.out.println(count); System.out.println(count==1 ?"数据更新成功" :"数据更新失败" ); }catch (SQLException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { if (statement!=null )statement.close(); }catch (SQLException e){ e.printStackTrace(); } try { if (connection!=null )connection.close(); }catch (SQLException e){ e.printStackTrace(); } } } }
2.2、使用资源绑定器绑定属性配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 package com.jdbc.quickstart;import org.junit.jupiter.api.Test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import java.util.ResourceBundle;public class JDBCTest { @Test public void testResourceBinding () { ResourceBundle bundle = ResourceBundle.getBundle("jdbc" ); String driver=bundle.getString("driver" ); String url=bundle.getString("url" ); String username=bundle.getString("username" ); String password=bundle.getString("password" ); Connection connection=null ; Statement statement=null ; try { Class.forName(driver); connection = DriverManager.getConnection(url, username, password); statement = connection.createStatement(); String sql = "update user set money=2000 where id=1" ; int count = statement.executeUpdate(sql); System.out.println(count); System.out.println(count==1 ?"数据更新成功" :"数据更新失败" ); }catch (SQLException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { if (statement!=null )statement.close(); }catch (SQLException e){ e.printStackTrace(); } try { if (connection!=null )connection.close(); }catch (SQLException e){ e.printStackTrace(); } } } }
2.3处理查询结果集 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 import org.junit.jupiter.api.Test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import java.util.ResourceBundle;public class JDBCTest { @Test public void testQueryResultSet () { ResourceBundle bundle = ResourceBundle.getBundle("jdbc" ); String driver = bundle.getString("driver" ); String url = bundle.getString("url" ); String username = bundle.getString("username" ); String password = bundle.getString("password" ); Connection connection = null ; Statement statement = null ; ResultSet resultSet = null ; try { Class.forName(driver); connection = DriverManager.getConnection(url, username, password); statement = connection.createStatement(); String sql = "select * from user" ; resultSet = statement.executeQuery(sql); while (resultSet.next()) { int id = resultSet.getInt("id" ); String name = resultSet.getString("username" ); double money = resultSet.getDouble("money" ); System.out.println("id: " + id + "\tname: " + name + "\tmoney: " + money); } } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { if (resultSet != null ) try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } if (statement != null ) try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } if (connection != null ) try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
[!NOTE]
这个填的是查询语句的列名称,如果起别名则要使用别名。
getString()方法特点:不管数据库中的数据是什么类型,都是以String形式取出。
当然也可以按数据类型取出,但是数据类型一定要匹配。
JDBC中所有下标从1开始,不是从0开始。