JDBC入门
1.之前操作MySQL数据库:使用MySQL客户端工具连接MySQL服务器,发送sql语句到MySQL服务器,执行。
2.JDBC:使用Java程序发送sql语句到数据库服务器端执行。JDBC是Oracle-Sun公司设计的一套专门用于Java程序操作数据库的接口。
java.sql:常用接口
javax.sql:扩展或者新特性的一些接口
Java不使用JDBC技术连接数据库图解:
Java使用JDBC技术连接数据库图解:
Java连接数据库图解:
语句执行者可以理解为船,connection连接可以理解为河流,船带着sql语句穿过河流到达数据库。
3.使用JDBC发送sql的条件:
连接MySQL数据库:
(1)MySQL数据库主机地址;
(2)端口号;
(3)数据库用户名;
(4)数据库密码;
(5)连接的数据库。
private static String url = "jdbc:mysql://localhost:3306/XSGL";
//jdbc协议:mysql协议://主机地址:端口号/需要连接的数据库名称
4.Java程序连接数据库需要引用mysql-connector-java-5.1.7-bin.jar包:
(1)选择mysql驱动包里面的mysql-connector-java-5.1.7-bin.jar文件并复制:
(2)将mysql-connector-java-5.1.7-bin.jar拷在项目下的webroot/web-inf/lib目录:
(3)选中mysql-connector-java-5.1.7-bin.jar文件右键–>Build Path–>Add to Bulid Path,显示如下图即代表成功:
JDBC核心API
1.Driver接口:每个驱动程序类必须实现的接口。
DriverManager 会试着加载尽可能多的它可以找到的驱动程序,然后,对于任何给定连接请求,它会让每个驱动程序依次试着连接到目标 URL。
(1)注册驱动:
在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。我们发现mysql驱动程序的Driver实现类已经帮我们在静态代码块中注册好了驱动,我们在此时只需要将Driver实现类加载到我们的内存中,static代码块就会自动执行,我们的驱动也就自动注册了。
Class.forName("foo.bah.Driver")
(2)通过类 DriverManager创建一个到给定 URL 的数据库连接:
static Connection getConnection(String url)
static Connection getConnection(String url, Properties info)
static Connection getConnection(String url, String user, String password)
需求:利用Driver接口获取Java程序连接数据库的连接对象。
package com.jdbc.a_driver;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DriverDemo {
private static String url = "jdbc:mysql://localhost:3306/XSGL"";
//jdbc协议:mysql协议://主机地址:端口号/需要连接的数据库名称
private static String user = "root";
private static String password="root";
public static void main(String[] args) throws Exception {
conn();
}
private static void conn() throws Exception {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取Java连接数据库的对象
Connection conn = DriverManager.getConnection(url, user, password);
//打印这个连接对象
System.out.println(conn);
}
}
2.Connection接口:与具体的数据库的连接(会话)。
(1)创建一个静态sql语句对象:
Statement createStatement()
(2)创建预编译的sql语句对象:
PreparedStatement prepareStatement(String sql)
(3)创建存储过程的sql语句对象:
CallableStatement prepareCall(String sql)
3.Statement接口:用于执行静态sql语句。
(create/alter/drop) DDL语句
(insert/update/delete)DML语句
(select)DQL查询语句
(1)执行更新操作的sql语句:
int executeUpdate(String sql)
(2)执行查询操作的sql语句:
ResultSet executeQuery(String sql)
4.PreparedStatement接口:用于执行预编译的 SQL 语句(是Statement的子接口)。
(1)执行更新操作的sql语句:
int executeUpdate()
(2)执行查询操作的sql语句:
ResultSet executeQuery()
5.CallableStatement接口:用于执行 SQL 存储过程的接口(是PreparedStatement的子接口)。
执行存储过程的sql语句:
ResultSet executeQuery()
6.ResultSet接口:结果集对象。 存储所有数据库查询的结果,用该对象进行数据遍历。
(1)ResultSet对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。
next()方法把光标移动到下一行。如果下一行有数据,返回true,如果没有下一行数 据,返回false。
boolean next()
(2)ResultSet接口提供用于从当前行获取列值得方法(getBoolean,getLong等)。可以使用列的索引编号或列的名称获取值。
getXXX(列索引|列字段名称)
一般情况下,使用索引较为高效。但是建议以后使用的时候,最好使用列名称,这样会提高程序的维护性。
(3)用作获取方法的输入的列名称不区分大小写。
- 注意:
- 如果光标在第一行之前,使用rs.getXX()获取列值,报错:Before start of result set
- 如果光标在最后一行之后,使用rs.getXX()获取列值,报错:After end of result set
如何从结果集中取出我们想要的数据:
(1)根据每一列的列号和每一列的数据类型调用相应的getXxx(int columnIndex)获取该字段的数据:
int getInt(int columnIndex) throws SQLException
String getString(int columnIndex) throws SQLException
(2)根据每一列的字段名称和每一列的数据类型调用getXxx(String columnLabel)获取该字段的数据:
int getInt(String columnLabel) throws SQLException
String getString(String columnLabel) throws SQLException