1、JDBC基本概念
JDBC(Java DataBase Connectivity):Java数据库连接,Java语言操作数据库。
JDBC的本质:其实是官方(Sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
2、快速入门
步骤:
- 导入驱动jar包:下载地址 MySQL :: Download MySQL Connector/J (Archived Versions)
驱动jar包即解压后的 mysql-connector-java-5.1.37-bin.jar 文件。 导入驱动jar包分两步:① 复制 mysql-connector-java-5.1.37-bin.jar 到项目的libs目录下(新建一个libs目录);② 右键libs文件夹,点击 Add as library 。 - 注册驱动:
Class.forName("com.mysql.jdbc.Driver");
- 获取数据库的连接对象Connection:
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase?characterEncoding=utf-8", "root", "123456");
- 定义sql:
String sql = "update student set age = 0 where id = 1";
- 获取执行sql语句的对象Statement:
Statement stmt = conn.createStatement();
- 执行sql,接收返回的结果:
int count = stmt.executeUpdate(sql);
- 处理结果:
System.out.println(count);
代码演示:
package JDBCPackage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* JDBC快速入门
*/
public class JdbcDemo1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1、导入驱动jar包 -> libs文件夹
//2、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3、获取数据库的连接对象
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydatabase?characterEncoding=utf-8", "root", "123456");
//4、定义sql语句
String sql = "update student set age = 0 where id = 1";
//5、获取执行sql的对象
Statement stmt = conn.createStatement();
//6、执行sql
int count = stmt.executeUpdate(sql);
//7、处理结果
System.out.println(count);
//8、释放资源
stmt.close();
conn.close();
}
}
3、详解各个对象
3.1、DriverManager:驱动管理对象。
3.1.1、DriverManager的功能:
1、注册驱动:告诉程序该使用哪一种数据库驱动jar包。
-注册与给定的驱动程序DirverManager
static void registerDriver(Driver driver)
写代码时使用:Class.forName("com.mysql.jdbc.Driver");
通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块:
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
注意:mysql5之后的驱动的jar包可以省略注册驱动的步骤。2、
2、获取数据库连接对象:
-获取数据库连接对象
static Connection getConnection(String url, String user, String password)
参数:
url:指定连接的路径。
mysql的语法写url:jdbc:mysql://ip地址(域名):端口号/数据库名称。
如果连接的是本机mysql服务器,并且mysql服务器默认端口是3306,则url可以简写为jdbc:mysql:///数据库名称
user:用户名
password:密码
范例:
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydatabase?characterEncoding=utf-8", "root", "123456");
3.2、Connection:数据库连接对象。
3.2.1、Connection的功能
1、获取执行sql的对象:
-获取执行sql的对象。两种方式:
Statement createStatement()
PreparedStatement preparedStatement(String sql)
2、管理事务:
-开启事务。调用该方法,设置参数为false,即为开启事务。
void setAutoCommit(boolean autoCommit)
-提交事务。
void commit()
-回滚事务
void rollback()
3.3、Statement:执行sql的对象。
3.3.1、Statement的功能
1、执行sql:
-执行任意的sql(了解即可)
boolean execute(String sql)
-执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句
int executeUpdate(String sql)
返回值:影响的行数,可以通过这个影响的行数来判断DML语句是否执行成功。
-执行DQL(select)语句
ResultSet executeQuery(String sql)
代码演示:
package JDBCPackage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* account表添加一条记录 insert语句
*/
public class JDBCDemo2 {
public static void main(String[] args) {
Statement stmt = null;
Connection conn = null;
try {
//1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2、定义sql
String sql = "insert into account values (null,'王五',3000)";
//3、获取Connection对象
conn = DriverManager.getConnection("jdbc:mysql:///mydatabase?characterEncoding=utf-8",
"root", "123456");
//4、获取执行sql的对象
stmt = conn.createStatement();
int count = stmt.executeUpdate(sql); //返回影响的行数
//5、处理结果
System.out.println(count);
if(count > 0) {
System.out.println("添加成功!");
}else {
System.out.println("添加失败!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//避免空指针异常
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
3.4、ResultSet:结果集对象
3.4.1、ResultSet的功能
ResultSet为结果集对象,用来封装查询的结果。
-游标向下移动一行
boolean next():
-获取数据。
getXxx(参数)
Xxx代表数据类型,如int getInt(), String getString(), ...
参数:两种重载:
int:代表列的编号。 如:getString(1);为获取该行第1列的值
String:代表列名称。 如:getString("name");
3.5、PreparedStatement:是Statement的子类,可以执行sql的对象,功能更强大。
PreparedStatement