目录
JDBC一般操作步骤
DriverManager (驱动管理类)
Connection
Statement
ResultSet (结果集)
PreparedStatement
数据库连接池
概述:JDBC是Java语言提供的操作关系型数据库的一套API。全称(Java DataBase Connection)java数据库连接。
本质:Java官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商去实现这套接口,并提供出实现后的驱动jar包。我们就是要学习这套规则(接口),其真正执行的是驱动jar包中的实现类。
JDBC一般操作步骤
准备工作:在项目模块下创建lib文件夹,将mysql-connector-java-5.1.48.jar驱动架包添加进去。并添加项目依赖。
DriverManager (驱动管理类)
作用1:注册驱动 ---》 public static void registerDriver(Driver driver)
对于JDBC的第一步操作 Class.forName("com.mysql.jdbc.Driver)
查看Driver类源码:
注:mysql 5.0开始的驱动包 可以省略注册驱动这一步骤。
作用2:获取连接 ---》 public static connection getConnection(String url, String user, String password)
- url:连接数据库的路径
语法:jdbc:mysql://ip地址:端口号/数据库名?键值对参数1&键值对参数2...
例如:jdbc:mysql:/127.0.0.1/db1
注:①如果连接的是本机mysql服务器,并且mysql服务器默认端口为3306,此时url可以 简化书写--> jdbc:mysq///db1
②可以配置useSSL=false参数,禁用安全方式,解决警告提示。
- user:用户名 (如:root)
- password:密码(如:000000)
Connection
作用1:获取sql语句的执行对象
- public static Statement createStatement(); 创建普通的sql执行对象
- public static PreparedStatement prepareStatement(String sql); 获得预编译sql的执行对象,可以防止sql注入问题
作用2: 事物管理
- 开启事物:setAutoCommit(boolean autoCommit); 为true表示自动提交事物,为false表 示手动提交事务(开启事物)
- 提交事物:commit()
- 回滚事物:roolback()
补:java对于异常一般处理方式:
Statement
作用:执行sql语句
成员方法:
- public int executeUpdate(String sql); 执行DML、DDL语句
- public ResultSet executeQuery(String sql); 执行DQL语句,返回ResultSet结果集对象
ResultSet (结果集)
作用:封装DQL查询语句的结果
成员方法:
- public boolean next(); 将光标从当前位置移动到下一位置,并判断是否为有效行,为 true表示有效,为false表示无效。
- public xxx getXxx(参数); 获取数据
参数形式一:int:列的编号,从1开始。
参数形式二:String:列的名称
PreparedStatement
作用1:预防sql注入问题。
SQL注入:通过输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
存在原因:sql语句中存在拼字符串的现象
例如:登录系统中..
解决SQL注入问题:sql语句的执行对象,不再用Statement对象,而是用 PreaparedStatement对象
步骤:1、获取PrepareStatement对象
●在定义sql语句时参数全部使用 ?暂时替代
如:String sql = "select * from user where username = ? and psw = ?";
●通过Connetion连接对象获取PreparedStatement对象,并传入sql语句
如: PreparedStatement pstmt = conn.preparedStatement(sql);
2、设置参数
如:pstmet.setXxx(参数1,参数2);
参数1:?的位置编号,从1开始
参数2:对应此位置?编号的值
3、执行Sql
如:pstmt.executUpdate()/ executQuery();
注:不需要像Statement那样再传入sql语句了。
作用2: 预编译sql语句,性能高。
原理:①在获取PreparedStatement对象时,将Sql语句包发送给mysql服务器,进行检查编译
②执行时就不用进行这一步骤了,速度更快。
③如果sql模板一样,则只需要进行一次检查、编译、效率更高。
注:PreparedStatement预编译功能默认是关闭的,需要手动开启。在获取连接url参数时 添加
useServerPrepStmts=ture
数据库连接池
概述:数据库连接池是一个容器,负责分配管理数据库的连接(类似于线程池)。这个容器中存在一些长期存活的Conntion对象,当某个java程序需要获取连接对象时就直接从这个容器中获取,当此程序结束后它所占用的Conntion对象不会释放掉而是还回到容器中来,从而实现了资源复用。
实现:Java提供了数据库连接池接口,由第三方组织实现接口。
获取连接对象方法:Connection getConnection()
常见数据库连接池:Connection、c3p0、Druid(德鲁伊)
Druid:阿里巴巴开源的数据库连接池,功能强大,性能优秀。目前是java使用最多的数据 库连接池。
Driud使用步骤:
①导入druid-1.1.12.jar架包。(新建lib文件夹,将架包添加进去并添加依赖)
②定义配置文件druid.properties
③加载配置文件
Properties prop = new Properties();
prop.load(new FeilInputStream("路径");
注:对于这个路径.有时需要带模块名,有时又不带模块名。具体做法在写路径前先用通用方法System.getProperty("user.dir") 打印一下路径看看,如果打印的路径带了模块名,则参数路径就不加了,否则参数路径要加上模块名。
④获取数据库连接池对象
DataSource dataSourct = DruidDataSourceFactory.createDataSource(prop);
⑤获取连接
Conntion conn = dataSource.getConnection();



