JDBC 连接mysql数据库

一、jdbc基本概念

jdbc : Java Database Connectivity

sun公司为了统一对数据库的操作,定义了一套api,称之为jdbc

这套api完全由接口组成,我们在编写程序的时候针对接口进行调用

这些接口交给数据库厂家去实现, 不同的数据库厂商会提供不同的实现类,这些实现类被我们称作数据库的驱动

二、实现jdbc程序

步骤:

1. 实验环境

建 user 表 user.sql

createdatabase day12 character set utf8 collate utf8_general_ci;

 

use day12;

 

createtable users(

       id int primary key auto_increment,

       name varchar(40),

       password varchar(40),

       email varchar(60),

       birthday date

)characterset utf8 collate utf8_general_ci;

 

insert intousers(name,password,email,birthday)

values('zs','123456','zs@sina.com','1980-12-04');

insertinto users(name,password,email,birthday)

values('lisi','123456','lisi@sina.com','1981-12-04');

insertinto users(name,password,email,birthday)

values('wangwu','123456','wangwu@sina.com','1979-12-04');

 

2. 导入数据库的驱动

mysql-connector-java-5.0.8-bin.jar

 

3. 编程java程序

// 1. 注册数据库的驱动

DriverManager.registerDriver(newcom.mysql.jdbc.Driver());

// 2. 建立与mysql数据库的连接  用到 jdbc api

Stringurl = "jdbc:mysql://localhost:3306/day11";

Stringuser = "root";

Stringpassword = "root";

Connectionconn = DriverManager.getConnection(url, user, password);

// 3. 创建用于发送sql语句的 Statement 对象

Statementstmt = conn.createStatement();

// 4. 编写一句 sql

Stringsql = "select * from users";

// 5. 发送sql, 获得结果集

ResultSetrs = 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(newcom.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 对象:  用于表示与某个数据库之间的连接,在程序中对数据库的所有操作都需要通过此对象来完成

常用方法有:

       createStatement():创建向数据库发送sql的statement对象。

       prepareStatement(sql):创建向数据库发送预编译sql的PrepareSatement对象。

       prepareCall(sql):创建执行存储过程的callableStatement对象。

       setAutoCommit(boolean autoCommit):设置事务是否自动提交。

       commit():在链接上提交事务。

       rollback():在此链接上回滚事务。

 

4. Statement 对象:  用于向数据库发送sql语句.

       execute(Stringsql):用于向数据库发送任意sql语句

       executeQuery(String sql):只能向数据发送查询语句。

       executeUpdate(String sql):只能向数据库发送insert、update或delete语句

       addBatch(String sql):把多条sql语句放到一个批处理中。

       executeBatch():向数据库发送一批sql语句执行。

 

5. ResultSet 对象:  专门用于封装结果集(对于查询操作特别重要)

存储的形式就是一种表格的形式,同样是列+行,说白了就和我们在 dos命令行窗口查询的结果一样

遍历方式:

       一开始游标指向结果集第一行, 也就是表头

       通过 next 将游标移向下一行, 如果没有下一行,该方法会返回false

       获得当前行的数据需要调用get方法:

              get(intindex)获得第几列  列数从1开始

              get(StringcolumnName) 根据列名获得值  (常用)

 

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

 

ResultSet对象的常用方法

       next():移动到下一行

       previous():移动到前一行

       absolute(introw):移动到指定行

       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;

}

 

 

四、jdbc实现crud (create read updatedelete)

 1. 编写程序对User表进行增删改查操作

 

 2.防止 sql 注入

       在 service 层进行逻辑判断

       使用PreparedStatement对象

 

3. 编写工具类对 jdbc 程序进行优化

       将获得连接和释放资源的代码写到通用的工具类中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值