JDBC专题(一)-JDBC入门

网友投稿 624 2022-11-22

JDBC专题(一)-JDBC入门

JDBC专题(一)-JDBC入门

#### 本章任务 JDBC概念 JDBC工作原理 JDBC连接数据库步骤 JDBC基础使用

1.JDBC的概念

JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。

2.JDBC的工作原理

3.JDBC连接数据库步骤

4.JDBC环境搭建

4.1.准备测试的数据

4.2.环境搭建

5.JDBC完成查询

/** * @author bruceliu * @time 2019年4月1日上午10:19:16 * @Description 使用JDBC连接数据库,并查询stars表中所有的数据 */public class Demo1 { public static void main(String[] args) { Connection conn = null; // 数据库的连接对象,获取到这个对象 表示连接上数据库了 Statement st = null; // 执行SQL语句的对象 ResultSet rs = null; // SQL语句的查询结果集对象 try { // 1.加载驱动 放入Mysql驱动类的全路径,让JVM预先加载这个类到内存中 Class.forName("com.mysql.jdbc.Driver"); // 2.获取数据库连接,三个参数: 1.连接字符串 2.数据库账号 3.密码 // jdbc:mysql://127.0.0.1:3306/filmdb?useUnicode=true&characterEncoding=utf-8 conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/filmdb?useUnicode=true&characterEncoding=utf-8", "root", "123"); // 3.获取执行SQL对象 st = conn.createStatement(); // 4.执行SQL(查询) 并获得结果 String sql = "SELECT * FROM STARS"; rs = st.executeQuery(sql); // 4.1 显示结果集中的数据(遍历结果集对象) System.out.println("编号\t姓名\t年龄\t生日\t作品\t性别\t身份证号"); while (rs.next()) { int id = rs.getInt("ID"); // 表中字段不区分大小写,根据列名获取对应的值 String name = rs.getString("NAME"); int age = rs.getInt("AGE"); String birthday = rs.getString("BIRTHDAY"); String works = rs.getString("WORKS"); String sex = rs.getString("SEX"); String idcard = rs.getString("IDCARD"); System.out.println(id+"\t"+name+"\t"+age+"\t"+birthday+"\t"+works+"\t"+sex+"\t"+idcard); } } catch (Exception e) { e.printStackTrace(); }finally{ //5. 关闭流 try { if(rs!=null){ rs.close(); } if(st!=null){ st.close(); } if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } }}

6.JDBC-API详解

6.1.DriverManager类详解

DriverManager是驱动管理类,Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法

6.1.1.方法1

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

注意:在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二: 1、查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象(因为在mysql中的Driver中有静态代码块,已经注册了)。 2、程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。

推荐方式:​​​Class.forName("com.mysql.jdbc.Driver");​​ 会把com.mysql.jdbc.Driver中的静态代码块执行一次。会实现驱动的注册。把指定的类加载到内存中!

6.1.2.方法2

DriverManager.getConnection(url, user, password)

Oracle写法:jdbc:oracle:thin:@localhost:1521:sidSqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sidMySql写法:jdbc:mysql://localhost:3306/sid

如果连接的是本地的Mysql数据库,并且连接使用的端口是3306,那么的url地址可以简写为: jdbc:mysql:///数据库

常用属性:useUnicode=true&characterEncoding=UTF-8 作用:解决入库乱码问题 url最终格式: jdbc:mysql://主机IP:端口/库名?useUnicode=true&characterEncoding=UTF-8

6.2.Connection类详解

6.2.1.Connection类作用

与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。如果想要发送sql到数据库,一定要通过这个连接。

Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的。

6.2.2.Connection类常用方法

createStatement():创建向数据库发送sql的statement对象。prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。prepareCall(sql):创建执行存储过程的callableStatement对象。 setAutoCommit(boolean autoCommit):设置事务是否自动提交。commit() :在链接上提交事务。rollback() :在此链接上回滚事务。

6.3.Statement类讲解

6.3.1.Statement类作用

Jdbc程序中的Statement对象用于向数据库发送SQL语句

6.3.2.Statement类常用方法

executeQuery(String sql) :用于向数据发送查询语句。executeUpdate(String sql):用于向数据库发送insert、update或delete语句execute(String sql):用于向数据库发送任意sql语句addBatch(String sql) :把多条sql语句放到一个批处理中。executeBatch():向数据库发送一批sql语句执行。

6.4.ResultSet类讲解

6.4.1.Statement类作用

Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

6.4.2.Statement类常用方法

ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法: 获取任意类型的数据

getObject(int index)getObject(string columnName)

获取指定类型的数据,例如:

getString(int index)getString(String columnName)

ResultSet还提供了对结果集进行滚动的方法:

next():移动到下一行Previous():移动到前一行absolute(int row):移动到指定行beforeFirst():移动resultSet的最前面。afterLast() :移动到resultSet的最后面。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《我要进大厂系列 七》-谈谈你对强软弱虚四种引用理解?
下一篇:解决Hmily与Feign冲突报错 NullPointerException的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~