JDBC概念
JDBC(Java Data Base Connection):数据库连接,一种标准的Java应用程序接口(Java API),用来连接Java编程语言和数据库
常见的组件
DriverManager:这个类是管理一系列数据库的驱动程序,用来匹配连接的数据的通信协议,识别JDBC下某个子协议的第一驱动程序将被用于建立数据库连接
Driver:接口处理与数据库服务器通信,使用DriverManager管理各种数据库类型的对象,管理的是Driver类型的对象,也抽象与驱动程序对象相关的详细信息
Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,
即:所有与数据库的通信仅通过这个连接对象进行。
Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。
除了执行存储过程以外,一些派生的接口也接受参数。
ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。
它作为一个迭代器,让您可以通过它的数据来移动。
SQLException : 这个类处理发生在数据库应用程序的任何错误。
JDBC开发流程
1、准备阶段
下载MySQL的驱动包,使用maven管理
<!--MySQL驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
2、编程阶段
//1、加载数据库的驱动 "com.mysql.jdbc.Driver" 在5.XXX版本下驱动全路径
Class.forName("com.mysql.jdbc.Driver");
try {
/**
* 2、获取数据库的连接
* Connection getConnection(String url,String user, String password)
* url:连接数据库的信息 =>jdbc:子协议(区分不同的数据库;比MySQL)://ip:端口/库名
* =>jdbc:mysql://localhost:3306/test
* user:用户名
* password:密码
*/
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
System.out.println("连接成功啦");
//3、创建Statement对象
Statement statement = connection.createStatement();
//4、执行相关的SQL
String sql = "select * from student";
ResultSet resultSet = statement.executeQuery(sql);
//5、对结果集处理
while (resultSet.next()) {
int sid = resultSet.getInt("SID");
String sname = resultSet.getString("Sname");
int sage = resultSet.getInt("Sage");
System.out.println(sid+","+sname+","+sage);
}
//6、关闭资源
connection.close();
statement.close();
resultSet.close();
} catch (SQLException e) {
System.out.println("连接失败");
e.printStackTrace();
}
常见API
Connection接口
Connection接口:代表数据库连接对象(一个物理连接会话)
创建statement对象
Statement createStatement():创建一个Statement对象
PreparedStatement prepareStatement(String sql):创建一个具有预编译功能PreparedStatement对象
CallableStatement prepareCall(String sql):创建一个具有回调功能的CallableStatement对象
Statement statement = connection.createStatement();
String sql = "select * from student where SID = "+SID;
ResultSet resultSet = statement.executeQuery(sql);
将参数直接拼接在SQL上执行
● 执行语句
int executeUpdate(String sql):执行 DML 语句时返回受影响的行数;执行 DDL 语句时返回 0
int executeUpdate(String sql, int autoGeneratedKeys):执行给定的 DML 语句,并设置此 Statement 生成的自动生成键是否能用于获取
ResultSet executeQuery(String sql):执行 DQL 语句,并返回査询结果对应的 ResultSet 对象
● 批量更新
void addBatch(String sql):将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中
int[] executeBatch():执行一批命令void clearBatch():清空此 Statement 对象的当前 SQL 命令列表
● 获取自动生成主键
ResultSet getGeneratedKeys():获取由于执行此 Statement 对象而创建的所有自动生成的主键
PreparedStatement prepareStatement(String sql):
//参数在SQL中以"?"占位符形式给定
PreparedStatement preparedStatement = connection.prepareStatement("select * from student where SID = ? and Sname = ?");
//调用相应的setXXX方法 void setInt(int parameterIndex, int x) 第一个参数表示参数位置(从1开始) 第二个参数表示值
preparedStatement.setInt(1,SID);
preparedStatement.setString(2,"wulun");
ResultSet resultSet1 = preparedStatement.executeQuery();
将SQL中的参数以“?”占位符表示,参数则通过setXX操作,将SQL和参数分别传递到服务端,进行预编译,如果没有问题,在继续执行,可以避免SQL注入问题
● PreparedStatement 接口,Statement 的子接口,用于执行带占位符(?)参数的 SQL 语句
● 给参数设值即添加到批处理viod setXxx(int parameterIndex, Xxx value):根据索引(从 1 开始)将 SQL 语句中指定位置的参数设置为 value 值,如果不清楚预编译 SQL 语句中各参数的类型,可以使用 setObject() 方法来传入参数void setBlob(int parameterIndex, InputStream inputStream):将指定参数设置为输入流对象void addBatch():将一组参数添加到此 PreparedStatement 对象的批处理命令中(调用前需先为参数设置)
● 执行语句int executeUpdate():执行 DML 语句或 DDL 语句(无须接收 SQL 字符串)ResultSet executeQuery():执行 DQL 语句(无须接收 SQL 字符串)
ResultSet接口:结果集对象
boolean next() 来判断结果集中是否还有数据,并将光标从当前行移动到下一行
XXX getXXX(String columnLabel) 获取该行的指定的列的属性名
XXX getXXX(int columnIndex) 获取该行的索引