文章目录
- 1.定义
- 2.优势
- 3.环境准备
- 4.使用jdbc(java程序操作数据库)
- 5.使用jdbc的操作步骤
1.定义
jdbc是一种用于执行SQL语句的java api,它是java中的数据库连接规范,为java开发人员操作数据库提供了一个标准的api,可以为多种关系数据库提供统一访问,也就是使用一套标准的jdbc api操作的代码,可以同时支持多种关系型数据库,兼容性好
2.优势
可移植性强,数据库jdbc驱动程序是数据库厂商提供的驱动包,包括jar后缀格式的文件,里面包含class文件,我们自己写java程序,只要引入这个依赖包就可以使用其中的类或者接口
3.环境准备
(1)创建项目
(2)打开当前项目设置
(3)添加依赖包
(4)看到这些说明安装成功
4.使用jdbc(java程序操作数据库)
(1)数据库是一个网络上的数据库服务器端进程,需要使用URL来连接
(2)URL格式
协议名://服务端地址:服务器端口号/带层次的文件路径?键1=值1&键2=值2
①协议名:网络传输数据的格式
②服务端地址:服务器所在主机对应的地址(IP,域名),IP或者域名是用于标识某个网络中唯一一台主机,本机的IP是127.0.0.1,本机的域名是localhost
③服务器端口号:主机中端口绑定一个进程
④带层次的文件路径:服务资源
⑤键1=值1&键2=值2:查询字符串(queryString)
(3)jdbc中,需要使用数据库服务器URL来进行连接(MySQL使用本机,端口默认是3306;带层次的路径写数据库名)
5.使用jdbc的操作步骤
(1)第一步:建立数据库连接:类似打开一个cmd客户端连接到MySQL
方式一:DriverManager
方式二:DataSource(数据源/数据库连接池)
①一个程序连接某个数据库使用一个连接池就行
②连接池初始化时,就创建一定数量的数据库连接对象(connection)
③connection.close()只是重置连接对象属性,放回连接池
对比DriverManager和DataSource:
①DriverManager每次都是新建一个物理连接,效率低,释放是关闭物理连接
②DataSource是初始化就创建一定数量的连接,释放只是重置并放回连接池,可以复用,效率高
(2)第二步:创建操作命令对象statement:该对象用于执行SQL代码
三种操作命令对象:
方式一:statement:不带占位符简单操作命令对象
方式二:PreparedStatement:带占位符的预编译操作命令对象(优势:提前预编译,效率高,防止SQL注入,更加的安全,SQL注入指的是拼接字符串,值可能包含SQL语句,不安全)(防SQL注入原理:把替换的字符串中的单引号加上\进行转义)
方式三:callableStatement:用于执行存储过程
(3)执行SQL
(4)如果是插入、删除、修改操作,调用executeUpdate,返回int表示成功处理条数;如果是查询操作,处理结果集ResultSet,调用executeQuery,返回结果集
(5)反向释放资源,调用close方法
查询操作,使用DriverManager连接数据库:
import java.sql.*;
//查询操作,使用DriverManager连接数据库
public class text_driverManager {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.建立数据库连接
Class.forName("com.mysql.jdbc.Driver");
//DriverManager是jdbc的api,Connection也是(记住使用java.sql的,否则会报错)
//url:
// (1)服务器地址改成要连接的数据库IP/域名(localhost)
// (2)带层次的资源路径改成数据库名(test)
// (3)用户名,密码(user=root&password=root)
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=wh06112626&useUnicode=true&characterEncoding=UTF-8&useSSL=false");
//2.创建操作命令对象(简单地操作命令对象)
Statement statement = connection.createStatement();
//3.执行sql语句:可以不加分号
ResultSet resultSet = statement.executeQuery("select * from accout");
//4.处理结果集
while (resultSet.next()){//遍历每一行数据
//获取相应字段的值
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int money = resultSet.getInt("money");
//打印结果集
System.out.printf("id: %s,name: %s,money: %s\n",id,name,money);
}
//5.反向释放资源
resultSet.close();
statement.close();
connection.close();
}
}
查询操作,使用DataSource连接数据库:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.*;
public class text_query {
public static void main(String[] args) throws SQLException {
//使用数据库连接池来获取数据库连接对象,一个java程序创建一个连接池对象
MysqlDataSource dataSource = new MysqlDataSource();
//使用方法来设置URL中的参数
dataSource.setURL("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");//用户名
dataSource.setPassword("wh06112626");//密码
dataSource.setUseSSL(false);//安全连接,不使用的话会报错
dataSource.setCharacterEncoding("UTF-8");//设置编码格式
//1.建立数据库连接
Connection connection = dataSource.getConnection();
//2.创建操作命令对象(预编译的操作命令对象)
//使用预编译的操作命令对象PreparedStatement
//sql语句中可能包含一些客户端网页传入的数据
int inputId = 2;//模拟客户端用户传入的id
//?是占位符,类似于格式化打印中的%s,%d,是可以替换的
String sql = "select * from accout where id = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//替换占位符:setXXX(index,value),XXX是值的类型,index是占位符的索引位置(是从1开始),value是要替换的值
preparedStatement.setInt(1,inputId);
//3.执行sql语句:可以不加分号
ResultSet resultSet = preparedStatement.executeQuery();
//4.处理结果集
while (resultSet.next()){//遍历每一行数据
//获取相应字段的值
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int money = resultSet.getInt("money");
//打印结果集
System.out.printf("id: %s,name: %s,money: %s\n",id,name,money);
}
//5.反向释放资源
resultSet.close();
preparedStatement.close();
connection.close();
}
}
插入代码:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.*;
//插入
public class text_insert {
public static void main(String[] args) throws SQLException {
//使用数据库连接池来获取数据库连接对象,一个java程序创建一个连接池对象
MysqlDataSource dataSource = new MysqlDataSource();
//使用方法来设置URL中的参数
dataSource.setURL("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");//用户名
dataSource.setPassword("wh06112626");//密码
dataSource.setUseSSL(false);//安全连接,不使用的话会报错
dataSource.setCharacterEncoding("UTF-8");//设置编码格式
//1.建立数据库连接
Connection connection = dataSource.getConnection();
//2.创建操作命令对象(预编译的操作命令对象)
//使用预编译的操作命令对象PreparedStatement
//sql语句中可能包含一些客户端网页传入的数据
int inputId = 6;//模拟客户端用户传入的id
//?是占位符,类似于格式化打印中的%s,%d,是可以替换的
String sql = "insert into accout(id) values(?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//替换占位符:setXXX(index,value),XXX是值的类型,index是占位符的索引位置(是从1开始),value是要替换的值
preparedStatement.setInt(1,inputId);
//3.执行sql语句:可以不加分号
//插入,修改,删除,都是调用executeUpdate,返回执行成功多少条语句
int n = preparedStatement.executeUpdate();
System.out.println(n);
//5.反向释放资源
preparedStatement.close();
connection.close();
}
}