> 文章列表 > JDBC(java数据库连接)—MySQL

JDBC(java数据库连接)—MySQL

JDBC(java数据库连接)—MySQL

文章目录

  • 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)创建项目
JDBC(java数据库连接)—MySQL
(2)打开当前项目设置
JDBC(java数据库连接)—MySQL
(3)添加依赖包
JDBC(java数据库连接)—MySQL
JDBC(java数据库连接)—MySQL

JDBC(java数据库连接)—MySQL
(4)看到这些说明安装成功
JDBC(java数据库连接)—MySQL

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();}
}