JDBC快速入门

来源:互联网 发布:纸黄金走势图软件 编辑:程序博客网 时间:2024/06/08 14:27
JDBC是什么?
Java DataBases Connectivity
JDBC干嘛的?
使用Java代码通过JDBC接口控制数据库
为什么使用JDBC而不能直接使用Java代码控制数据库呢?
数据库种类有很多,Mysql,Oracle等等,这些数据库都有各自的操作方式,如果使用Java代码直接控制一种数据库,
那么想要换成其他数据库就要重新写控制的代码,非常复杂。
而有了JDBC,数据库厂商去实现JDBC声明的接口规。通过面向接口编程的思想,开发者只需要调用这些接口就能
完成对数据库的操作,就算更换了数据库,也不影响代码的编写。
JDBC快速入门:
分5步骤
1.注册驱动
2.获取数据库连接
3.使用Statement或者PreparmentStatement对象传输SQL语句用于操作数据库
4.执行SQL语句;如果是查询语句则返回ResultSet结果集对象
5.释放资源
public static void main(String[] args) throws Exception {
/*
* 使用jdbc连接数据库规范

* 1.注册驱动
* 2.获取数据库连接
* 3.获取传送sql语句的对象statement
* 4.执行语句,如果是查询则获取结果集ResultSet对象
* 5.释放资源
*/

//注册驱动
Class.forName("com.mysql.jdbc.Driver");//为什么要这么注册驱动呢?详情请看我之前的一篇关于JDBC的blog
//获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day05","root","root");//获取连接有三种方式,这一种最为常用
//获取传输sql语句的Statement对象
Statement st = conn.createStatement();
//执行CUD操作
st.executeUpdate("insert into emp values(null,'张三',18)");
//关闭资源
st.close();
conn.close();
}




通过ResultSet结果集对象返回我们想要的数据
//执行R操作
ResultSet rs = st.executeQuery("select * from emp");


首先科普一下ResultSet的特点,当获取到一个ResultSet对象的时候,可以将其想象成一张表,
这张表不仅仅有数据还有表头,然后还有一个游标,一开始游标是在左上方的起始位置。
我们从ResultSet中获取数据其实就是通过移动游标来读取数据!
我们对ResultSet能够进行哪些操作呢?
boolean next():向后移动游标,同时返回该位置上有木有记录
boolean previous():向前移动游标,同时返回该位置上有木有记录
boolean absolute(int rowNum):定位到某行(第一行是1),同时返回该位置上有木有记录
void beforeFirst():游标定位在第一行的前面
void afterLast():游标定位在最后一行的后面
last():直接定位到最后一行

ResultSet中提供了一大堆get方法,就是获取当前游标所在行需要的类型的数据,参数是列的坐标(从1开始)或者是字段名。




关于JDBC的资源释放
ResultSet,Statement,Connection都需要释放资源。
资源释放的顺序:
ResultSet最先释放,Statement其次,Connection最后释放。


由于在上面的快速入门的例子中是throws了异常,所以还不能体现JDBC资源释放的合理代码
在不throws异常的情况下,建议:

if (rs != null) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
st = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}

通过这种方式来实现资源释放。






Statement和PreparedStatement的区别
在使用Statement传输SQL语句的时候,不会对Sql语句进行检查,会被SQL注入攻击(后面有机会说)
而PreparedStatement能够给SQL进行预编译,提高执行效率,并且能防止注入攻击。
所以以后能用PreparedStatement就尽量用PreparedStatement。
在使用PreparedStatement的时候:
PreparedStatement ps = null;
String sql = "insert into client values(null,?,?,?,?,?)";
ps = conn.prepareStatement(sql);
需要首先准备好sql语句,将参数以?的形式放在sql中
然后利用conn的prepareStatement方法传入sql获得prepareStatement对象
prepareStatement在执行的时候需要通过set方法传入参数。
最后通过excute系列方法执行。


0 0
原创粉丝点击