JDBC
1.介绍
JDBC定义了一套规范标准,它对应的是各种接口与抽象类(通常对应java.sql包下面的各种类与接口),具体实现交给各数据库厂商去完成, MySQL的有自己的实现类并打成jar包发布,供程序开发人员使用;Oracle也有自己的实现jar包。
我们开发人员在使用的时候,要根据连接数据库的不同,去对应的官网上下载对应数据库版本与程序语言的数据库驱动(Java语言对应的是一个jar包)。(比如我们使用MySQL 5.1,就要去MySQL官网下载Java语言对应的jar包)
JDBC : Java DataBase Connectivity (java数据库链接)
是让java链接数据库的API
API : Application Programming Intergace (应用程序接口)
就是函数库
所以 JDBC 就是提供java连接数据库的应用程序接口的,只是接口或者抽象类
而JDBC就是java中提供的一个规范,基本都是接口和抽象类作为父类,具体的实现,是数据库厂商去弄的,只不过这些厂商需要按照我的接口标准来实现
如果我们要想操作数据库,就需要把厂商开发的实现类,导入进来
然后在项目上右键 -> Build Path -> Configure Build Path…,将之加入我们项目的CLASSPATH。
2. JDBC使用步骤
第0步: 导包
第1步:注册驱动 (仅仅做一次)
Class.forName("com.mysql.jdbc.Driver");
第2步:建立连接(Connection)
Connection conn=DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/_06_","root","root");
第3步:创建运行SQL的语句(Statement)
String sql ="select * from test";
Statement stmt= conn.createStatement();
第4步:运行语句
Result rs = stmt.executeQuery(sql);
第5步:处理运行结果(ResultSet)
while (rs.next()) {
// 在循环遍历中,把数据取出来
System.out.print(rs.getInt("id") + " ");
// 如果传入是整型值 就会获取对应的列,比如下面 就是获取第一列的值,不建议使用
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString("id") + " ");
// 字符串不能用int来接收,除非这个 字符串是纯数字
// System.out.print(rs.getInt("name") +" ");
System.out.print(rs.getString("name") + " ");
System.out.print(rs.getString("course") + " ");
System.out.print(rs.getDouble("score")+" ");
// 3 对应的是name列,如果更改表结构,把name列放到第四位了,那么这里就获取不到name了
// 所以 不灵活,不推荐使用
System.out.println(rs.getString(3));
}
第6步:释放资源
rs.close();
stmt.close();
conn.close();
其中 如果是添加,删除,更新操作,可以没有第5步,查询肯定会有第五步
3.代码优化
上面程序中,有可能会导致释放资源出现问题
比如查询语句写错了等,这时候会抛出异常,那么关闭语句就不会执行
所以我们应该使用try…catch…finally来优化一下
以刚才的练习为例,对test_jdbc表的查询进行优化
Connection conn = null;
Statement stmt = null;
ResultSet rs = null ;
try {
// 1 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2 创建数据库连接对象
// 导包使用的都是java.sql的
conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/_06_", "root", "root");
// 3 创建语句传输对象
String sql = "select * from test_jdbc";
stmt = conn.createStatement();
// 4 接收数据库结果集
rs = stmt.executeQuery(sql);
while (rs.next()) {
// 在循环遍历中,把数据取出来
System.out.print(rs.getInt("id") + " ");
System.out.print(rs.getString("name") + " ");
System.out.println(rs.getDouble("money")+" ");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}