zoukankan      html  css  js  c++  java
  • JDBC基础

    1.JDBC介绍

    JDBC(Java Database Connectivity)是基于JAVA语言访问数据库的一种技术。
    JDBC包括一套JDBC的API和一套程序员和数据库厂商都必须去遵守的规范。
    定义在两个包中:

    java.sql包:提供访问数据库基本的功能
    javax.sql包:提供扩展的功能

    2.JDBC可以做些什么?

    连接到数据库
    在Java app中执行SQL命令
    处理结果。

    3.JDBC中常用的接口和类

    1.Java.sql.DriverManager 驱动管理器。用来装载驱动程序,并且为创
    建新的数据库连接提供支持。
    2. Java.sql.Connection完成对某一指定数据库的连接
    3. Java.sql.Statement在一个给定的连接中作为SQL执行语句的容器,他包含了两个重要的子类型。

    – Java.sql.PreparedSatement用于执行预编译的sql语句
    – Java.sql.CallableStatement用于执行数据库中存储过程的调用

    4. Java.sql.ResultSet对于给定SQL语句取得结果的途径


    4.通过JDBC连接数据库的步骤:

    1.加载驱动程序
    使用Class.forName()显式加载驱动程序。

    例如:
    Class.forName(“oracle.jdbc.driver.OracleDriver”);
    加载了oracle提供的jar包内的OracleDriver类

    2. 建立连接
    使用DriverManager.getConnection(url);建立与给定数据库URL的连接。

    例如

    1 String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    2 String user="SCOTT";
    3 String password = "tiger";
    4 Connection conn = DriverManager.getConnection(url, user, password);

    5.处理块Statement

    5.1 静态处理块 Statement

    特点: 静态的sql语句
    创建: Connection对象调用 createStatement() 方法
    操作:

    executeQuery(String sql) --> select 查询
    executeUpdate(String sql) --> DML操作(insert 、delete、update)
    execute(String sql) --> DDL操作

    5.2 预处理块 PreparedStatement

    特点: 动态的sql语句 凡是Statement 能够处理的 PreparedStatement都能处理反之不一定
    创建: Connection对象调用 prepareStatement(String sql) 方法
    操作:

    executeQuery(String sql) --> select 查询
    executeUpdate(String sql) --> DML操作(insert 、delete、update)
    execute(String sql) --> DDL操作
    可以使用"?"作为参数替换SQL语句中的部分值,后面传入参数(可解决SQL注入问题)

    可定义参数的位置:

    select -->where sal=?
    insert --> values(?)
    update --> set sal=? where deptno=?
    delete --> where sal=?

    设置参数值:setXxx(int index, Xxx x)
    index:第几个参数
    Xxx:参数类型
    x:参数值
    注:定义的参数必须填充
    例:

    1  String sql = "select * from t_user where username = ? and password = ?";
    2  PreparedStatement ps = conn.prepareStatement(sql);
    3  String u = "zhangsan";
    4  String p = "123456";
    5  ps.setString(1, u);
    6  ps.setString(2, p);
    7  ResultSet rs = stat.executeQuery(sql);

    5.3 总结:

    1.Statement对象在每次执行sql语句时都将语句传给数据库,在多次执行同一个语句时,效率比较低。
    2.Statement对象Sql注入引起安全问题。
    3.可以使用PreparedStatement,使用数据库的预编译功能,速度可以提高很多.避免sql注入引起的安全问题。
    4.PreparedStatement对象的sql语句可以接受参数,每次执行时可以传递不同的参数


    6.检索结果集

    处理块调用executeQuery(sql)方法会返回一个ResultSet类的对象

    ResultSet的基本处理方法:
    – ResultSet对象包括一个由查询语句返回的一个表,这个表中包含所有的查询结果,按照行和列进行处理.
    – ResultSet对象维持一个指向当前行的指针.最初,这个指针指向第一行之前.ResultSet类的next()方法使这个指针移向下一行.第一次,使用next()方法,将指针指向结果集的第一行.next方法的返回值是一个boolean值,若为true,则成功移向下一行.若返回false则没有下一行.
    – getXXX方法可以从某一列中获得结果.其中XXX是jdbc中的java数据类型.如getInt();需要制定检索的列,或名称


    7.查询数据库步骤:

    1.加载数据库驱动类

    1)在工程下新建lib文件夹,将 ojdbc6.jar(jar包在:E:oracleproduct11.2.0dbhome_1jdbclib)拷贝至该目录下
    2)右键ojdbc6.jar文件,build path --> add too build path
    3)将驱动类加载到内存中
    Class.forName("oracle.jdbc.driver.OracleDriver");

    2.获取数据库连接对象

    Connection conn = DriverManager.getConnection(url,user,password);

    3.写sql语句

    String sql = "xxxxxx";

    4.创建PreparedStatement对象

    PreparedStatement ps = conn.prepareStatement(sql);

    5.执行查询返回ResultSet结果集对象

    ResultSet rs = ps.executeQuery();

    6.遍历结果集,获取查询结果

    while(rs.next){
    rs.getXxx()
    }

    7.释放资源

    rs.close()
    ps.close()
    conn.close()

    8.批处理


    多次执行数据更新操作时,可以使用批处理减少连接数据库次数,提高效率

    Statement批处理方式:
    Statement st = conn.createStatement();
    st.addBatch(更新语句1);
    st.addBatch(更新语句2);
    …..
    st.executeBatch();
    st.close();


    PreparedStatement批处理方式:
    PreparedStatement ps = conn.preparedStatement(sql);
    ps.setXXX(索引,参数值);
    … …
    ps.addbatch();
    ps.executeBatch();
    ps.close();

    作者:ki16
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    java里如何使用输入流和输出流实现读取本地文件里内容和写出到本地文件里
    Windows 命令行基础(博主推荐)
    Python2.7编程基础(博主推荐)
    27 个Jupyter Notebook的小提示与技巧
    java里如何实现循环打印出字符或字符数组里的内容
    [转]angularjs之ui-grid 使用详解
    [转]AngularJS 实现 Table的一些操作(示例大于实际)
    [转]js 回车转成TAB(利用tabindex)
    [转] Entity Framework添加记录时获取自增ID值
    [转]使用依赖关系注入在 ASP.NET Core 中编写干净代码
  • 原文地址:https://www.cnblogs.com/gaojinshun/p/10770432.html
Copyright © 2011-2022 走看看