JDBC(Java Data Base Connectivity)是一种用于执行SQL语句的Java API可以为多种关系数据库提供统一访问它由一组用Java语言编写的类和接口组成。
JDBC对Java程序员而言是API对实现与数据库连接的服务提供商而言是接口模型。作为APIJDBC为程序开发提供了标准的接口。
JDBC连接数据库
创建一个以JDBC连接数据库的程序包含七个步骤
- 加载JDBC驱动程序
在连接数据库之前首先要加载想要连接的数据库的驱动到JVMJava虚拟机这通过java.lang.Class类的静态方法forName(String className)实现。
例如
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类加载驱动失败");
e.printStackTrace();
}
成功加载后会将Driver类的实例注册到DriverManger类中。
- 提供JDBC连接的URL
连接URL定义了连接数据库时的协议子协议数据源标识。
书写形式协议:子协议:数据源标识
协议在JDBC中总是以jdbc开始
子协议是桥连接的驱动程序或是数据库管理系统名称
数据源标识标记找到数据库来源的地址与连接端口。
例如Mysql的连接URL
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gdk;
其中useUnicode=true: 表示使用Unicode字符集。如果characterEncoding设置为gb2312或GBK本参数必须设置为true。characterEncoding=gbk: 字符编码方式。
- 创建数据库连接
要连接数据库想要向java.sql.DriverManager请求并获得Connection对象该对象就代表一个数据库的连接。
使用DriverManager的getConnection(String url, String username, String password)方法传入指定的欲连接的数据库的路径数据库的用户名和密码来获得。
例如
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "root";
try{
Connection con = DriverManager.getConnection(url, username, password);
}catch(SQLException e){
System.out.println("数据库连接失败");
e.printStackTrace();
}
- 创建一个Statement
要执行SQL语句必须获得java.sql.Statement实例Statement实例分为以下3种类型
1.执行静态SQL语句。通常通过Statement实例实现。
2.执行动态SQL语句。通常通过PreparedStatement实例实现。
3.执行数据库存储过程。通常通过CallableStatement实例实现。
具体实现方式
Statement stmt = con.createStatement();
preparedStatement pstmt = con.prepareStatement(sql);
CallableStatement cstmt=con.prepareCall("{CALL demoSp(?,?)}";
- 执行SQL语句
Statement接口提供了三种执行SQL语句的方法executeQuery, executeUpdate和execute
1. ResultSet executeQuery(String sqlString): 执行查询数据库的SQL语句返回一个结果集ResutltSet对象。
2. int executeUpdate(String sqlString): 用于执行INSERT, UPDATE或DELETE语句以及SQL DDL语句如CREATE TABLE和DROP TABLE等。
3. execute(sqlString):用于执行返回多个结果集多个更新计数或二者组合的语句。
具体实现的代码
ResultSet rs = stmt.executeQuery("SELECT * FROM ...");
int rows = stmt.executeUpdate("INSERT INTO ...");
boolean flag = stmt.execute(String sql);
- 处理结果
两种情况
1. 执行更新返回的是本次操作影响到的记录数。
2. 执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行并且它通过一套get方法提供了对这些行中数据的访问。
使用结果集ResultSet对象的访问方法获取数据
while(rs.next()){
String name=rs.getString("name");
String pass=rs.getString("1");
} //列是从左到右编号的并且从列1开始
- 关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭以释放JDBC资源关闭顺序和声明顺序相反
1. 关闭记录集
2. 关闭声明
3. 关闭连接对象
if(rs!=null){ //关闭记录集
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(stmt != null){ //关闭声明
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(conn !=null){ //关闭连接对象
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
实战
Step1. 创建一个Maven项目。