JDBC
Java JDBC是一套标准,是Java与各大数据库厂商共同定制的一套接口由各大数据库厂商进行了实现,能够通过Java对数据库进行交互。
JDBC标准的操作流程
使用步骤:
1.引入jar文件
2.加载数据库驱动;
Class.forName(“com.mysql.jdbc.Driver”);
3.获得连接Connection通过 Driver Manager 对象
Connection conn = DriverManager.getConnection(“数据库连接地址”,”用户名”,”密码”);
4.获得执行对象:
Statement state = conn.createStatement();
5.执行对象执行:
state.execute(String sql); 该方法执行SQL语句,返回Boolean值,注意:true表示执行的是查询语句,false 表示其他类型的SQL语句。这里的true,false不表示执行的成功与否。
state.executeUpdate(String sql); 该方法执行执行DML语句(INSERT UPDATE DELETE) 和 DDL语句(create alter drop) ,返回Int值,表示该次操作作用了多少行记录。当返回为0时,表示执行失败。
state.executeQuery(String sql); 该方法执行执行DQL语句 (select)
语句,并且能够返回查询结果,通过ResultSet集合接收。
6.释放资源:
假如有ResultSet对象res接收: res.close();
state.close();
conn.close();
注意:execute();executeUpdate();executeQuery()等方法能够执行的SQL语句中是有着不同的限制的。
同时,也应该注意3个方法的返回值所代表的含义。
例如 execute()方法执行sql语句,但是返回值true仅表示执行查询语句,true和false不代表执行的成功与否,两个返回值都不代表执行是否失败还是成功;
executeUpdate() 方法执行DML和DDL语句,能够执行对处理数据和表结构的操作但是不能够执行查询语句,返回int型数据,表示操作影响的行数,返回0时表示执行失败;
executeQuery() 方法只执行查询语句,并能够返回查询结果,返回值用ResultSet集合接收;
ResultSet集合
ResultSet集合的取值方法:
res.getXXX(int index ) XXX表示想要取出的字段的类型,index表示查询结果返回的字段的顺序,从1开始。例如:int id = res.getInt( 1);表示取出第一个字段,它的数据类型是int型。
ResultSet 的getXXX()方法是根据当前游标指向的地址来进行取值的,一行查询记录存储在上图的一行中,游标刚开始时默认为在第一行结果的上方。可以看为-1.所以取第一行的值时,需要将游标向下移动一次。、
方法next()既能够判断是否存在下一行,当返回true时能够向下移动一行。
所以ResultSet集合的遍历为:
While(res.next()){
res.getXXX(int index);
}
方法有:
注入问题
注入问题的引入:
PreparecStatement预编译
PreparedStatement 预编译与Statement在获得时的差异:
PreparedStatement pr = conn.preparedStatement(预编译的SQL语句);
Statement state = conn.createStatement();
预编译语句在获得PreparedStatement对象时的传入;
而Statement对象的SQL语句在执行execute()等的方法时传入,如:
在传入参数时,将用SetXXX(int index, XXX 要传入的参数);
XXX表示要传入的参数的数据类型,index 表示?的顺序,从1开始,在上图中表示要传入第一个问号一个int的depid。
JDBC中对事务的操作
在Java中通过上面一行一行的执行sql语句也能够执行sql中的事务。
但JDBC也提供了用Java操作事务的方法:
开启事务: conn.setAutoCommit(false);
回滚事务: conn.rollback();
提交事务: conn.commit();
在Java和MySQL中默认每一次数据操作都是自动提交。所以在进行事务操作时应该将自动提交改过来。 conn.setAutoCommit(false); 表示取消自动提交。 conn 表示Connection对象。
在最后应该重新改回自动提交
连接池(DataSource)
Druid 连接池 和 bdcp 连接池:
操作流程:
1 引入jar文件。
2 导入 .properties 配置文件。
Properties pr = new Properties();
获取配置文件输入流
InputStream ir = 类名.class.getClassLoader().getSourceAsStream(“配置文件”);
pr.load(ir);
3 通过连接池工厂产生相应的连接池
Bdcp: DataSource data = BasicDataSourceFactory.createDataSource(pr);
Driud: DataSource data = DriudDataSourceFactory.createDataSource(pr);
4 通过连接池获得连接:
Connection conn = data.getConnection();
5 获取相应的执行对象:
Statement state = conn.createStatement();
或者: PreparedStatement state = conn.preparedStatement(String sql);
6 执行语句.
7 释放资源.