浙江网站建设平台,阿里巴巴国际站运营模式,免费的小程序模板网站,平凉市网站建设JDBC
JDBC 是 Java Database Connectivity 的缩写#xff0c;是允许Java 程序访问并操作关系型数据库数据的一套 应用程序接口。本身就是一种规范#xff0c;它提供的接口有一套完整的#xff0c;可移植的访问底层数据库的程序。
JDBC 的架构
JDBC API支持两层和三层处理…JDBC
JDBC 是 Java Database Connectivity 的缩写是允许Java 程序访问并操作关系型数据库数据的一套 应用程序接口。本身就是一种规范它提供的接口有一套完整的可移植的访问底层数据库的程序。
JDBC 的架构
JDBC API支持两层和三层处理模型进行数据库访问但在一般的JDBC体系结构由两层组成 JDBC API: 提供了应用程序对JDBC的管理连接。 JDBC Driver API: 支持JDBC管理到驱动器连接。
JDBC API的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库。JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源。
JDBC常用类和接口
类或接口说明DriverManager这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接Driver此接口处理与数据库服务器通信。很少直接使用驱动程序Driver对象一般使用DriverManager中的对象它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息Connection此接口与接触数据库的所有方法。连接对象表示通信上下文即与数据库中的所有的通信是通过此唯一的连接对象Statement / PreparedStatement创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数ResultSet这些对象保存从数据库后执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器可以通过移动它来检索下一个数据SQLException用于处理发生在数据库应用程序中的任何错误
常用的JDBC驱动程序名和连接URL
URL的写法为 jdbc:数据库名称如mysql/数据库地址:3306/databaseName?参数名参数值 常用数据库实例
数据库驱动名称URL格式MySQL 5.xcom.mysql.jdbc.Driverjdbc:mysql://hostname/databaseNameOracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:hostname:portNumber:databaseNamePostgreSQLorg.postgresql.Driverjdbc:postgresql://hostname:port/dbname
注意mysql版本8以上的驱动名为com.mysql.cj.jdbc.Driver
Connection
Jdbc程序中的Connection它用于代表数据库的链接Collection是数据库编程中最重要的一个对象客户端与数据库所有交互都是通过connection对象完成的创建方法为
Connection conn DriverManager.getConnection(url,username,password); 这个对象的常用方法
方法描述createStatement()创建向数据库发送sql的statement对象。prepareStatement(sql)创建向数据库发送预编译sql的PrepareSatement对象。prepareCall(sql)创建执行存储过程的callableStatement对象。setAutoCommit(boolean autoCommit)设置事务是否自动提交。commit()在链接上提交事务。rollback()在此链接上回滚事务。示例
public class DBUtil {private final static String DRIVERCLASS com.mysql.cj.jdbc.Driver;private final String userName root;private final String passwd 152887;private final String url jdbc:mysql://127.0.0.1:3306/rbas?serverTimeZoneAsia/ShangHai;/*** 加载驱动*/static {try {Class.forName(DRIVERCLASS);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}public DBUtil() {}/*** 创建数据库连接* return connection 链接*/Connection connection null;try {connection DriverManager.getConnection(url,userName,passwd);} catch (SQLException e) {throw new RuntimeException(e);}}Statement 和 PreperedStatement
Statement
Jdbc程序中的Statement对象用于向数据库发送SQL语句创建方法为
Statement st conn.createStatement();Statement对象常用方法
方法含义executeQuery(String sql)用于向数据发送查询语句。executeUpdate(String sql)用于向数据库发送insert、update或delete语句execute(String sql)用于向数据库发送任意sql语句addBatch(String sql)把多条sql语句放到一个批处理中。executeBatch()向数据库发送一批sql语句执行。
示例
Statement st null;
//获取用于向数据库发送sql语句的statement
st conn.createStatement();
//向数据库发sql
String sql select id,name,password,email,birthday from users;
st.executeQuery(sql);PreperedStatement
PreperedStatement是Statement的子接口它的实例对象可以通过调用
PreperedStatement st conn.preparedStatement();实例
PreparedStatement preparedStatement null;
String sql select * from users where name? and password?;// 获取用于向数据库发送sql语句的Preperedstatement
preparedStatement conn.preparedStatement(sql);//在此次传入进行预编译
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
// 向数据库发sql
preparedStatement.executeQuery();//在这里不需要传入sql
ResultSet
ResultSet用于代表 SQL 语句的执行结果。Resultset 封装执行结果时采用的类似于表格的方式ResultSet 对象维护了一个指向表格数据行的游标初始的时候游标在第一行之前调用 ResultSet.next() 方法可以使游标指向具体的数据行进行调用方法获取该行的数据。
获取行相关方法
ResultSet提供了对结果集进行滚动的方法
next()移动到下一行Previous()移动到前一行absolute(int row)移动到指定行beforeFirst()移动resultSet的最前面。afterLast() 移动到resultSet的最后面。
获取值相关方法
ResultSet既然用于封装执行结果的所以该对象提供的都是用于获取数据的get方法 获取任意类型的数据 getObject(int index)getObject(string columnName) 获取指定类型的数据 getString(int index)getString(String columnName)
常用数据类型转换对比表
SQL类型Jdbc对应方法返回类型bit(1)bit(n)getBooleangetBytes()Booleanbyte[]tinyintgetByte()BytesmallintgetShort()ShortintgetIntIntbigintgetLong()Longchar,varchar,longvarchargetStringStringtext(clob) blobgetClob()getblob()ClobblobdategetDate()java.sql.DatetimegetTime()java.sql.TimetimestampgetTimestampjava.sql.Timestamp
释放资源
Jdbc程序运行完后切记要释放程序在运行过程中创建的那些与数据库进行交互的对象这些对象通常是ResultSet, Statement和Connection对象。 注意为确保资源释放代码能运行资源释放代码也一定要放在finally语句中。 示例 public void close(Connection connection , PreparedStatement preparedStatement , ResultSet resultSet){try {if (resultSet null) {resultSet.close();}if (preparedStatement null) {preparedStatement.close();}if (connection null) {connection.close();}} catch (SQLException e) {throw new RuntimeException(e);}}//使用 懒 就不写在方法中了try {preparedStatement connection.prepareStatement(sql);//填充占位符sql语句的参数int len args.size();for (int i 0; i len; i) {preparedStatement.setObject(i1,args.get(i));}//执行SQL语句并返回影响的数据量count preparedStatement.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}finally {close(connection ,preparedStatement ,null);}使用时需下载jdbc.jar包完整程序示例多表联合查询SQL语句请自行复习包括jar包放在资源文件中。