-------------------------------------------------------------------------------------------------------------------------
概念
JDBC Java Database Connectivity 提供Java访问各种数据库的API。 然后由这个数据库厂商来完成这些借口。
JDBC API中的几个重要的接口
DriverManger 我们要连接一个或N个数据库,DriverManger就是管理就一个或多个数据库用的,我们要什么连接,就从它这取就行了
Connection 提供了与数据库交互的方法(自我理解,向DriverManger索要的一个连接)
Statement 提供了与SQL相关的操作(自我理解,就是用来操作SQL语句的)
ResultSet 提供了SQL返回结果集的操作(SQL语句执行的结果。)
SQLException 处理在上面几个操作中的异常。
概念总觉得很难理解。我是这么理解,不对的地方请大家指出
数据库在对面,中间有条河,我要操作数据库,分为几个步骤
1.我需要连接数据库,我先问问数据库怎么连接你。然后数据库给我个驱动。
2.MangerDriver爸爸告诉我怎么修,然后我修好这个通道。
3.桥修好了找个对象就可以和数据库进行操作了。
4.对象取来了我执行数据库操作结果
-------------------------------------------------------------------------------------------------------------------------
变成代码
1 //注册驱动 2 Class.forName("oracle.jdbc.driver.OracleDriver"); 3 //建立简介 4 Connectoin connection = DriverManger.getConnecton("jdbc:oracle.thin://192.168.93.93:1521/orcl"); 5 //获取操作sql的对象 6 Statement statement = connection.createStatement(); 7 //执行sql语句 8 ResultSet resultSet = statament.executeUpdate(sql);
-------------------------------------------------------------------------------------------------------------------------
主要方法
1.注册驱动
DriverManager.registerDriver(new DriverManager.registerDriver());不推荐使用这种方式来加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver");
2.Connection可以通过俩个累获得
--DriverManger 在Java.sql 这个连接底层拿到连接
--DataSource 在Javax.sql 这个容器封装成数据源,然后获取连接。访问量大的时候最好用这个(其实我也不知道 我看网上查的,最后试试)
3.Statement preparedStatement CallableStatement
第三个继承第二个 第二个继承第一个
Statement 提供最基本的sql操作 适合静态的sql语句,且传入的sql语句无法接受参数
preparedStatement 可以在sql中传递参数 适合多次使用sql语句,可以防止SQL注入
CallableStatement 可以调用pl/sql 存储过程
//url 三种格式 String url = null ; //1 url = jdbc:oracle:thin:@//<host>:<port>/<service_name> ; //推荐//2 url =jdbc:oracle:thin:@<host>:<port>:<SID>;//3 url =jdbc:oracle:thin:@<TNSName>;
//方法 //如果有result 返回为true,否则为flase,一般用于drop alter create boolean execute(String SQL) //返回影响的行数,一般用于insert update delete int executeUpdate(String SQL) //返回一个结果集result 一般用于查询select ResultSet executeQuery(String SQL
步骤 创建对象 执行sql语句 关闭statement
4.ResultSet
当对数据库进行查询操作的时候, 数据库返回的数据通过 ResultSet 接口获取. ResultSet 内部管理了一个 cursor(游标), cursor 指向当前要读的数据,
ResultSet 提供了以下三类接口:
游标移动接口, 用来操作移动游标.
获取数据接口, 用来从当前游标指向位置的数据
更新数据接口, 用来更新当前游标指向位置的数据, 并可以更改对应数据库中的数据.
-------------------------------------------------------------------------------------------------------------------------
案例 从一张表中读取数据
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import oracle.jdbc.driver.OracleDriver; public class JDBCDemo { public static void main(String[] args) { // Connection connection = null; Statement statement = null; ResultSet resultSet = null; String url = "jdbc:oracle:thin:@//192.168.93.93:1521/center"; String user = "ghast"; String password = "7654123"; try { //1.注册驱动 - - Class.forName("oracle.jdbc.driver.OracleDriver"); //2.获取与数据库的连接 connection = DriverManager.getConnection(url, user, password); //3.得要操作sql的对象 statement = connection.createStatement(); //4.得sql语句结果集 resultSet = statement.executeQuery("select * from user1"); //5.获取查询结果 while(resultSet.next()){ System.out.println(resultSet.getObject("id")); System.out.println(resultSet.getObject("name")); System.out.println(resultSet.getObject("password")); System.out.println(resultSet.getObject("birthday")); System.out.println(resultSet.getObject("age")); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); // 听别人说要关闭它们 } finally{ try { if(connection != null){ connection.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } connection = null; try { if(statement != null){ statement.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } statement = null; try { if(resultSet != null){ resultSet.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } resultSet = null; } } }