(JDBC一)JDBC概述及示例

JDBC(Java Database Connectivity):java连接数据库的工具

    1.1 什么是JDBC?
    JDBC是java提供的一组API,用来提供连接数据库中需要用到的类和接口,也是一组规范,为不同数据库封装相同接口的一组规范,让程序更方便的连接数据库,JDBC负责提供接口,数据库厂商使用自己数据库的特点来实现接口。

    1.2 目的
    为了给程序员提供同一种方式连接不同的数据库

    1.3 JDBC的连接步骤
    1)加载驱动类
    2)获取连接
    3)执行sql
    4)获取结果集
    5)关闭连接

    1.4 连接过程中需要用到的类和接口
    1)Driver类 -- 驱动类
    2)DriverManager类 -- 内部封装了获取连接的方法
    3)Connection接口 -- 连接对象
    4)Statement接口 -- 编译sql的接口
    5)ResultSet接口 -- 结果集接口

    1.5 需要导入第三方接口的jar包
    mysql:mysql-connector-java-5.1.6-bin.jar
    oracle:oracle14.jar,oracle6.jar

    1.6 开发步骤
    1)导入驱动包
        在工程上右键创建文件夹lib--将驱动包导入到lib下,右键驱动包选择buildpath--Add to BuildPath
    2)加载驱动类
        Class.forName("com.mysql.jdbc.Driver");
    3)获取连接
        Connection conn = DriverManager.getConnection(url,user,password);
        url:jdbc:mysql://localhost:3306/dbname
        user:mysql服务器安装时的用户名
        password:mysql服务器时的密码
    4)执行sql
        Statement st=conn.createStatement();
        String sql="";
        st.executeQuery(sql);执行DQL
        st.executeUpdate(sql);执行DML,返回值为该条sql对整张表影响的记录数
        st.execute(sql);执行DDL,返回值:sql为DQL,返回true,sql为DML或DDL,返回false
    5)获取结果集
        ResultSet -- java.sql.ResultSet
        ResultSet rs = st.execute(sql);
        int rows = st.executeUpdate(sql);
        boolean b = st.execute(sql);
        boolean next():用来判断结果集中是否有下一条记录,如果有,则返回true,将游标进行下移,果没有,则返回false
        PS:默认ResultSet的游标位于结果集中的表头行上
        int getInt(String str):返回结果集中某一条记录上的str字段的值
        XXX getXXX(int index):返回结果集中某一条记录上的index位置的值
    6)关闭连接

    1.7 mysql数据库中文的问题
        1)保证我们的数据库是支持中文的
        create database jsd1707 default character set utf8
        2)在获取连接时url的位置加入代码:?useUnicode=true&characterEncoding=utf8
        url:jdbc:mysql://localhost:3306/jsd1707?useUnicode=true&characterEncoding=utf8

示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import org.junit.Test;
public class JDBCDemo {

    @Test
    public void testCreateDept() {
        Connection conn=null;
        PreparedStatement ps=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql_zyd?useUnicode=true&characterEncoding=UTF-8","****","****");
            String sql="CREATE TABLE Dept(deptno INT PRIMARY KEY AUTO_INCREMENT,dname VARCHAR(20))";
            ps=conn.prepareStatement(sql);
            ps.execute();
        }catch(Exception e) {
            e.printStackTrace();
        }finally{
            if(ps!=null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void testDropDept() {
        Connection conn=null;
        PreparedStatement ps=null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql_zyd?useUnicode=true&characterEncoding=UTF-8","****","****");
            String sql="DROP TABLE Dept";
            ps=conn.prepareStatement(sql);
            ps.execute();
        }catch(Exception e) {
            e.printStackTrace();
        }finally{
            if(ps!=null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

运行结果:

注:@Test是用来做单元测试的,即可以通过方法名运行代码,该方法需要导org.junit.Test包

猜你喜欢

转载自blog.csdn.net/z774884795/article/details/84190542