MySQL数据库JDBC编程

目录

前言:

项目中导入驱动包

插入记录

创建数据源

连接数据库

构造sql语句

执行sql语句

释放资源

整体代码展示

查看数据

代码展示

小结:


前言:

    MySQL为Java提供了驱动包。通过Java程序实现的客户端,可以通过这个驱动包,把客户端和MySQL服务器进行网络通信。

项目中导入驱动包

    将驱动包下载好之后,直接复制到项目中的包中(我这里是lib包下)。然后点击下面的Add as Library导入到库中,之后就可以发现可以解析这个驱动包了,也就成功了。

MySQL数据库JDBC编程_第1张图片MySQL数据库JDBC编程_第2张图片

插入记录

创建数据源

    首先需要创建数据源,它是描述数据库服务器在哪里,然后才可以经过客户端进行连接服务器。

DataSource dataSource = new MysqlDataSource();

    这里是构造了一个datasource对象。采取向上转型的方式。这样的好处是,如果使用不同的数据库,它所提供的驱动包也会不一致,那么我们只需要改动这一处代码就可以。

    JDBC支持两种方式的风格。DriverManager和DataSource。DriverManager会利用反射的机制,并且它不支持重复连接,它会直接关闭物理连接。DataSource内置了数据库连接池,其中可以创建一定数量的数据库连接,并且支持重复连接,它只是回收了对象。这里介绍DataSource方式的风格。

jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false

  • jdbc:mysql这个是jdbc下的MySQL。
  • 127.0.0.1特殊的ip地址,用来指向本电脑的ip,称为环回ip。只要服务器和客户端在同一个主机上就可以使用这个ip。
  • 3306MySQL程序的端口号,默认是3306。
  • test9数据库名。
  • characterEncoding=utf8描述了请求的编码字符集,这里是utf8。
  • useSSL=false关闭加密方式。

设置URL,用户名及密码

DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("用户名");
((MysqlDataSource)dataSource).setPassword("密码");

    注意:这里需要向下转型。创建数据源需要确定数据库的具体位置,及一些信息。

连接数据库

Connection connection = dataSource.getConnection();

    注意:连接数据库是把这个客户端和服务器进行连接。这里要使用java.sql下的Connection。这里会抛异常,需要对异常进行处理。

构造sql语句

String sql = "insert into student values(1, 'aaa')";
String sql = "insert into student values(?,?)";//设置通配符
PreparedStatement statement = connection.prepareStatement(sql);//预处理
//替换通配符
statement.setInt(1, id);
statement.setString(2, name);

注意:

   有两种方式构造sql语句。第一种是直接写出来。第二种是设置通配符,通过接下来对sql进行预处理,返回的对象来设置通配符里面的值。第一个?位置是1,第二个?位置是2以此类推。

    这里使用PreparedStatement,优点是可以执行带或者不带参数的sql,sql语句会预编译在数据库系统,执行速度快于Statment对象。

执行sql语句

//执行sql语句,返回所影响的行数
int ret = statement.executeUpdate();

    注意:执行插入,修改,删除时使用executeUpdate,查看记录使用executeQuery。插入时会返回所影响的行数。

释放资源

//释放资源,断开连接
statement.close();
connection.close();

    注意:当进行资源的利用,就需要去释放相应的资源。不然就很有可能造成内存泄漏。释放资源时,需要释放其他资源最终断开连接。即释放资源和连接资源顺序是相反的。

整体代码展示

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCInsertDemo {
    public static void main(String[] args) throws SQLException {
        //先创建DateSource数据源,描述数据库服务器在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("用户名");
        ((MysqlDataSource)dataSource).setPassword("密码");

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号:");
        int id = scanner.nextInt();
        System.out.println("请输入姓名:");
        String name = scanner.next();

        //建立连接
        Connection connection = dataSource.getConnection();
        //构造sql语句

        //String sql = "insert into student values(" + id + " , '" + name + "')";
        String sql = "insert into student values(?,?)";//设置通配符
        //对sql语句进行预处理,jdbc 中还需要搭配一个特定的对象, 来描述这里的 sql 的情况
        PreparedStatement statement = connection.prepareStatement(sql);

        //替换通配符
        statement.setInt(1, id);
        statement.setString(2, name);

        //执行sql语句,返回所影响的行数
        int ret = statement.executeUpdate();
        System.out.println(ret);

        //释放资源,断开连接
        statement.close();
        connection.close();
    }
}

查看数据

    这里和插入记录的差别是在执行sql时使用的方法不同,返回的结果不同。插入记录使用的是executeUpdate返回的结果是所影响的行数,查看记录使用的是executeQuery返回查看结果集合。然后只需要遍历这个集合就可以看见所查询的记录。

    注意:集合遍历时,是以行为单位进行遍历的。其中的参数填对应列的列名,方法就使用相对应的类型。

代码展示

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCSelectDemo {
    public static void main(String[] args) throws SQLException {
        //创建数据源,描述数据库服务器位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("用户名");
        ((MysqlDataSource)dataSource).setPassword("密码");

        //建立连接
        Connection connection = dataSource.getConnection();

        //构造sql,预处理
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //执行sql,返回结果集合
        ResultSet resultSet = statement.executeQuery();
        //遍历集合,打印数据
        while(resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println(id + " " + name);
        }

        //释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

小结:

    JDBC编程为我们操作数据库带来了很大的遍历,需要我们掌握和使用它。

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