文章目录
- 1. JDBC
- 1.1. 什么是JDBC
- 1.2. 为什么使用JDBC
- 1.3. eclipse配置maven
- 1.4. 如何使用JDBC
- 1.5. 执行方法(Statement)
- 1.6. ResultSet(查询得到结果集)
- 1.7. 关闭资源(close)
- 1.8. 关闭顺序
- 1.9. 异常处理
- 1.10. JDBC封装
JDBC
什么是JDBC
- Java Database Connectivity
- JDBC是java中一套和数据库进行交互的API(应用程序编程接口)
为什么使用JDBC
- 因为java程序猿需要连接各种数据库(oracle,mysql,db2等)为了避免java程序猿每一种数据库都需要学习一遍,sun公司提出一个JDBC接口,各个数据库厂商去针对此接口写实现类(数据库驱动),这样的话java程序猿连接数据库只需要掌握JDBC接口的调用就可以操作各种数据库
eclipse配置maven
- 本机安装maven
- 修改远程仓库地址
- maven的配置文件settings中修改
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<name>Tedu Maven</name>
<mirrorOf>*</mirrorOf>
<!--<url>http://maven.tedu.cn/nexus/content/groups/public</url>-->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
</profiles>
<activeProfiles>
</activeProfiles>
</settings>
- 在eclispe中配置
- window —- > perferences —- > Maven — > User Settings —- > 在Global Settings中选择你的maven配置文件settings即可
- OK
- 新建项目
- New — > Maven Project — > Create Simple Project
- 第一次创建可能需要很长的时间
- 在pom.xml中写上依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tedu</groupId>
<artifactId>JDBCMaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
</dependencies>
</project>
如何使用JDBC
- 创建maven工程
- 下载mysql相关jar包
- 登录阿里私服: maven.aliyun.cn
执行方法(Statement)
execute(sql)
执行DDL create alterexecuteUpdate(sql)
执行DML insert update deleteexecuteQuery(sql)
执行select语句
Class.forName("com.mysql.jdbc.Driver"); //注册驱动
//链接数据库
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "root");
//创建Statement,执行sql语句的对象
Statement statement =connection.createStatement();
String sql_create="create table if not exists t(id int primary key auto_increment,age int ,name varchar(10))";
String sql_insert="insert into t(age,name) values(22,'jack'),(33,'tom')";
String sql_sselect="select * from t";
//执行create 语句
Boolean flag=statement.execute(sql_create);
System.out.println(flag);
//执行insert语句
int row=statement.executeUpdate(sql_insert);
System.out.println(row);
//执行select
ResultSet resultSet=statement.executeQuery(sql_sselect);
while(resultSet.next()){
int id=resultSet.getInt("id");
int age=resultSet.getInt("age");
String name = resultSet.getString("name");
System.out.println(id "----" age "----" name);
}
ResultSet(查询得到结果集)
- 代表查询语句得到的结果集(executeQuery)
- 见到resultSet 就用while
- next() 移动游标 有下一条返回true,没有返回false
Class.forName("com.mysql.jdbc.Driver"); //加载驱动
// 链接数据库
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "root");
Statement statement =connection.createStatement(); //获取执行sql语句对象
String sql_sselect="select * from t"; //创建sql语句
ResultSet resultSet=statement.executeQuery(sql_sselect); //获取结果集
while(resultSet.next()){
int id=resultSet.getInt("id");
int age=resultSet.getInt("age");
String name = resultSet.getString("name");
System.out.println(id "----" age "----" name);
}
关闭资源(close)
- 关闭Connection
- 如果sql执行完,继续持有连接没有意义,会造成服务器压力过大,所以需要关闭
- 关闭Statement
- 会占用内存的资源,所以用完就关闭
- 关闭ResultSet
- 因为ResultSet对象中包含查询结果的数据,会占用内存空间
关闭顺序
- ResultSet , Statement , Connection
异常处理
代码语言:javascript复制@Test
public void testException() {
Connection connection = null; //申明Connection为null
Statement statement = null; // 申明 Statement为null
try {
Class.forName("com.mysql.jdbc.Driver"); // 注册驱动
// 链接数据库
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc", "root", "root");
// 创建Statement,执行sql语句的对象
statement = connection.createStatement();
String sql_insert = "insert into t(age,name) values(22,'marry'),(33,'Alice')";
int row=statement.executeUpdate(sql_insert);
System.out.println(row);
} catch (Exception e) {
System.out.println("出异常");
e.printStackTrace();
} finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
JDBC封装
- 目的:把频繁出现的代码封装起来,起到代码复用的作用,从而提高开发效率
- 创建DBUtils类(数据库工具类)
- 封装建立数据连接
- 封装关闭资源
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 数据库封装类
* @author chenjiabing
*/
public class DBUtils {
/**
* 获取连接对象
* @param user 数据库用户名
* @param password 密码
* @param database : 数据库名称
*/
public static Connection getConnection(String user, String password,
String database) throws Exception {
Class.forName("com.mysql.jdbc.Driver"); // 注册驱动
// 链接数据库
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/" database, user, password);
return connection;
}
/**
* 关闭数据库资源
* @param connection 连接对象
* @param statement Statement对象
* @param resultSet 结果集
*/
public static void close(Connection connection, Statement statement,
ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
- 测试
@Test
public void testUntils(){
Connection connection=null;
Statement statement=null;
ResultSet resultSet=null;
try {
connection=DBUtils.getConnection("root", "root", "jdbc"); //获取连接
statement=connection.createStatement();
//插入数据
int row = statement.executeUpdate("insert into t(age,name) values(22,'陈加兵'),(33,'Jackson')");
System.out.println(row);
} catch (Exception e) {
e.printStackTrace();
}finally{
DBUtils.close(connection, statement, resultSet);
}
}