-------------------------------------------------------------------------------------------------------------------------java
概念sql
JDBC Java Database Connectivity 提供Java访问各类数据库的API。 而后由这个数据库厂商来完成这些借口。数据库
JDBC API中的几个重要的接口并发
DriverManger 咱们要链接一个或N个数据库,DriverManger就是管理就一个或多个数据库用的,咱们要什么链接,就从它这取就好了oracle
Connection 提供了与数据库交互的方法(自我理解,向DriverManger索要的一个链接)url
Statement 提供了与SQL相关的操做(自我理解,就是用来操做SQL语句的)spa
ResultSet 提供了SQL返回结果集的操做(SQL语句执行的结果。)code
SQLException 处理在上面几个操做中的异常。对象
概念总以为很难理解。我是这么理解,不对的地方请你们指出blog
数据库在对面,中间有条河,我要操做数据库,分为几个步骤
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 这个容器封装成数据源,而后获取链接。访问量大的时候最好用这个(其实我也不知道 我看网上查的,最后试试)
connection = DriverManager.getConnection(url, user, password);
//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>;
//注意
connection.setAutoCommit(false); //这句话意思是把事务设置成不自动提交,若是在statement操做sql语句时,不会出现第N句语句出现异常以后,N后面的语句执行不到的状况
statement.executeUpdate(sql);
statement.executeUpdate(sql);
statement.executeUpdate(sql);
connection.commit();//提交
conection.rollback();//若是上面sql语句中有任何语句错误,可总体回滚
3.Statement preparedStatement CallableStatement (步骤 建立对象 执行sql语句 关闭statement)
第三个继承第二个 第二个继承第一个
Statement 提供最基本的sql操做 适合静态的sql语句,且传入的sql语句没法接受参数
preparedStatement 能够在sql中传递参数 适合屡次使用sql语句,能够防止SQL注入
//建立方法
statement = connection.createStatement(resultSetType, resultSetConcurrency, resultSetHoldabliity);
//建立一个statement对象,该对象生成具备给定类型,并发性,可保存的result对象
//resultSetType参数主要描述俩件事,游标是否能够左右移动,已经取出的结果集对数据库的改动是否要更新
//resultSetType有三种能够取值:resultSet.TYPE_FORWARD_ONLY,游标只能向前移动,默认是这种;
//resultSet.TYPE_SCROLL_INSENSITIVE能够先后移动,对数据的改动不关心(如你正在读取数据的时候,有其余一我的操做数据库,对你查询的结果集作出改变,次改变对你不影响);resultSet.TYPE_SCROLL_SENSITIVE(哈哈 这个单词我认识,打CS调节鼠标速度的)能够先后移//动,而且数据库发生改动时候,resultSet也发生变化。 这种状况下resultSet能够复用。
//resultSetConcurrency,是否更新结果集中的数据到数据库
//能够有俩种取值,resultSet.CONCUR_READ_ONLY是只读,resultSet.CONCUR_UPDATEABLE能够更改的
//method //若是有result 返回为true,不然为flase,通常用于drop alter create boolean execute(String SQL) //返回影响的行数,通常用于insert update delete int executeUpdate(String SQL) //返回一个结果集result 通常用于查询select ResultSet executeQuery(String SQL)
4.ResultSet
当对数据库进行查询操做的时候, 数据库返回的数据经过 ResultSet 接口获取. ResultSet就是SQL执行的结果,ResultSet 内部管理了一个 cursor(游标), cursor 指向当前要读的数据,
ResultSet 提供了如下三类接口:
游标移动接口, 用来操做移动游标.
获取数据接口, 用来从当前游标指向位置的数据
更新数据接口, 用来更新当前游标指向位置的数据, 并能够更改对应数据库中的数据.
//方法
resultSet.next();//把光标移动到下一行。(从上到下)
resultSet.previous();//把光标移动到上一行。
resultSet.absolute(int row) //移动到指定行
resultSet.beforeFirst();移动到最前面
resultSet.afterLast();移动到最后面
resultSet.getObject("id");
resultSet.getInt(1); 或者但是resultSet.getInt("id");//取第一colum或者是取id这个colum
connection statement resultset 要释放。
-------------------------------------------------------------------------------------------------------------------------
案例 读取数据
ID NAME PASSWORD EMAIL BIRTHDAY AGE
---------- ------------------------------ -------------------------------------------------- -------------------------------------------------------------------------------- ----------- ----
4 张三 admin 123qq.com 2015/11/15 30
1 李四 admin 455@qq.com 2015/11/14 20
5 王五 admin 123@qq.com 2015/11/17 10
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; 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/orcl"; String user = "user"; String password = "passowrd"; try { //1.注册驱动 - - Class.forName("oracle.jdbc.driver.OracleDriver"); //2.获取与数据库的链接 connection = DriverManager.getConnection(url, user, password); //3.得要操做sql的对象 statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); //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; } } }
//DataSource获取Connection对象
public static Connection getOralceConnectionWithDataSource() throws SQLException{ OracleDataSource dataSource = new OracleDataSource(); driver = properties.getProperty(driver); url = properties.getProperty(url); user = properties.getProperty(user); password = properties.getProperty(password); dataSource.setURL(url); dataSource.setUser(user); dataSource.setPassword(password); return dataSource.getConnection(); }