JDBC学习随笔
-------------------------------------------------------------------------------------------------------------------------
概念
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 这个容器封装成数据源,然后获取连接。访问量大的时候最好用这个(其实我也不知道 我看网上查的,最后试试)
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(); }

浙公网安备 33010602011771号