javaee论坛

普通会员

225648

帖子

352

回复

366

积分

楼主
发表于 2017-06-11 04:25:36 | 查看: 457 | 回复: 0

1、Java DataBase Connectivity(java数据库连接)

2、组成包:java.sql.*;javax.sql.*;这两个包都包含在了JDK中。

3、还需要数据库的驱动,这些驱动就相当于对JDBC规范的实现


二、JDBC的编码步骤

1、把数据库的驱动加入到classpath中

2、开发步骤:

 * 开发步骤:(必须记住的)

 * 1、注册驱动

 *  2、获取与数据库的链接

 *  3、得到代表SQL语句的对象

 *  4、执行语句

 *  5、如果执行的是查询语句,就会有结果集,处理

 *  6、释放占用的资源

3、具体代码

< name="code" class="sql">package com.heima.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;//演示第一个JDBC案例public class JdbcDemo1 { public static void main(String[] args) throws Exception { //1. 注册驱动 Class.forName("com.mysql.jdbc.Driver") ; //2. 创建一个连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root") ; //3. 创建一个sql语句的发送命令对象 Statement stmt = conn.createStatement() ; //4. 执行SQL,拿到查询的结构集对象 ResultSet rs = stmt.executeQuery("select * from stu") ; //5. 输出结果集的数据 while(rs.next()){ System.out.println(rs.getInt("id") + ":" + rs.getString("name") + ":" + rs.getString("address")); } //6. 关闭连接,命令对象,结果集 rs.close() ; stmt.close(); conn.close() ; }}
注册驱动的三种方式:
< code_snippet_id="2076647" snippet_file_name="blog_20161226_2_8106640" name="code" class="java">//1. 注册驱动 //第一种方式 Driver driver = new Driver() ; DriverManager.registerDriver(driver) ; //第二种方式// Driver d = (Driver)Class.forName("com.mysql.jdbc.Driver").newInstance() ;// DriverManager.registerDriver(d) ; //第三种方式 Class.forName("com.mysql.jdbc.Driver") ; //自动进行注册创建连接的三种方式
properties文件一般在src下创建
< code_snippet_id="2076647" snippet_file_name="blog_20161226_3_3483005" name="code" class="sql">String driverClass = "" ; String url = "" ; String user = "" ; String password = "" ; Properties pro = new Properties() ; InputStream in = JdbcDemo3.class.getClassLoader().getResourceAsStream("dbcfg.properties") ; pro.load(in) ; driverClass = pro.getProperty("driverClass") ; url = pro.getProperty("url") ; user = pro.getProperty("user") ; password = pro.getProperty("password") ; //1. 注册驱动 Class.forName(driverClass) ; //2. 创建一个连接对象 //第一种方式 //Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?user=root&password=root") ; //第二种方式 //读取properties文件// Properties pro = new Properties() ;// InputStream in = JdbcDemo3.class.getClassLoader().getResourceAsStream("dbcfg.properties") ;// pro.load(in) ;// Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", pro) ; //第三种方式 Connection conn = DriverManager.getConnection(url,user,password) ;
properties文件:


执行插入、修改、删除的sql语句
< code_snippet_id="2076647" snippet_file_name="blog_20161226_4_1258941" name="code" class="java">package com.heima.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;//演示第一个JDBC案例public class JdbcDemo4 { public static void main(String[] args) throws Exception { //1. 注册驱动 Class.forName("com.mysql.jdbc.Driver") ; //2. 创建一个连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root") ; //3. 创建一个sql语句的发送命令对象 Statement stmt = conn.createStatement() ; //4. 执行SQL,拿到查询的结构集对象 //String sql = "insert into stu(id,name,sex,age,address) values(12,'东方不败','男',20,'黒木崖')" ; // String sql = "update stu set sex ='女' where id = 12" ; String sql = "delete from stu where id = 12" ; int n = stmt.executeUpdate(sql) ;//n=1:结果的执行情况 System.out.println(n); //5. 关闭连接,命令对象,结果集 stmt.close(); conn.close() ; }}拿取结果集:
< code_snippet_id="2076647" snippet_file_name="blog_20161226_5_7781140" name="code" class="java">package com.heima.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;//演示第一个JDBC案例public class JdbcDemo5 { public static void main(String[] args) throws Exception { //1. 注册驱动 Class.forName("com.mysql.jdbc.Driver") ; //2. 创建一个连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root") ; //3. 创建一个sql语句的发送命令对象 Statement stmt = conn.createStatement() ; //4. 执行SQL,拿到查询的结构集对象 ResultSet rs = stmt.executeQuery("select id 编号,name 姓名 from stu") ; //5. 输出结果集的数据 while(rs.next()){ // System.out.println(rs.getInt("id") + ":" + rs.getString("name") + ":" + rs.getString("address")); //第一种:根据字段名拿取 (推荐) // int id = rs.getInt("编号") ; //是结果集的字段名 // String name = rs.getString("姓名") ; //第二种: 根据字段的索引(索引从1开始) int id = rs.getInt(1) ; String name = rs.getString(2) ; System.out.println(id + ":" + name); } //6. 关闭连接,命令对象,结果集 rs.close() ; stmt.close(); conn.close() ; }}

