一、jdbc介绍

  1. jdbc全称:java数据库连接(Java Database Connectivity),是sun公司定义的一套访问数据库的规范(接口和类,由各种数据库公司进行实现),主要放在java.sql.*和javax.sql.*这两个包中。
  2. jdbc开发需要引入java.sql.*、javax.sql.*以及相应的JDBC数据库实现jar包。

二、一个简单的jdbc程序的实现步骤(分别给出三种数据库操作例子)

  1. 步骤

    第一步:引入需要的包;

    如java.sql.*,javax.sql.*;

    第二步:加载驱动;

    Class.forName(String className);

    注:另一种方法是:DriverManager.registerDriver(new 驱动类名()(如OracleDriver()));在实际开发中不推荐这种方法,这种方法会导致驱动程序加载两次,效率不高

    第三步:得到与数据库的连接;

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

    注:根据url获取数据库的连接,user是登陆数据库的用户名,password是登陆密码

    数据库url详解:url的写法为: localhost可以用指向本地机的回送地址127.0.0.1代替

    常用数据库url地址的写法:

    Oracle——jdbc:oracle:thin:@localhost:1521:sid

    SqlServer——jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid

    MySQL——jdbc:mysql://localhost:3306/sid

    第四步:创建发送sql语句的对象;

    Statement statement=conn.createStatement();

    注:

    有三种类可用:

    ①Statement:这个类是最原始最普通的,可以实现crud操作,但在查询操作中可能会出现注入漏洞;

    ②PrepareStatement:可以对sql语句进行预处理,可以使用其提供的set方法防止注入漏洞,安全性和可靠性比较高;

    ③CallableStatement:用于调用存储过程;

    第五步:通过statement向数据库发送sql语句;

    statement.executeUpdate(String sql);  //executeUpdate()用于执行INSERT、UPDATE、DELETE语句或DDL语句,会返回一个结果代表该sql语句影响的行数

    statement.executeQuery(String sql); //executeQuery()用于执行SELECT语句,会返回一个结果集ResultSet,需要对结构进行处理

    第六步:断开与数据库的连接,并释放相关资源(按先打开的后关闭原则进行关闭);

    注:整个数据库处理语句会抛异常所以用try catch块包起来,关闭连接的语句写在块后面的finally块中

  2.  下面给出几段简单的程序例子:

     1 /**
    2 * 演示如何使用jdbc和Oracle数据库进行连接
    3 */
    4 package com.oracle.demos;
    5 import java.sql.*;
    6
    7 import javax.sql.rowset.JdbcRowSet;
    8 public class Demo1 {
    9
    10 public static void main(String[] args) {
    11
    12 Connection conn=null;
    13 Statement statement=null;
    14 try {
    15 Class.forName("oracle.jdbc.driver.OracleDriver");
    16 conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
    17 statement=conn.createStatement();
    18 String sql="";
    19 int n=statement.executeUpdate(sql);
    20
    21 } catch (Exception e) {
    22 e.printStackTrace();
    23 // TODO: handle exception
    24 }finally{
    25 try {
    26 if(statement!=null){
    27 statement.close();
    28 }
    29 if(conn!=null){
    30 conn.close();
    31 }
    32 } catch (Exception e2) {
    33 e2.printStackTrace();
    34 // TODO: handle exception
    35 }
    36 }
    37 }

三、重要知识点

  1. Connection接口

    其引用对象用于代表数据库的连接,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法有:

    ①createStatement();创建向数据库发送sql语句的statement对象;

    ②prepareStatement(String sql);创建向数据库发送预编译sql语句的PrepareStatement对象;

    ③prepareCall(String sql);创建执行存储过程的callableStatement对象;

    ④setAutoCommit(boolean autoCommit);设置事务是否自动提交,默认为true;

    ⑤commit();在此连接上提交事务;

    ⑥rollback();在此连接上回滚事务;

    注:当有多个dml操作同时执行,将这些操作看做一个整体进行提交,这个时候就需要将setAutoCommit设置为false,在执行commit()语句时进行统一提交,这样如果出了错误可以整体回滚;

    具体实现代码:

     1 package com.oracle.demos;
    2 import java.sql.*;
    3
    4 import javax.sql.rowset.JdbcRowSet;
    5 public class Demo1 {
    6
    7 public static void main(String[] args) {
    8
    9 Connection conn=null;
    10 Statement statement=null;
    11 try {
    12 Class.forName("oracle.jdbc.driver.OracleDriver");
    13 conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
    14 //把事务设为不自动提交
    15 conn.setAutoCommit(false);
    16 statement=conn.createStatement();
    17 String sql1="";
    18 String sql2="";
    19 statement.executeUpdate(sql1);
    20 statement.executeUpdate(sql2);
    21 //提交所有事务
    22 conn.commit();
    23 } catch (Exception e) {
    24 e.printStackTrace();
    25 try {
    26 //任何sql语句出错,可以整体回滚
    27 conn.rollback();
    28 } catch (SQLException e1) {
    29 e1.printStackTrace();
    30 }
    31 }finally{
    32 try {
    33 if(statement!=null){
    34 statement.close();
    35 }
    36 if(conn!=null){
    37 conn.close();
    38 }
    39 } catch (Exception e2) {
    40 e2.printStackTrace();
    41 }
    42 }
    43 }
    44
    45 }

    System.out.println(接口引用的某个类实例);将输出类的全名,该方法用于查看某个接口引用指向的真正对象实例的类型是什么。如上面的程序中执行System.out.println(conn)则输出对象数据库公司(Oracle)提供的实现Connection这个接口的类的类名。

  2. ResultSet

    用于代表sql语句的执行结果集的数据表,通常通过执行查询语句生成,ResultSet封装执行结果时,采用的类似于表格的方式。ResultSet对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet接口的next()方法可以移动游标循环取出所有数据。

    ResultSet常用方法有:
    ①next();移动到下一行
    ②previous();移动到前一行
    ③absolute(int row);移动到指定行[row从1开始计算]
    ④beforeFirst();移动到resultSet的最前面
    ⑤afterLast();移动到resultSet的最后面

    next()方法:将光标从当前位置向前移一行。ResultSet光标最初位于第一行之前;第一次调用next()方法使第一行成为当前行,第二次调用使第二行成为当前行,一次类推如果新的当前行有效,则返回true,如果不存在下一行,则返回false。

    获取数据的get方法:①获取任意类型的数据,getObject(int index)或getObject(String columnName)
                                    ②获取指定类型的数据(如String类型),getString(int index)或getString(String columnName)
                                    其中index为字段(列)的标号从1开始,columnName为字段名字

    ResultSet类型:默认只能向前读取;TYPE_SCROLL_INSENSITIVE表示可回滚,但当数据库数据更新时取到的ResultSet不进行相应的实时更新 ;TYPE_SCROLL_SENSITIVE则表示ResultSet受数据库数据变动的影响;

    常用数据库数据类型与java数据类型转换表:
    Oracle
    (这是一幅图片,如果看不清选择另存为...)
    Sql Server

    MySql

  3. 资源释放
    Jdbc程序运行完后,切记要释放程序在运行过程中创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
    特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
    为了确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

jdbc学习(一)——SqlServer、Oracle和MySQL的更多相关文章

  1. spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置

    spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...

  2. Oracle、MySql、SQLServer 数据分页查询

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  3. SQLServer Oracle MySQL的区别

    table tr:nth-child(odd){ background: #FFFFCC; font-size: 18px; } table tr:nth-child(even){ backgroun ...

  4. 转Oracle、MySql、SQLServer 数据分页查询

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  5. Oracle、MySql、SQLServer数据分页查询

    看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...

  6. 【转】JMeter 通过 JDBC 访问 Oracle 和 MySQL

    JMeter 的手册中描述了如何访问 MySQL,但是没有说明如何访问 Oracle.对于没有 Java 应用开发经验和对 Oracle 不是特别熟悉的朋友,可以参考这篇文章来简单.快速的配置好 JM ...

  7. oracle ,mysql,postgres jdbc配置文件

    #db mysql #jdbc.driver=com.mysql.jdbc.Driver #jdbc.url=jdbc:mysql://localhost:3306/mysql?&useUni ...

  8. 数据库相关知识积累(sqlserver、oracle、mysql)

    数据库相关知识积累(sqlserver.oracle.mysql) 1. sqlserver :断开所有连接: (还原数据库) 1.数据库  分离 2. USE master GO ALTER DAT ...

  9. 数据库多行数据合并一行(sqlserver、Oracle、Mysql)

    我们日常查询数据时,经常会有将查询到的数据按照某一列分组显示(合并多行数据),比如: 表结构: ),coursename )); 需要将以上数据按照用户名分组,所选课程列不同项之间用逗号隔开,在一行中 ...

  10. Oracle、MySQL和Sqlserver的事务管理、分页和别名的区别

    1.在mysql中事务默认是自动提交的,只有设置autocommit为0的时候,才用自己commit(commit--rollback回滚) 2.但是在oracle中必须自己commit;不然就只能结 ...

