JDBC--使用步骤、练习

@author StormWangxhu
@date 2017/12/10

通常,JDBC的使用可以按照以下几个步骤进行:

(1)加载并注册数据库驱动

DriverManager.registerDriver(Driver driver);
或
Class.forName("DriverName");

(2)通过DriverManager获取数据库连接

Connection conn = DriverManager.getConnection(String url,String username,String password);

说明:getConnection()方法中有三个参数,分别表示连接数据库的地址、登录数据库的用户和密码。以MySql为例。
其地址书写方式如下:

jdbc:mysql://hostname:port/databasename

说明:jdbc:mysql:是固定的写法,mysql指的是MySql数聚库hostname指的是主机的名称(若主机在本机中,hostname为localhost或127.0.0.1;若要连接的主机在其他计算机上,则hostname为所要连接计算机的IP)。port指的是端口,Mysql默认端口为3306。databasename为MySql中数据库名称。

(3)通过Connection对象获取Statement对象

Connection对象创建Statement的方式有如下几种:

(1)createStatement(): 创建基本的Statement对象。
(2)prepareStatement():创建PreparedStatement对象。
(3)preparedCall():创建CallableStatement对象。
以创建基本Statement对象为例:

Statement stmt = conn.createStatement();

(4)使用Statement执行SQL语句

所有的Statement都有如下3种执行SQL语句的方法。
(1)exeecute(): 可执行任何SQL语句。
(2)executeQuery(): 通常执行查询语句,执行后返回代表结果集得ResultSet对象
(3)executeUpdate():主要执行DML语句和DDL语句。执行DML语句,如insert,update,delete时,返回受SQL语句的行数,执行DDL语句返回0。

//执行SQL语句,获取结果集ResultSet
ResultSet rs =stmt.executeQuery(sql) ;

(5)操作ResultSet结果集

若执行SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来获取查询结果。

(6)关闭连接,释放资源

每次操作操作数据库结束后,都要关闭数据库连接,释放资源,包括关闭ResultSet,Statement,和Connection等资源。


练习:

前期准备:

(1)搭建数据库环境
(2)创建项目环境
鼠标右击—-new—-folder,命名为lib,将下载好的MySql数据库驱动文件复制到项目的lib中,并使用鼠标右键单击该jar包,build path ——add to bulid path
(3)编写JDBC程序


类一:读取数据库中的users表,并将结果输出到控制台
package cn.itcast.jdbc.example;

import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class JDBCExample {

 public static void main(String[] args) {
     Statement statement = null  ;
     ResultSet resultSet = null ;
     Connection connection = null ;
     try {
         //1:注册数据库的驱动
        Class.forName("com.mysql.jdbc.Driver");

         //2.通过DriverManager获取数据库连接
        String url = "jdbc:mysql://localhost:3306/jdbc";  //连接数据库的地址
        String username = "root";
        String password = "xiaohu";
        connection =  (Connection) DriverManager.getConnection(url, username, password);

        //3.通过Connection对象获取Statement对象
        statement = (Statement) connection.createStatement();  //用于创建一个Statement对象,将SQL语句发送到数据库。

        //4.使用Statement对象执行SQL语句
        String sql ="select * from users";
        resultSet =statement.executeQuery(sql);  //该方法返回一个表示查询结果的ResultSet对象。

        //5.操作ResultSet结果集
        System.out.println("id  |  name  |  password"+"|  email   |  birthday");
        while (resultSet.next()) {
            int id = resultSet.getInt("id");  //通过列名获取指定字段值
            String name = resultSet.getString("name");
            String password1 = resultSet.getString("password");
            String email = resultSet.getString("email");
            Date birthday = resultSet.getDate("birthday");
            System.out.println(id+"  |  "+name+"  |  "+password1+"  |  "+email+"  |  "+birthday);

        }
     } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
     }finally {

        //6.收回数据库资源
         if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            resultSet = null ;
        }
         if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {

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

                e.printStackTrace();
            }
            connection =null ;
        }
    }
    }

}

注意:

1).虽然使用DriverManager.registerDriver(new com.mysql.jdbc.Driver)方法也可以完成注册,但此方法会使数据库驱动被注册两次。这是因为Driver类的源码中,已经在静态代码块中完成了数据库的驱动注册。所以,为了避免数据库驱动被重复注册,只需要在程序中使用Class.forName()方法加载驱动类即可!
(2)释放资源
应该将释放资源的代码操作放在finally代码块中。

使用PreparedStatement对象对数据库进行插入操作。
package cn.itcast.jdbc.example;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCExample2 {

    public static void main(String[] args) {
        Connection connection = null ;
        PreparedStatement pStatement = null ;
        try {
            //加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/jdbc";
            String username = "root";
            String password = "xiaohu";

            //创建应用程序与数据库连接的Connectin对象
            connection=DriverManager.getConnection(url, username, password);

            //执行SQL语句
            String sql="insert into users(name,password,email,birthday)"+"values(?,?,?,?)"; //使用?通配符来代替参数,然后使用setXxx()方法为SQL语句赋值。

            //1.创建执行SQL语句的PrepareedStatement对象
            pStatement = connection.prepareStatement(sql);

            //2.为SQL语句中参数赋值
            pStatement.setString(1,"stormwang" );
            pStatement.setString(2, "123456");
            pStatement.setString(3, "[email protected]");
            pStatement.setString(4, "1998-05-04");

            //3.执行SQL语句
            pStatement.executeUpdate();
        } catch (ClassNotFoundException e) {

            e.printStackTrace();
        } catch (SQLException e) {

            e.printStackTrace();
        }finally {
            //回收数据库资源
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (pStatement != null) {
                try {
                    pStatement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }

}

使用ResultSet对象取出指定数据的信息。
package cn.itcast.jdbc.example;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCExampe3 {

    public static void main(String[] args) {
        Connection connection= null  ;
        Statement statement = null ;
        try {
            //注册数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/jdbc";
            String username ="root";
            String password="xiaohu";

            //连接数据库
            connection=DriverManager.getConnection(url, username, password);

            //SQL语句
            String sql="select * from users";
            Statement statement2 = connection.createStatement(
                                        ResultSet.TYPE_SCROLL_INSENSITIVE,
                                        ResultSet.CONCUR_READ_ONLY);

            //执行SQL语句并将获取的数据信息存放在ResultSet中
            ResultSet resultSet =statement2.executeQuery(sql);

            //取出ResultSet中指定的数据信息
            System.out.print("第二条数据的name为:");

            resultSet.absolute(2);  //将指针定位到结果集中的第2行数据
            System.out.println(resultSet.getString("name"));

            System.out.print("第一条数据的name值为:");
//          System.out.println(resultSet.getString("name"));
            resultSet.beforeFirst();   //将指针定位到结果集中第一行数据前
            resultSet.next();   //将指针向后滚动
            System.out.println(resultSet.getString("name"));
            System.out.print("第4条数据的name值为:");
            resultSet.afterLast();   //将指针定位到结果集中最后一条数据之后
            resultSet.previous();  //将指针向前滚动
            System.out.println(resultSet.getString("name"));

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //释放资源
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }if (statement != null) {
                    try {
                        statement.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }

    }

}

你可能感兴趣的:(mysql,JDBC)