JDBC
是⼀种用于执行SQL语句的Java API,可以为多种数据库提供统⼀访问,由⼀组Java语⾔编写的类和接口组成。
JDBC的作用:JDBC是用于执行SQL语句的Java API(Java语言通过JDBC可以操作数据库)
JDBC 可以干三件事:
1.与数据库建立连接
2.将Java中拼写的SQL语句发送到数据库中执行
3.处理执行结果
JDBC在运行时执行的顺序如下。
(1). 由 DriverManager 类驱动数据库。
(2). 由 Connection 接口负责将Java程序和数据库建立连接。
(3). 由 Statement/PreparedStatement 接口将SQL语句发送到数据库中。
(4). 由 ResultSet 接口处理数据库返回的结果集。
DriverManager
java.sql.DriverManager 用于管理一组 JDBC 驱动程序的基本服务。可以通过该管理类来建立并获取和指定数据库之间的连接。
方法:
public static Connection getConnection(String url, String user, String password) :使⽤账号 user和密码 password ,建立到指定数据库 URL 的连接,连接成功后返回新的数据库连接
public static Connection getConnection(String url) :尝试查找了解给定URL的驱动程序(将数据库用户信息包含在 url 中)
public static void registerDriver(java.sql.Driver driver) :向 DriverManager 注册给定驱动程序
数据库连接字符串格式:
主协议:子协议://数据库服务器:端口号/数据库名称[?连接参数]
Connection接口
作用:让java程序与数据库之间建立连接,只有在数据库建立连接后,才能将sql语句发送到数据库中执行。
继承AutoCloseable接口
方法:
//创建一个Statement对象来将sql语句发送到数据库
Statement createStatement()
//创建一个PreparedStatement对象来将参数化的sql语句发送到数据库
PreparedStatement prepareStatement(String sql)
//创建一个PreparedStatement对象,该对象能获取自动生成的键
PreparedStatement prepareStatement(String sql,int autoGeneratedKeys)
//立即释放此Connection对象的数据库和JDBC资源,而不是等待它们被自动释放
void close()
//获取一个数据库连接对象(Connection)
getConnection()
//创建一个Statement对象
createStatement()
Statement接口
作用:将sql语句发送到数据库中,并告知数据库执行sql语句,获取数据库执行结果。
继承AutoCloseable接口
//执行给定的sql语句,该语句可能返回多个语句
boolean execute(String sql)
//执行给定的sql语句,该语句可能返回多个语句,并通知驱动程序所有自动生成的键都应该可用于获取
boolean execute(String sql,int autoGeneratedKey)
//执行给定的sql语句,该语句可能为insert,update或delete语句,或者不返回任何内容的sql语句(如SQL DDL语句)
int executeUpdate(String sql)
//执行给定的sql语句,并通过给定标志通知驱动程序由此Statement生成的自动生成键是否可用于获取
int executeUpdate(String sql,int autoGeneratedKey)
//执行给定的sql语句,该语句返回单个ResultSet对象
ResultSet executeQuery(String sql)
//获取是否关闭了此Statement对象
boolean isClosed()
//立即释放此Statement对象的数据库和JDBC资源,而不是等待该对象自动关闭时发生此操作
PreparedStatement接口
是Statement接口的子接口,表示预编译的sql语句的对象,用与执行预编译的sql语句并获取返回结果,sql语句被预编译并存储在PreparedStatement对象中。然后可以使用该对象多次高效地执行预编译sql语句。
PreparedStatement具有预编译,高效性的优点。
注:PreparedStatement可以更好的保护应用程序免受sql注入攻击,并且可以提高查询性能,因为预编译的语句可以在多次执行时重复使用
//在此PreparedStatement对象中执行sql语句,该语句可以是任何类的sql语句
boolean execute()
//使用给定对象设置指定参数的值。
void setBoject(int parameterIndex,Object x)
//在此PreparedStatement对象中执行sql语句,该语句必须是一个sql数据操作语言语句,比如insert,update,delete,或者返回无内容的sql语句,比如DDL语句
int executeUpdate()
//在此PreparedStatement对象中执行sql语句,并返回该查询生成的ResultSet对象
ResultSet executeQuery()
ResultSet接口
用于表示查询返回的结果集,通常通过执行数据库的查询语句生成。
ResultSet对象具有指向其当前数据行的指针。
方法:
//将指针从当前位置向下或向后移一行
boolean next()
//获取ResultSet对象当前行指定列的值,并以java编程语言中的Object类型返回。
Object getObject(int columnIndex)
//获取ResultSet对象当前行指定名称的值,并以java编程语言中的Object类型返回。
Object getObject(String columnLable)
//获取此ResultSet对象是否已关闭
boolean isClosed()
//立即释放此ResultSet对象的数据库和JDBC资源,而不是等待该对象自动关闭时发生此操作
void close()
注:在处理ResultSet对象时,需要确保在使用完ResultSet对象后及时关闭它,以释放资源。使用getInt()和getString()等方法获取每一行中的数据
ResultSetMetaData接口:
可用于获取关于ResultSet对象中列的类型和属性信息的对象,列的类型和属性信息被称为表的元数据。
//获取数据库名
String getCatalogName(int column)
//返回此ResultSet对象中的列数
int getColumnCount()
//若查询时起别名,结果返回别名
String getColumnLable()
//返回结果是原始的名字
String getColumnName()
//返回指定列的sql数据类型,sql默认的数字对应的数据类型
int getColumnTypeName(int cloumn)
//返回表名
String getTableName(int column)
//如果使用ResultSet.getObject方法从列中获取值,则返回构造该值的java类的完全限定名
String getColumnClassName(int column)