JDBC快速入门

原创
2015/08/11 21:26
阅读数 239

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/test","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系列方法执行。


展开阅读全文
加载中
点击加入讨论🔥(8) 发布并加入讨论🔥
打赏
8 评论
2 收藏
1
分享
返回顶部
顶部