JDBC_Mysql

一、jdbc基本概念 
jdbc : Java Database Connectivity 
sun公司为了统一对数据库的操作,定义了一套api,称之为jdbc 
这套api完全有接口组成,我们在编写程序的时候针对接口进行调用 
这些接口交给数据库厂家去实现, 不同的数据库厂商会提供不同的实现类,这些实现类被我们称作数据库的驱动 

二、实现jdbc程序 
步骤: 
1. 实验环境 
建 user 表  user.sql 
create database xday12 character set utf8 collate utf8_general_ci; 

use xday12; 

create table users( 
id int primary key auto_increment, 
name varchar(40), 
password varchar(40), 
email varchar(60), 
birthday date 
)character set utf8 collate utf8_general_ci; 

insert into users(name,password,email,birthday) 
values('zs','123456','[email protected]','1980-12-04'); 
insert into users(name,password,email,birthday) 
values('lisi','123456','[email protected]','1981-12-04'); 
insert into users(name,password,email,birthday) 
values('wangwu','123456','[email protected]','1979-12-04'); 

2. 导入数据库的驱动 
mysql-connector-java-5.0.8-bin.jar 

3. 编程java程序 
// 1. 注册数据库的驱动 
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
// 2. 建立与mysql数据库的连接  用到 jdbc api 
String url = "jdbc:mysql://localhost:3306/day11"; 
String user = "root"; 
String password = "root"; 
Connection conn = DriverManager.getConnection(url, user, password); 
// 3. 创建用于发送sql语句的 Statement 对象 
Statement stmt = conn.createStatement(); 
// 4. 编写一句 sql 
String sql = "select * from users"; 
// 5. 发送sql, 获得结果集 
ResultSet rs = stmt.executeQuery(sql); 
// 6. 处理结果集 
System.out.println("id | name   | password | email  | birthday"); 
while(rs.next()) { 
// 有第一行 
int id = rs.getInt("id"); // 通过列名取值比较直观 
String name = rs.getString("name"); 
String psw = rs.getString("password"); 
String email = rs.getString("email"); 
Date birthday = rs.getDate("birthday"); 
System.out.println(id + " | " + name + " | " + psw + " | " + email + " | " + birthday); 

// 7. 关闭连接 释放资源 
rs.close(); 
stmt.close(); 
conn.close(); 

三、jdbc程序详解 
1. 注册驱动 
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
上面的语句会导致注册两次驱动 
原因在于,查看Driver类的源码会发现在静态代码块中完成了注册驱动的工作, 
也就是说注册驱动其实很简单,只需要加载驱动类即可 
Class.forName(“com.mysql.jdbc.Driver”); 

2. 创建数据库的连接 
Connection conn = DriverManager.getConnection(url, user, password); 
其中: 
url, 相当于数据库的访问地址,程序员通过url指定需要访问的数据库 
jdbc:mysql:[]//localhost:3306/test?参数名:参数值 
其中jdbc为主协议,mysql为子协议,localhost为主机名,3306为端口号,test为数据库名 
url的后面可以跟参数,常用的参数有:user=root&password=root&characterEncoding=UTF-8 

如果url地址后面跟了user和password,创建Connection对象时将不必再次传入值 
Connection conn = DriverManager.getConnection(url); 

补充: 如果访问的localhost:3306,url 可省写为jdbc:mysql:///test 

3. Connection 对象 
Connection对象用于表示与某个数据库之间的连接,在程序中对数据库的所有操作都需要通过此对象来完成 
常用方法有: 
createStatement():创建向数据库发送sql的statement对象。 
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。 
prepareCall(sql):创建执行存储过程的callableStatement对象。 
setAutoCommit(boolean autoCommit):设置事务是否自动提交。 
commit() :在链接上提交事务。 
rollback() :在此链接上回滚事务。 

4. Statement 对象 
用于向数据库发送sql语句 
execute(String sql):用于向数据库发送任意sql语句 
executeQuery(String sql) :只能向数据发送查询语句。 
executeUpdate(String sql):只能向数据库发送insert、update或delete语句 
addBatch(String sql) :把多条sql语句放到一个批处理中。 
executeBatch():向数据库发送一批sql语句执行。 

5. ResultSet 对象 
对于查询操作,该对象特别重要,因为它专门用于封装结果集 
存储的形式就是一种表格的形式,同样是列+行,说白了就和我们在 dos 命令行窗口查询的结果一样 

遍历方式: 
一开始游标指向结果集第一行, 也就是表头 
通过 next 将游标移向下一行, 如果没有下一行,该方法会返回false 
获得当前行的数据需要调用get方法: 
get(int index)获得第几列  列数从1开始 
get(String columnName) 根据列名获得值  常用 

数据库的数据类型与java中数据类型的对应关系 


ResultSet对象的常用方法 
next():移动到下一行 
previous():移动到前一行 
absolute(int row):移动到指定行 
beforeFirst():移动resultSet的最前面。 
afterLast() :移动到resultSet的最后面。 

6. 释放数据库资源 
由于数据库的资源非常宝贵,所以用完了一定要记得释放资源 
特别是Connection对象,因为数据允许的并发访问连接数量往往都比较有限 

在java程序中,我们应该将最终必须要执行的代码放到finally当中 

释放资源的代码 
if(rs!=null) { 
try { 
rs.close(); 
} catch (SQLException e) { 
e.printStackTrace(); 

rs = null; 


if(stmt!=null) { 
try { 
stmt.close(); 
} catch (SQLException e) { 
e.printStackTrace(); 

stmt = null; 


if(conn!=null) { 
try { 
conn.close(); 
} catch (SQLException e) { 
e.printStackTrace(); 

conn = null; 

你可能感兴趣的:(mysql)