一、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. 嵌入式Linux开发系列之一: 走进嵌入式Linux的世界

    转载:http://www.ibm.com/developerworks/cn/linux/l-embed/part1/index.html   随着信息化技术的发展和数字化产品的普及,以计算机技术. ...

  2. TRF7960天线参数试验

    CA1焊47pF就好了,不大用调,主要调CA2的值 图中CA2焊100pF时,读卡距离2cm左右 27pF                3.5cm左右 不焊 4cm左右 47pF 5cm左右 现在手 ...

  3. Spreadsheet Tracking

     Spreadsheet Tracking  Data in spreadsheets are stored in cells, which are organized in rows (r) and ...

  4. MYSQL基础笔记(一)

    关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...

  5. JS 控制文本框只能输入中文、英文、数字与指定特殊符号

    想做姓名输入的js判断是否是中文,但是网上找的很多是源于一篇文章的,判断中文的正则式不对,后来找到一个可以准确判断了,但是是监测里面有中文的就行,跟我想要的只能输入中文的意思相左,所以又找了下面的 J ...

  6. SQL Server :事务和锁

    1.事务 事务概念:全部执行或全部不执行的一条或者多条语句的组合 例子说明:到银行里转账,将一个账户(Tom)里的100元钱转到另一个账户(Jake) update table money=money ...

  7. AutoHotKey 脚本集中营(一)

    前言:实战是最好的学习.本集中营共分 x+mc2 期(x 为已发行的期数,m 为我的空闲时间,c 为我的更新动力),旨在通过对脚本代码的阅读而提高 AHK 语言的熟练程度.脚本的难度与期数成正比,有兴 ...

  8. 设计模式——java

    设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...

  9. loadrunner做webservice接口之简单调用

    今天听大神讲了webservice做接口,我按照他大概讲的意思自己模拟实战了下,可能还有很多不对,一般使用webservice做接口,会使用到soapui,但是用了loadrunner以后发现lr很快 ...

  10. Objective-C 【多个对象内存管理(野指针&内存泄漏)】

    ------------------------------------------- 多个对象内存管理(野指针&内存泄漏) (注:这一部分知识请结合"单个对象内存管理"去 ...