[MySql]JDBC编程

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问

目录

JDBC的使用:

1.下载驱动包,并添加到项目当中

2.编程语句

2.1创建数据源

2.2与数据库建立连接

2.3构造sql语句

2.4执行sql语句

2.5释放资源

3.完整代码


JDBC的使用:

1.下载驱动包,并添加到项目当中

驱动包下载地址:Maven Repository: mysql >> mysql-connector-java (mvnrepository.com)

下载jar包

按照MySql版本下载成功后,添加到对应要使用的项目当中.

对项目进行右键,创建一个新的文件夹(文件名随意)

下载完成的mysql驱动包右键选择复制,再对刚刚创建完成的文件夹Ctrl + v.

点击OK即可

右键添加驱动包的文件夹,选择Add as Library(让IDEA知道,这个文件夹作为存放库文件)

现在就正式的完成了对驱动包的添加

2.编程语句

2.1创建数据源

DataSource是一个接口,为我们指明了数据库服务的位置

这一步我们要做的,主要是创建一个MysqlDataSource对象,并用DataSource类型来接收

MysqlDataSource是DataSource的一个子类 ,我们使用了向上转型 主要是为了减少其耦合性,方便日后更换其他驱动包.

setURL/setUrl()方法:

URL是唯一资源定位符,用来在网络上描述资源的位置.

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

URL的类型/用途,此处为Mysql进行服务

这个位置要存放的是数据库所在的设备的IP,而127.0.0.1为环回地址,指代自己的主机,即数据库与JAVA代码在用一台设备

端口号,用来区分主机上的进程

访问的数据库的名称,即打开Mysql后use table_name,的那个table_name

统一字符集为utf8

数据库与客户端之间的通信与否

setUser()方法:

用来放置要登录的数据库账户的用户名

setPassword()方法:

放置登录账号的密码

java 复制代码
DataSource dataSource = new MysqlDataSource();//创建一个datasource对象
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");

2.2与数据库建立连接

java 复制代码
Connection connection = dataSource.getConnection();

要选择java.sql的Connection接口,并在类上抛出相应的异常

java 复制代码
public static void main(String[] args) throws SQLException{}

2.3构造sql语句

复制代码
String sql = ""; // 写出一个mysql语句

PreparedStatement statement = connection.prepareStatement(sql);
//对mysql语句进行预处理,验证mysql语句是否符合语法要求,能减轻mysql服务器的负担

也可以使用

复制代码
Statement statement = connection.createStatement();//不进行处理,传输到mysql服务器上

方法一:

java 复制代码
String sql = "insert into employee values('xiaoming','111','male')";
PreparedStatement statement = connection.prepareStatement(sql);

方法二:

java 复制代码
Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();

String sql = "insert into employee values(" + name + ", " + id + ", " + sex + ", " + ")";
PreparedStatement statement = connection.prepareStatement(sql);

方法三:(推荐)

使用占位符来替换,能够有效的避免出现SQL的注入攻击,也会更严格的进行校验语句是否正确

sql 复制代码
Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();

String sql = "insert into employee values(?,?,?)";

        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);//替换第一个占位符
        statement.setString(2,id);//替换第二个占位符
        statement.setString(3,sex);//替换第三个占位符

2.4执行sql语句

java 复制代码
int n = statement.executeUpdate();//对于数据库的增,删,改可以使用此语句
//使用一个整数来接受返回值,含义为对于数据库所影响的数据行数
java 复制代码
ResultSet resultSet = preparedStatement.executeQuery();//对于查询sql语句使用
//并使用ResultSet来接收返回值,含义为select得到的所有数据行

while(resultSet.next()){//每一次while循环以一行数据为单位,直到所有都打印完
    String name = resultSet.getString("name");
    String id = resultSet.getString("id");
    String sex = resultSet.getString("sex");
    System.out.println(name + " " + id + " " + " " + sex);
}

2.5释放资源

使用了什么就释放什么,并按照相反的使用顺序

java 复制代码
resultSet.close();//只有查询语句并使用了ResultSet来接收executeQuery()才需要释放
preparedStatement.close();//释放预处理
connection.close();//释放连接

3.完整代码

java 复制代码
增添,删除和更新数据的语句格式很类似,只有sql语句的区别
public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();
        //创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("021228");
        //和数据库建立连接
        Connection connection = dataSource.getConnection();
        //构造sql语句
        String sql = "insert into employee values(?,?,?)";

        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setString(2,id);
        statement.setString(3,sex);
        System.out.println(statement);
        //执行sql语句
        int n = statement.executeUpdate();
        //释放资源,关闭连接
        statement.close();
        connection.close();
    }
java 复制代码
查询数据
public static void main(String[] args) throws SQLException {
        //创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("021228");
        //建立连接
        Connection connection = dataSource.getConnection();
        //构造sql语句
        String sql = "select * from employee";
        //预处理sql语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        System.out.println(sql);
        //执行sql语句
        ResultSet resultSet = preparedStatement.executeQuery();
        while(resultSet.next()){//每一次while循环以一行数据为单位
            String name = resultSet.getString("name");
            String id = resultSet.getString("id");
            String sex = resultSet.getString("sex");
            System.out.println(name + " " + id + " " + " " + sex);
        }
        //释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
相关推荐
陈燚_重生之又为程序员12 分钟前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle13 分钟前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻15 分钟前
MySQL排序查询
数据库·mysql
萧鼎16 分钟前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^18 分钟前
数据库连接池的创建
java·开发语言·数据库
苹果醋322 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
荒川之神23 分钟前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师29 分钟前
Oracle 23AI创建示例库
数据库·oracle
小白学大数据1 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
time never ceases1 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle