java数据库(mysql)连接总结

JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API

应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作

访问JDBC
java数据库(mysql)连接总结_第1张图片

需要先导入此包
在这里插入图片描述

建表语句

create database jdbc;

create table users( id int PRIMARY key auto_increment, name
varchar(40), password varchar(40), email varchar(60), birthday DATE );

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

java数据库(mysql)连接总结_第2张图片

Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。需要注意的是,在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath中(这里指MySQL驱动JAR包)

DriverManager类用于加载JDBC驱动并且创建与数据库的连接。
DriverManager类中,定义了两个比较重要的静态方法,如下所示。
java数据库(mysql)连接总结_第3张图片

Connection接口代表Java程序和数据库的连接,只有获得该连接对象后,才能访问数据库,并操作数据表。在Connection接口中,定义了一系列方法,其常用方法如下所示。
java数据库(mysql)连接总结_第4张图片

Statement接口用于执行静态的SQL语句,并返回一个结果对象。Statement接口对象可以通过Connection实例的createStatement()方法获得,该对象会把静态的SQL语句发送到数据库中编译执行,然后返回数据库的处理结果。在Statement接口中,提供了3个常用的执行SQL语句的方法,具体如下所示。
java数据库(mysql)连接总结_第5张图片
PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。该接口扩展了带有参数SQL语句的执行操作,应用该接口中的SQL语句可以使用占位符 “?”来代替其参数,然后通过setXxx()方法为SQL语句的参数赋值。在PreparedStatement接口中,提供了一些常用方法,具体如下所示。
java数据库(mysql)连接总结_第6张图片
需要注意的是,表中的setDate()方法可以设置日期内容,但参数Dat e的类型是java.sql.Date,型是java.sql.Date,而不是java.util.Date

在通过setXxx()方法为SQL语句中的参数赋值时,可以通过输入参数的已定义SQL类型兼容的方法(例如,如果参数具有SQL类型为Integer,那么应该使用setInt()方法,也可以通过setObject()方法设置多种类型的输入参数。具体如下所示:
java数据库(mysql)连接总结_第7张图片

ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。
在ResultSet接口内部有一个指向表格数据行的游标(或指针),ResultSet对象初始化时,游标在表格的第一行之前
调用next()方法可将游标移动到下一行。如果下一行没有数据,则返回false。在应用程序中经常使用next()方法作为while循环的条件来迭代ResultSet结果集。ResultSet接口中的常用方法如下所示。
java数据库(mysql)连接总结_第8张图片
ResultSet接口中定义了大量的getXxx()方法,而采用哪种getXxx()方法取决于字段的数据类型。程序既可以通过字段的
名称来获取指定数据,也可以通过字段的索引来获取指定的数据,字段的索引是从1开始编号的。例如,数据表的第一列字
段名为id,字段类型为int,那么即可以使用getInt(1)获取该列的值,也可以使用getInt(“id”)获取该列的值。

通常,JDBC的使用可以按照以下几个步骤进行:
(1)加载并注册数据库驱动。
(2)通过DriverManager获取数据库连接。
(3)通过Connection对象获取Statement对象。
(4)使用Statement执行SQL语句。
(5)操作ResultSet结果集。
(6)关闭连接,释放资源。

package Test;

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

public class test1 {
    public static void main(String[] args) throws Exception {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "123456");
            statement = connection.createStatement();
            resultSet = statement.executeQuery("select * from users");
            while (resultSet.next()) {
                System.out.println(resultSet.getInt("id") + ":" + resultSet.getString("name") + ":" + resultSet.getString("password") +
                        ":" + resultSet.getString("email") + ":" + resultSet.getDate("birthday"));
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            resultSet.close();
            statement.close();
            connection.close();
        }
    }
}

输出:
在这里插入图片描述

PreparedStatement对象可以对SQL语句进行预编译,预编译的信息会存储在该对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的数据,而不需要对SQL语句再次编译去查询数据库,这样就大大的提高了数据的访问效率。

package Test;

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

public class test2 {
    public static void main(String[] args) throws Exception {
        Connection conn= null;
        PreparedStatement ps=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc",
                    "root","123456");
            String insert="insert into users(name,password,email,birthday) values" +
                    "(?,?,?,?)";
            ps=conn.prepareStatement(insert);
            ps.setString(1,"zl");
            ps.setString(2,"123456");
            ps.setString(3,"[email protected]");
            ps.setString(4,"1987-12-23");
            ps.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(ps!=null){
                ps.close();
            }
            if(conn!=null){
                conn.close();
            }
        }
    }
}

再次运行第一次的代码:
java数据库(mysql)连接总结_第9张图片

ResultSet主要用于存储结果集,可以通过next()方法由前向后逐个获取结果集中的数据,如果想获取结果集中任意位置的数据,则需要在创建Statement对象时,设置两个ResultSet定义的常量,具体设置方式如下:

 Statement st = conn.createStatement(
    ResultSet.TYPE_SCROLL_INSENITIVE, 
    ResultSet.CONCUR_READ_ONLY
);
    ResultSet rs = st.excuteQuery(sql);

在上述方式中,常量“Result.TYPE_SCROLL_INSENITIVE”表示结果集可滚动,常量“ResultSet.CONCUR_READ_ONLY”
表示以只读形式打开结果集。

package Test;

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

public class test3 {
    public static void main(String[] args) throws Exception {
        Connection conn=null;
        Statement statement=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc",
                    "root","123456");
            String sql="select * from users";
            statement=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            ResultSet rs=statement.executeQuery(sql);
            System.out.print("第二条数据为:");
            rs.absolute(2);
            System.out.println(rs.getString("name"));


            System.out.print("第一条数据为:");
            rs.beforeFirst();
            rs.next();
            System.out.println(rs.getString("name"));


            System.out.print("第四条数据为:");
            rs.afterLast();
            rs.previous();
            System.out.println(rs.getString("name"));
            System.out.println();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(statement!=null){
                statement.close();
            }
            if(conn!=null){
                conn.close();
            }
        }
    }
}

输出:

java数据库(mysql)连接总结_第10张图片

你可能感兴趣的:(java,数据库,mysql,java)