三、JDBC中的主要接口或类

1、DriverManger类详解

1.1作用:a、注册驱动b、获取与数据库的链接

1.2改进注册驱动:(不能依赖具体的数据库驱动

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

缺点:严重依赖具体的驱动类;会导致驱动被注册2次。

 

替代方案:Class.forName("com.mysql.jdbc.Driver");

1.3获取与数据库的链接

l  方式一:(推荐)

DriverManager.getConnection("jdbc:mysql://localhost:3306/day15","root", "root");

jdbc:mysql://localhost:3306/day15 :SUN和数据库厂商定义的协议,具体的参考数据库的文档。

 jdbc:mysql:///day15 (链接本机的默认端口3306)=jdbc:mysql://localhost:3306/day15

u  方式二:


方式三:


数据库URL:

lURL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

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

Oracle写法:jdbc:oracle:thin:@localhost:1521:sid

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

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

Mysql的url地址的简写形式:jdbc:mysql:///sid

常用属性:useUnicode=true&characterEncoding=UTF-8


2、Connection简介

所有的与数据库的交互都是基于链接的基础之上的,因此该对象相当重要。

Statement stmt =conn.createStatement():创建向数据库发送sql的statement对象

lJdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:
createStatement():创建向数据库发送sqlstatement对象。
pareStatement(sql):创建向数据库发送预编译sqlPrepareSatement对象。
pareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit():在链接上提交事务。
rollback():在此链接上回滚事务。

3、Statement详解

作用:代表SQL语句;向数据库发送并执行SQL语句

常用方法:

ResultSetexecuteQuery(String sql):只适合查询,返回的是查询的结果集

int executeUpdate(String sql):适合DML,或者没有返回结果集的DDL,返回的是影响的记录行数


boolean execute(Stringsql):执行任何的SQL语句,返回的不是成功与否。有结果集的返回true,没有返回false。


lJdbc程序中的Statement对象用于向数据库发送SQL语句,Statement对象常用方法:
executeQuery(String sql):用于向数据发送查询语句。
executeUpdate(String sql):用于向数据库发送insertupdatedelete语句
execute(String sql):用于向数据库发送任意sql语句
addBatch(String sql):把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。 

4、ResultSet详解

作用:代表者查询语句的查询结果集

4.1遍历过程:有一个游标,如何遍历结果集,请看图


lJdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next()方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
lResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
•获取任意类型的数据

•getObject(int index)

•getObject(string columnName)

•获取指定类型的数据,(封装数据时方便)例如:

•getString(int index)

•getString(String columnName)

•提问:数据库中列的类型是varchar,获取该列的数据调用什么方法?Int类型呢?bigInt类型呢?Boolean类型?
lResultSet还提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast():移动到resultSet的最后面。

常用数据类型转换表:


4.2如何获取列的数据

方式一:(推荐)


方式二:了解


4.3常用的方法:(改变游标位置的)

l  boolean next():向后移动游标,同时返回该位置上有木有记录

l  boolean vious():向前移动游标,同时返回该位置上有木有记录

l  boolean absolute(int rowNum):定位到某行(第一行是1),同时返回该位置上有木有记录

l  void beforeFirst():游标定位在第一行的前面

l  void afterLast():游标定位在最后一行的后面

< code_snippet_id="2076647" snippet_file_name="blog_20161226_6_998697" name="code" class="java">package com.heima.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;//演示结果集的移动public class JdbcDemo6 { public static void main(String[] args) throws Exception { //1. 注册驱动 Class.forName("com.mysql.jdbc.Driver") ; //2. 创建一个连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root") ; //3. 创建一个sql语句的发送命令对象 Statement stmt = conn.createStatement() ; //4. 执行SQL,拿到查询的结构集对象 ResultSet rs = stmt.executeQuery("select * from stu") ; //5. 输出结果集的数据 rs.first() ; //移动到第一条 rs.last() ; //移动到最后一条 rs.absolute(5) ; //移动到第五条 rs.vious() ; //移动到第4条 //rs.afterLast() ; //移动到最后一条记录的后边 System.out.println(rs.getInt("id") + ":" + rs.getString("name") + ":" + rs.getString("address")); //6. 关闭连接,命令对象,结果集 rs.close() ; stmt.close(); conn.close() ; }}

小练习:取出最后一条记录


四、JDBC的编码规范和工具类的提取


五、JDBC进行CRUD




您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017