- 数据库编程是指通过代码实现一个MYSQL客户端,同样是通过网络和服务器进行交互,数据库会给我们提供一组API来方便实现
API:application programming interface ,提供了一组函数/类/或方法,让用户直接去使用,有时可称为接口。
- MYSQL,ORACLE,SQL SERVER 等数据库都有不同的API,通过适配器(adapter)把不同种类的API转成JDBC统一的API
适配器(adapter):java中称为数据库驱动程序,不同数据库需要不同的驱动程序,java中的数据库驱动程序是一个独立的“jar包”,一堆二进制文件的集合。
- maven仓库:jar包的应用商店,在这里下载不同数据库对应的jar包,注意版本对应
- 导入jar包:
- 在IDEA的工程中创建一个目录,把jar包拷贝进去。
- 配置项目的一些属性,让项目能够找到jar包。
- JDBC中以DataSourse API为主。
- 具体的程序实现:
- 先创建Database对象。
- 创建Connection对象,和数据库建立连接(相当于打开了mysql客户端,输入了密码,连接成功)。
- 拼装SQL语句,用到了prepare,Statement对象(客户端输入sql语句)。
- 执行SQL语句(在客户端敲下回车)。
- 查看服务器返回的结果(客户端显示结果)。
- 关闭连接,释放资源,后创建的先释放(退出客户端)。
- 程序
- JDBC插入数据
package jar1024;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
//JDBC插入数据
public class TestJDBC {
public static void main(String[] args) throws SQLException {
//1.先创建DataSource对象(DataSource对象生命周期应该是要跟随整个程序)
DataSource dataSource = new MysqlDataSource();
//接下来针对datasource进行配置,以便后面能顺利访问数据库
//主要配置三个方面信息,URL,User,Password 需要向下转型
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jar1024?characterEncoding=utf-8&useSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
//2.创建Connection对象,和 数据库建立连接,就可以和数据库进行后续的数据传输了
//Connection的包是java.sql
//如果不正常就会抛出SQLexception异常
//connection生命周期较短,每次请求可创建一个新的connection
Connection connection = dataSource.getConnection();
//3.拼装sql语句 ,用到prepare,Statement 对象
int id = 1;
String name = "cao";
int classId = 10;
//?是占位符,可以把具体的变量的值替换到?位置
String sql = "insert into student values(?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
//1,2,3相当于?的下标
statement.setInt(1,id);
statement.setString(2,name);
statement.setInt(3,classId);
System.out.println("statement" + statement);
//4.拼装好之后,执行SQL
//insert delete update 都使用executeUpdate 方法来执行
//select 就使用executeQuery来执行
//返回值表示此次操作修改了多少行
int ret = statement.executeUpdate();
System.out.println("ret" + ret);
//5.执行完毕后,关闭释放相关资源
//一定是后创建的先释放,注意顺序
statement.close();
connection.close();
}
}
2. JDBC查找
package jar1024;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//JDBC查找
public class TestJDBCSelect {
public static void main(String[] args) throws SQLException {
//1.先创建DataSource对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jar1024?characterEncoding=utf-8&useSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
//2.创建Connection对象,和 数据库建立连接,就可以和数据库进行后续的数据传输了
Connection connection = dataSource.getConnection();
//3.拼装sql语句 ,用到prepareStatement 对象
String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);
//4.拼装好之后,执行SQL
ResultSet resultSet = statement.executeQuery();
//5.遍历结果集,遍历过程类似于使用迭代器遍历集合类
//结果集相当于一张表,每张表有很多行,每一行是一条记录(又包含很多列)
//next()一方面判定当前是否存在下一行,另一方面如果存在下一行就获取到这一行
//可以直观地把resultSet对象想象成是一个光标
while(resultSet.next()) {
//resultSet的光标指向当前行,就可以把当前行中的列数据获取到
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int classId = resultSet.getInt("classId");
System.out.println(" id: " + id + " name: " + name + " classId: " + classId);
}
//6.执行完毕后,关闭释放相关资源
//一定是后创建的先释放,注意顺序
resultSet.close();
statement.close();
connection.close();
}
}
3. JDBC删除
package jar1024;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
//JDBC删除
public class TestJDBCDelete {
public static void main(String[] args) throws SQLException {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要删除的学生姓名: ");
String name = scanner.next();
//1.先创建DataSource对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jar1024?characterEncoding=utf-8&useSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
//2.创建Connection对象,和 数据库建立连接,就可以和数据库进行后续的数据传输了
Connection connection = dataSource.getConnection();
//3.拼装sql语句 ,用到prepareStatement 对象
String sql = "delete from student where name = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,name);
//4.拼装好之后,执行SQL
int ret = statement.executeUpdate();
if (ret == 1) {
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
//5.关闭并释放资源
statement.close();
connection.close();
}
}
4. JDBC修改
package jar1024;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
//JDBC修改
public class TestJDBCUpdate {
public static void main(String[] args) throws SQLException {
//让用户输入要修改id为n的同学姓名
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要修改的学生id: ");
int id = scanner.nextInt();
System.out.println("请输入要修改的同学姓名: ");
String name = scanner.next();
//1.先创建DataSource对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jar1024?characterEncoding=utf-8&useSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
//2.创建Connection对象,和 数据库建立连接,就可以和数据库进行后续的数据传输了
Connection connection = dataSource.getConnection();
//3.拼装sql语句 ,用到prepareStatement 对象
String sql = "update student set name = ? where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,name);
statement.setInt(2,id);
//4.拼装好之后,执行SQL
int ret = statement.executeUpdate();
if (ret == 1) {
System.out.println("修改成功");
}else{
System.out.println("修改失败");
}
//5.关闭并释放资源
statement.close();
connection.close();
}
}