Java之JDBC概述
开发工具与关键技术:MyEclipse 10,java
作者:刘东标
撰写时间:2019-06-05
什么是JDBC
1、 JDBC(Java Data Base Connectivity,Java数据库连接)
2、 是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问
3、它由一组用Java语言编写的类和接口组成
JDBC访问数据库步骤
1:加载一个Driver驱动
2:创建数据库连接(Connection)
3 :创建SQL命令发送器Statement
4:通过Statement发送SQL命令并得到结果
5:处理结果(select语句)
6:关闭数据库资源 • ResultSet • Statement • Connection。
JDBC语法总结
1.加载驱动
加载JDBC驱动是通过调用方法java.lang.Class.forName(),下面列出常用的几种数据库驱动程序 加载语句的形式 :
Class.forName(“oracle.JDBC.driver.OracleDriver”);//使用Oracle的JDBC驱动程序
Class.forName(“com.microsoft.JDBC.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驱 动程序
Class.forName(“com.ibm.db2.JDBC.app.DB2Driver”);//使用DB2的JDBC驱动程序
Class.forName(“com.mysql.JDBC.Driver”);//使用MySql的JDBC驱动程序
2.创建数据库连接
与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, String password )方法
Eg:是根据MySQL数据做的案例
Connection con=null;
String url=“jdbc:mysql://localhost:3306/diyou”;
String user=“root”;
String password=“root”;
conn = DriverManager.getConnection(url, user, password);
3.创建Statement并发送命令
Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句
有三种 Statement对象:
Statement:用于执行不带参数的简单SQL语句;
PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;
CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。
注意:1、Statement缺陷:存在SQL注入风险,由createStatement创建,用于发送简单的SQL语句。(不带参数的);
2、PreparedStatement 接口继承 Statement接口 • 如果需要多次执行一个SQL语句,可以使用PreparedStatement对象。在创建 PreparedStatement对象时,通过传递不同参数值多次执行PreparedStatement对象,可 以得到多个不同的结果。
优势:执行效率高、代码可读性强、安全性高
4.处理ResultSet结果
ResultSet对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的 所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这 些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,且有一个记录指针,指针所指的数据行 叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用 ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
ResultSet对象自动维护指向当前数据行的游标。每调用一次next()方法,游标向下移动一行。
初始状态下记录指针指向第一条记录的前面,通过next()方法指向第一条记录。循环完毕后 指向最后一条记录的后面。
5.关闭数据库资源
作为一种好的编程风格,应在不需要Statement对象和Connection对象时显式地关闭它们。关 闭Statement对象和Connection对象的语法形式为:
public void close() throws SQLException
用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一 个结果时,该ResultSet将被自动关闭。
注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为 Statement和ResultSet是需要连接是才可以使用的,所以在使用结束之后有可能其他的 Statement还需要连接,所以不能先关闭Connection。
package com.gx.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCDemo {
public static void main(String[] args) {
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
//1、加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//2、通过DriverManager获取数据库的连接Connection
String url ="jdbc:mysql://localhost:3306/demo";
String user ="root";
String password ="root";
conn =DriverManager.getConnection(url, user, password);
//3、从数据库连接Connecton 创建Statement或者*PreparedStatement
//Statement s=conn.createStatement();
ps=conn.prepareStatement("SELECT * from pw_user");
//4、使用PreparedStatement或者Statement执行sql并返回结果集
/* DDL(数据定义语言) 主要用来操作数据的结构,CREATE、ALTER、DROP表
DML(数据操作语言) 主要用来操作数据,insert、update、delete、select
DCL(数据控制语言) 主要用来操作数据库的权限
execute();可以执行任何SQL语句,但比较麻烦
executeUpate();主要用于执行增删改操作,返回受SQL语句影响的行数,执行DDL返回0.
executeQuery();只能执行查询语句,执行后返回代表查询结果的ResultSet对象*/
rs=ps.executeQuery();
//5、从ResultSet获取数据
while(rs.next()){
System.out.println(rs.getInt(1)+"\t"+rs.getString(2));
}
//Connection.class
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{//关闭资源
try {
if(conn!=null)
conn.close();
if(ps!=null)
ps.close();
if(rs!=null)
rs.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}