前言:绝对的手把手

目录

1:获取api

2:将Jar包引入到项目中

3:编写代码在Java中连接数据库

4:整体代码


1:获取api

故事背景(可不看)

数据库编程是需要数据库服务器提供一些api来供我们调用的,但是数据库厂商有很多 Oracle, Mysql ,SqlServer。因为他们都不是一伙人,提供的api都不同,这可就苦了我们程序员了,这时候,Java就设计出一套api规范,那些数据库提供的api都需要和我们对接上,这样我们就只需要了解一套api就可以操纵数据库了。

中央仓库链接

Maven Repository: Search/Browse/Explore (mvnrepository.com)

在中央仓库中获取Jar包(当然有很多途径获取,只是我觉得中央仓库最方便,中央仓库的链接已奉上)

1:搜索框搜索Mysql

Java 编写hikari连接代码_java

2:选中这个

Java 编写hikari连接代码_sql_02

3:在这个页面里选中你需要的jar包(点击版本号进去)

注意:你的数据库是几版本,就选对应版本的jar包

Java 编写hikari连接代码_Java 编写hikari连接代码_03

查看自己数据库版本,我这里是5版本

Java 编写hikari连接代码_sql_04

点击下载(点击红框内就开始下载了)

Java 编写hikari连接代码_数据库_05

2:将Jar包引入到项目中

把Jar复制到当前的项目目录中

新建一个目录

Java 编写hikari连接代码_Source_06

找到你下载的Jar包复制

Java 编写hikari连接代码_java_07

找到你创建的目录(我这刚创建的名字叫lib)拷贝到目录下面

Java 编写hikari连接代码_数据库_08

拷贝完成后就会出现这个东西

Java 编写hikari连接代码_sql_09

把这个目录标记成库

Java 编写hikari连接代码_java_10

准备工作完成接下来就是编写代码了

3:编写代码在Java中连接数据库

(1)创建数据源

Java 编写hikari连接代码_Java 编写hikari连接代码_11

(如果你输入DataSource没有这个,说明你前面的步骤做的不对,请再审查一下)

//1:创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        //访问数据源
        ((MysqlDataSource)dataSource).setUser("root");//用户名
        ((MysqlDataSource)dataSource).setPassword("123456");//你的数据库密码

详细解释每一句(很急可以不看,但很干货)


((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");


setUrl: URL是计算机中非常重要的概念,表示网络上的资源位置,通俗点说就是网址,这里的setUrl就是为了找到你的数据库在哪

127.0.0.1:这是一个ip地址,不过很特殊叫做环回ip,顾名思义这个ip可以自己把数据发给自己,每个电脑上都有这个环回ip,只要把消息发给这个ip,就等于发给自己,因为我们这里的jdbc程序和mysql服务器在同一主机上,所以这里用环回ip即可。(当然如果你想跨主机访问mysql可不是换个ip就行)

 3306:端口号,程序运行的时候,电脑要知道你是哪个程序,所以就用端口号来识别,一般我们安装mysql的时候,端口号都是3306

java109:这是我要访问的数据库名,只要改成你要访问的数据库名即可

?:在Url中有些符号是有特殊含义的 :/ ?# &.......其中这里的?表示其后面访问资源的时候需要哪些参数

characterEncoding=utf8&useSSL=false:将字符集设置为utf8,是否加密设置为false,毕竟咱数据库也没啥值钱的东西,而且设置为true了还有可能会连不上

(2)和服务器建立连接

Connection connection = dataSource.getConnection();

(3)构造sql

String sql = "insert into student values (1,'张三' )";

PreparedStatement statement = connection.prepareStatement(sql);//还需要转换PrepareStatement类型
(3) 把 sql 发给服务器. 返回值是一个整数, 表示影响到的行数

说明:如果使用的是select语句把executeUpdate(),换成executeQuery(),再参考以下代码打印

while(resultSet.next()){
    int id = resultSet.getInt("id");
    String name = resultSet.getString("name");
    System.out.println("id = " + id + ", name = " + name);
}

int n = statement.executeUpdate();
System.out.println("n = " + n);

(5)释放资源,关闭链接,释放顺序:后获取的资源先释放

(如果使用了resultset,加入resultSet.close();)

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 Demo1 {
    public static void main(String[] args) throws SQLException {
        
        // 1. 先创建 DataSource
        DataSource dataSource = new MysqlDataSource();
        //这样转类型的写法是为了不让MysqlDataSource这个类名不要扩散到代码的其他地方,如果要修改数据库,代码改动就比较小
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        //?后表示访问资源的时候,需要哪些参数
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        // 2. 建立和数据库服务器之间的连接. 连接好了之后, 才能进行后续的 请求-响应 交互.
         Connection connection = dataSource.getConnection();
        // 3. 构造 sql (代码中的 sql 不需要写 ; )
       
        String sql = "insert into student values (1,'张三')";

        PreparedStatement statement = connection.prepareStatement(sql);//还需要转换成PrepareStatement类型
        
       
        //也可以直接发字符串sql,但有语法错误会拖慢服务器,而PrepareStatement表示预处理的语句,可帮助服务器做检查
        // 4. 把 sql 发给服务器. 返回值是一个整数, 表示影响到的行数.
        int n = statement.executeUpdate();
        System.out.println("n = " + n);
        // 5. 释放资源, 关闭连接. 释放顺序, 是后获取到的资源, 先释放.
        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 Demo1 {
    public static void main(String[] args) throws SQLException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入id");
        int id = sc.nextInt();
        System.out.println("请输入名字");
        String name =sc.next();
        // 1. 先创建 DataSource
        DataSource dataSource = new MysqlDataSource();
        //这样转类型的写法是为了不让MysqlDataSource这个类名不要扩散到代码的其他地方,如果要修改数据库,代码改动就比较小
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        //?后表示访问资源的时候,需要哪些参数
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        // 2. 建立和数据库服务器之间的连接. 连接好了之后, 才能进行后续的 请求-响应 交互.
         Connection connection = dataSource.getConnection();
        // 3. 构造 sql (代码中的 sql 不需要写 ; )
       // String sql = "insert into student values ("+ id +",'" + name + "' )";//只是字符串结构的sql
        String sql = "insert into student values (?,? )";//?是占位符

        PreparedStatement statement = connection.prepareStatement(sql);//还需要转换成PrepareStatement类型
        statement.setInt(1,id);//这占位符是从1开始算的
        statement.setString(2,name);//preparedstatement提供的拼接sql方式
        System.out.println("sql = " + statement);
        //也可以直接发字符串sql,但有语法错误会拖慢服务器,而PrepareStatement表示预处理的语句,可帮助服务器做检查
        // 4. 把 sql 发给服务器. 返回值是一个整数, 表示影响到的行数.
        int n = statement.executeUpdate();
        System.out.println("n = " + n);
        // 5. 释放资源, 关闭连接. 释放顺序, 是后获取到的资源, 先释放.
        statement.close();
        connection.close();
    }
}