1、jdbc介绍java
2、一个简单的jdbc程序的实现步骤(分别给出三种数据库操做例子)mysql
第一步:引入须要的包;sql
如java.sql.*,javax.sql.*;数据库
第二步:加载驱动;安全
Class.forName(String className);oracle
注:另外一种方法是:DriverManager.registerDriver(new 驱动类名()(如OracleDriver()));在实际开发中不推荐这种方法,这种方法会致使驱动程序加载两次,效率不高sqlserver
第三步:获得与数据库的链接;this
Connection conn=DriverManager.getConnection(String url,String user,String password);url
注:根据url获取数据库的链接,user是登录数据库的用户名,password是登录密码spa
数据库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块中
下面给出几段简单的程序例子:
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 }
3、重要知识点
其引用对象用于表明数据库的链接,客户端与数据库全部交互都是经过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这个接口的类的类名。
用于表明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