mysql的jdbc入门学习小结

转自:专注JavaWeb开发 http://www.javaweb1024.com/data/MySQL/2015/04/25/618.html

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

一流公司定标准
二流公司做服务
三流公司做产品

数据库驱动交给数据库厂商制作的优点:
    1.Java开发人员只需要维护Java应用和一套统一的规范
    2.数据库厂商提供具体的Java驱动程序,数据库厂商如果改变了
    数据库底层的实现,数据库厂商要随之更新驱动程序,不会影响到
    已经完成的Java应用程序。

简单来说使用Java代码发送SQL语句的技术,就是jdbc

二、实现jdbc程序的条件
 1.需要知道连接数据库服务器所在地
         需要数据库的IP地址和端口号
         ip定位到主机
         端口号:定位到程序
 2.需要知道数据库的用户名和密码
 
三、如何实现jdbc连接MySQL数据库?
    1.导入数据库的驱动程序
        mysql-connector-java-5.0.8-bin.jar
    2.注册数据库的驱动
        DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
    3.建立与mysql数据库的连接
        String url = "jdbc:mysql://localhost:3306/test";//jdbc是主协议,mysql是子协议
        String user = "root";
        String password = "root";
        Connection conn = DriverManager.getConnection(url, user, password);
    4.创建用于发送sql语句的 Statement 对象
        Statement stmt = conn.createStatement();
    5. 编写SQL语句
        String sql = "select * from users";
    6.发送sql, 获得结果集
        ResultSet rs = stmt.executeQuery(sql);
    7.处理结果集
        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);
        }
    8.关闭数据库连接,最后打开的资源最先释放,释放之前需要判断资源是否已经断开
        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指定需要访问的数据库

//连接数据库的url
    //jdbc主协议,mysql是子协议
    //jdbc协议:数据库子协议://主机:端口号:/数据库名

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. 释放数据库资源
    因为数据允许的并发访问连接数量往往都比较有限,使用完成后,需要释放资源

在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;
    }
    
7. 防止 sql 注入
    在 service 层进行逻辑判断
    使用PreparedStatement对象

package cn.test.jdbc.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;

import com.mysql.jdbc.Driver;

public class JDBCDemo {
    //连接数据库的url的写法
    //jdbc主协议,mysql是子协议
    //jdbc协议:数据库子协议://主机:端口号:/数据库名
    private String url="jdbc:mysql://localhost:3306/day15";
    //用户名
    String username = "root";
    //密码
    String password = "Name-66437";
    @Test
    public void main(String [] args) throws SQLException{
        //1.创建一个驱动程序的类对象
        Driver driver = new com.mysql.jdbc.Driver();
        //设置用户名和密码
        Properties props = new Properties();
        props.setProperty("username", username);
        props.setProperty("password", password);
        
        //2.连接数据库
        Connection conn = driver.connect(url, props);
        Statement stmt = conn.createStatement();
        String sql = "select * from student";
        ResultSet rs = stmt.executeQuery(sql);
        //7.处理结果集
        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);
        }
        //释放资源的代码
        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;
        }
    }
}

时间: 2024-11-06 15:35:35

mysql的jdbc入门学习小结的相关文章

Java进阶学习第十七天——JDBC入门学习

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.11 lutianfei none JDBC JDBC介绍 JDBC是什么? JDBC(Java Data Base Connectivity,java数据库连接) SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. 简单说,就是可以直接通过java语言去操作数据库. jdbc是一套标准,它是由一些接口与类组成的. 组成JDBC的类和接口 java.sql 类:Drive

mysql jdbc入门学习

一.jdbc基本概念 jdbc : Java Database Connectivity sun公司为了统一对数据库的操作,定义了一套api,称之为jdbc 这套api完全由接口组成,我们在编写程序的时候针对接口进行调用 这些接口交给数据库厂家去实现, 不同的数据库厂商会提供不同的实现类, 这些实现类被我们称作数据库的驱动. 一流公司定标准 二流公司做服务 三流公司做产品 数据库驱动交给数据库厂商制作的优点: 1.Java开发人员只需要维护Java应用和一套统一的规范 2.数据库厂商提供具体的J

JDBC入门学习

Introduction What's JDBC JDBC stands for Java Database Connectivity, which is a standard Java API for database-independent connectivity between the Java programming language and a wide range of databases. JDBC library (includes APIs)的主要用途包括 Making a

【转】MYSQL入门学习之三:全文本搜索

转载地址:http://www.2cto.com/database/201212/173873.html 一.理解全文本搜索 www.2cto.com 1.MyISAM支持全文本搜索,而InnoDB不支持. 2.在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词.MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行.这样MySQL可以快速有效地决定哪些词匹配,哪些词不匹配,它们匹配的频率,等等. 二.使用全文本搜索 1.为了进行全文本搜索,必须索引被搜索的列,

【转】MYSQL入门学习之十一:触发器的基本操作

转载地址:http://www.2cto.com/database/201212/176781.html 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):  www.2cto.com DELETE: INSERT: UPDATE: 使用触发器,需要MySQL5或之后的版本支持. 一.触发器基本操作 1.创建触发器 创建触发器时,需要给出4条信息: 唯一的触发器名:(虽然MySQL5允许不同的表上的触发器名称相同,但一般最好不要这么做

web day17 JDBC入门,DAO模式mySQL时间类型转换,批处理

JDBC入门 1.JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库. 2.JDBC原理 最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现.SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动! 3.JDBC核心类(接口)介绍 JDBC中

springmvc学习笔记(5)-入门程序小结

springmvc学习笔记(5)-入门程序小结 springmvc学习笔记5-入门程序小结 入门程序配置小结 非注解的完整的配置文件 注解的完整配置文件 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法.并附上入门程序的非注解的完整的配置文件,注解的完整配置文件. 入门程序配置小结 前端控制器配置: 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServl

【转】MYSQL入门学习之十三:自定义函数的基本操作

转载地址:http://www.2cto.com/database/201212/177382.html 一.自定义函数(UDF)的特性和功能  www.2cto.com 函数能分返回字符串,整数或实数; 可以定义一次作用于一行的简单函数,或作用于多行的组的集合函数; 二.基本操作 1.创建自定义函数 CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL} BEGIN //函数实现的语句 END; aggre

【数据库】9.0 MySQL入门学习(九)——获得数据库和表的信息、日期计算、查询

1.0 SELECT语句用来从数据表中检索信息. SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; what_to_select指出你想要看到的内容,可以是列的一个表,或*表示"所有的列". which_table指出你想要从其检索数据的表. WHERE子句是可选项,如果选择该项,conditions_to_satisfy指定行必须满足的检索条件. 2.0 在我的博文"MySQL入门学习(八