随机推荐

  1. php常见问题辨析(二)

    一:unset: 1.如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值,如果您想在函数中 unset() 一个全局变量,可 ...

  2. vim替换命令

    转载:http://blog.csdn.net/glorin/article/details/6317098 替換(substitute) :[range]s/pattern/string/[c,e, ...

  3. 数据结构笔记02:Java面试必问算法题

    1. 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的 ...

  4. CEF js调用C#封装类含注释

    /* * CEF JS调用C#组装类 * * 使用方法(CefGlue为例): * public class BrowserRenderProcessHandler : CefRenderProces ...

  5. JSONP与JSON的关系

    这篇文章<说说JSON和JSONP,也许你会豁然开朗>写得非常棒,推荐一下 http://kb.cnblogs.com/page/139725/ (大神,对不起,我记录一下,因为你写的真得 ...

  6. truncate 函数用法示例

    --Oracle trunc()函数的用法 /**************日期********************/ select trunc(sysdate) from dual --2015- ...

  7. bootstrap的滚动监听

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  8. 媒体查询的应用以及在css3中的变革

    CSS一直都支持设置与媒体相关联的样式表.它们可以适应不同媒体类型的显示.例如,文档在屏幕显示时使用sans-serif字体,在打印时则使用serif字体.screen和print是两种预定义的媒体类 ...

  9. Ehcache(2.9.x) - API Developer Guide, Write-Through and Write-Behind Caches

    About Write-Through and Write-Behind Caches Write-through caching is a caching pattern where writes ...

  10. 第一次知道Winform的窗体之间传值怎么写,分享给小白~

    之前为了这事,百度了一天也没找到,最终使用了静态变量了. 窗体Form1: private void button1_Click(object sender, EventArgs e) { var f ...