Java Database Connectivity (JDBC)
Sun公司提供的一个Java连接数据库的规范接口,而Sun公司没有实现其他中任何一个方法,要求数据库的第三方提供商实现的。主要用于连接数据库。
连接数据库的必要条件:
1. mysql 确定连接的内容是MySQL
2. 主机地址
3. 用户名
4. 密码
JDBC获取数据库连接:
URL Uniform Resource Locator 统一资源定位符
JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
---------------------------SQL Server------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=<dbname>
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
--------------------------DB2--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<machine_name><:port>/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是5000
-------------------------------------------------------
第三方Jar包导入和连接数据库
会使用到的包 说明 | |
java.sql | 所有与 JDBC 访问数据库相关的接口和类 |
javax.sql | 数据库扩展包,提供数据库额外的功能。如:连接池 |
数据库的驱动 | 由各大数据库厂商提供,需要额外去下载,是对 JDBC 接口实现的类 |
jdbc常用api
接口或类 作用 | |
DriverManager 类 |
|
Connection 接口 | 一个连接对象,可用于创建 Statement 和 PreparedStatement 对象 |
Statement 接口 | 一个 SQL 语句对象,用于将 SQL 语句发送给数据库服务器。 |
PreparedStatemen 接口 | 一个 SQL 语句对象,是 Statement 的子接口 |
ResultSet 接口 | 用于封装数据库查询的结果集,返回给客户端 Java 程序 |
注册驱动(DriverManager)
注册驱动程序最常见的方法是使用Java的Class.forName()方法,将驱动程序的类文件动态加载到内存中,并将其自动注册 Class.forName("oracle.jdbc.driver.OracleDriver");
可以用来注册驱动程序的第二种方法是使用静态DriverManager.registerDriver()方法
Driver myDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver( myDriver );
数据库连接类 (Connection)创建数据库连接对象
数据库URL配置
加载驱动程序后,可以使用DriverManager.getConnection()方法建立连接。为了方便参考,让我列出三个重载的DriverManager.getConnection()方法 -
-
getConnection(String url)
-
getConnection(String url,Properties prop)
-
getConnection(String url,String user,String password)
String URL = "jdbc:mysql://localhost:3306/EMP";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);
使用数据库URL和属性对象
String URL = "jdbc:mysql://localhost:3306/EMP";
Properties info = new Properties( );
info.put( "user", "username" );
info.put( "password", "password" );
Connection conn = DriverManager.getConnection(URL, info);
声明类(Statement)
Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象,它们都作为在给定链接上执行SQL语句的包容器:Statement、PreparedStatement(它从Statement继承而来)和CallableStatement(它从PreparedStatement继承而来)。它们都专用于发送特定类型的SQL语句:
(1)Statement对象用于执行不带参数的简单的SQL语句;Statement接口提供了执行语句和获取结果的基本方法。
(2)PerparedStatement对象用于执行带或不带IN参数的预编译SQL语句;PeraredStatement接口添加处理IN参数的方法;
(3)CallableStatement对象用于执行对数据库已存储过程的调用;CallableStatement添加处理OUT参数的方法。
Statement提供了许多方法,最常用的方法如下:
(1)execute()方法:运行语句,返回是否有结果集。
(2)executeQuery()方法:运行查询语句,返回ReaultSet对象。
(3)executeUpdata()方法:运行更新操作,返回更新的行数。
(4)addBatch()方法:增加批处理语句。
(5)executeBatch()方法:执行批处理语句。
(6)clearBatch()方法:清除批处理语句。
在使用Statement对象执行SQL语句之前,需要使用Connection对象的createStatement()方法创建一个,
stmt = conn.createStatement( );
创建Statement对象后,您可以使用它来执行一个SQL语句,其中有三个执行方法之一。
-
boolean execute(String SQL):如果可以检索到ResultSet对象,则返回一个布尔值true; 否则返回false。使用此方法执行SQL DDL语句或需要使用真正的动态SQL时。
-
int executeUpdate(String SQL):返回受SQL语句执行影响的行数。使用此方法执行预期会影响多个行的SQL语句,例如INSERT,UPDATE或DELETE语句。
-
ResultSet executeQuery(String SQL):返回一个ResultSet对象。当您希望获得结果集时,请使用此方法,就像使用SELECT语句一样。
SQL注入
就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。
PreparedStatement
该PreparedStatement的接口扩展了Statement接口,它为您提供了一个通用的Statement对象有两个优点附加功能。
String SQL = "Update Employees SET age = ? WHERE id = ?";
pstmt = conn.prepareStatement(SQL);
JDBC中的所有参数都由?符号,这被称为参数标记。在执行SQL语句之前,必须为每个参数提供值。
所述的setXXX()方法将值绑定到所述参数,其中XXX代表要绑定到输入参数的值的Java数据类型。如果忘记提供值,将收到一个SQLException。
每个参数标记由其顺序位置引用。第一个标记表示位置1,下一个位置2等等。该方法与Java数组索引不同,从0开始。
结果集合类 (ResultSet)
SELECT语句是从数据库中选择行并在结果集中查看行的标准方法。该java.sql.ResultSet中的接口表示结果集数据库查询。
使用步骤构建JDBC应用程序涉及以下六个步骤:
-
导入包:需要包含包含数据库编程所需的JDBC类的包。大多数情况下,使用import java.sql。*就足够了。
-
注册JDBC驱动程序:要求您初始化驱动程序,以便您可以打开与数据库的通信通道。
-
打开连接:需要使用DriverManager.getConnection()方法创建一个Connection对象,该对象表示与数据库的物理连接。
-
执行查询:需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
-
从结果集中提取数据:需要使用相应的ResultSet.getXXX()方法从结果集中检索数据。
释放资源:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
1 import java.sql.DriverManager;
2 import java.sql.ResultSet;
3 import java.sql.SQLException;
4 import java.sql.Statement;
5 import java.sql.Connection;
6 import java.sql.DriverManager;
7 import java.sql.SQLException;
8
9
10 public class javaTest {
11
12 public static void main(String[] args) throws ClassNotFoundException, SQLException {
13 String URL="jdbc:mysql://127.0.0.1:3306/imooc?useUnicode=true&characterEncoding=utf-8";
14 String USER="root";
15 String PASSWORD="tiger";
16 //1.加载驱动程序
17 Class.forName("com.mysql.jdbc.Driver");
18 //2.获得数据库链接
19 Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);
20 //3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
21 Statement st=conn.createStatement();
22 ResultSet rs=st.executeQuery("select * from user");
23 //4.处理数据库的返回结果(使用ResultSet类)
24 while(rs.next()){
25 System.out.println(rs.getString("user_name")+" "
26 +rs.getString("user_password"));
27 }
28
29 //关闭资源
30 rs.close();
31 st.close();
32 conn.close();
33 }
34 }
(1)加载驱动程序:Class.forName(driverClass)
加载mysql驱动:Class.forName("com.mysql.jdbc.Driver");
加载oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");
(2)获得数据库连接
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc",user,password);
DriverManager.gerConnection(URL,user,password);
(3)创建Statement对象:conn.createStatement();
(4)向数据库发送SQL命令
(5)处理数据库的返回结果(ResultSet类)