##概述
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。
JDBC由sun公司开发,放在jdk中的sql包下和javax.sql包下。可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
##准备工作
在使用JDBC连接数据库之前,首先要有数据库,数据库要创建表。我的数据库信息如下:
- 数据库类型:MySql。
- 数据库名字:xia。
- 用户名:root。
- 密码:root.
- 创建数据库表student。
create table student(
id int primary key auto_increment,
name varchar(20),
age int
);
##开发环境
- 操作系统:MACOS。
- 开发工具:IntelliJ IDEA。
- Java版本:jdk1.7。
- 使用maven管理jar包。
##正式开发
一,在pom.xml文件中引入MySql的java驱动包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
二,得到Connection对象
public static Connection getConnection() {
try {
// 1.通过DriverManger注册驱动,注意此时Driver是在com.mysql.jdbc包中
DriverManager.registerDriver(new Driver());
/**
* 2.通过DriverManager获取连接对象
*
* jdbc:mysql://:这是固定的写法,表示使用jdbc连接mysql数据库
* localhost:ip地址,本地可以写成localhost。
* 3306:mysql的端口号。
* xia:数据库的名字。
* 第一个root:mysql的用户名
* 第二个root:mysql的密码。
*/
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/xia", "root", "root");
return connection;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
三,插入操作方式1
public static boolean insertStudent1(Student student) {
try {
//1,得到Connection对象,
Connection connection = getConnection();
//2,通过Connection获取一个操作sql语句的对象Statement
Statement statement = connection.createStatement();
//3,获取需要传递的参数
String name = student.getName();
int age = student.getAge();
//4,拼接sql语句
String sql = "insert into student (name,age) VALUE ('" + name + "'," + age + ")";
//5,执行sql语句
statement.execute(sql);
//6,释放资源
statement.close();
connection.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
此时就可以向数据库中插入数据,测试代码如下:
Student student = new Student();
student.setName("lilei");
student.setAge(18);
insertStudent1(student);
注:Student是自定义的Model类,此时Student.java文件的代码略。
四,插入操作方式2
public static boolean insertStudent2(Student student) {
try {
//1,得到Connection对象,
Connection connection = getConnection();
//2,通过Connection获取一个操作sql语句的对象Statement
Statement statement = connection.createStatement();
//3,获取需要传递的参数
String name = student.getName();
int age = student.getAge();
//4,写sql语句,参数使用?占位符
String sql = "insert into student (name,age) VALUE (?,?)";
//5,得到PreparedStatement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//6,通过PreparedStatement对象设置参数
preparedStatement.setString(1, name);
preparedStatement.setInt(2, age);
//7,执行sql语句
preparedStatement.execute();
//8,释放资源
statement.close();
connection.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
五,根据id查找单个对象
public static Student selectStudent(int id) {
try {
//1,得到Connection对象,
Connection connection = getConnection();
//2,通过Connection获取一个操作sql语句的对象Statement
Statement statement = connection.createStatement();
//3,拼接sql语句
String sql = "select id,name,age from student where id = " + id;
//4,查询,返回的结果放入ResultSet对象中。
ResultSet resultSet = statement.executeQuery(sql);
//5,将游标后移一位
resultSet.next();
//6,获取数据
int studentId = resultSet.getInt(1);//第一行的第一列数据,我们知道是id,也知道是int类型,
String studentName = resultSet.getString(2);//第二个数据对应name
int studentAge = resultSet.getInt(3);//第三个数据对应age
Student student = new Student();
student.setId(studentId);
student.setName(studentName);
student.setAge(studentAge);
//7,释放资源
statement.close();
connection.close();
return student;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
六,根据其他条件得到对象集合
public static List<Student> selectUserList(int age) {
try {
//1,得到Connection对象,
Connection connection = getConnection();
//2,通过Connection获取一个操作sql语句的对象Statement
Statement statement = connection.createStatement();
//3,拼接sql语句
String sql = "select id,name,age from student where age = " + age;
//4,查询,返回的结果放入ResultSet对象中。
ResultSet resultSet = statement.executeQuery(sql);
// 5.得到返回的值
List<Student> studentList = new ArrayList<>();
while (resultSet.next()) {//resultSet对象可能包含很多行数据,所以要是有while循环。
int studentId = resultSet.getInt(1);//第一行的第一列数据,我们知道是id,也知道是int类型,
String studentName = resultSet.getString(2);//第二个数据对应name
int studentAge = resultSet.getInt(3);//第三个数据对应age
Student student = new Student();
student.setId(studentId);
student.setName(studentName);
student.setAge(studentAge);
studentList.add(student);
}
//6,释放资源
statement.close();
connection.close();
return studentList;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
七,更新操作
public static boolean updateStudent(Student student) {
try {
//1,得到Connection对象,
Connection connection = getConnection();
//2,通过Connection获取一个操作sql语句的对象Statement
Statement statement = connection.createStatement();
//3,获取需要传递的参数
String name = student.getName();
int id = student.getId();
//4,拼接sql语句
String sql = "update student set name = '"+name+"' WHERE id = " +id;
//5,执行sql语句
statement.executeUpdate(sql);
//6,释放资源
statement.close();
connection.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
八,删除操作
public static boolean deleteStudent(int id) {
try {
//1,得到Connection对象,
Connection connection = getConnection();
//2,通过Connection获取一个操作sql语句的对象Statement
Statement statement = connection.createStatement();
//3,拼接sql语句
String sql = "DELETE FROM student WHERE id = " +id;
//4,执行sql语句
statement.execute(sql);
//5,释放资源
statement.close();
connection.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
##总结
一,使用JDBC进行增删改查操作大体相同,不同点就是sql语句。大体步骤如下:
- 首先获取Connection对象。
- 然后获取Statement对象。
- 然后写sql语句。
- 然后执行sql语句。如果是查找操作在执行sql语句后解析数据。
- 最后关闭Connection和Statement对象。
二,使用JDBC也有缺点,即每次操作都要创建连接,然后关闭连接创,建连接和关闭连接是非常消耗资源的操作。所以在大型项目中尽量不要采用这种方式。