前言:绝对的手把手
目录
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
2:选中这个
3:在这个页面里选中你需要的jar包(点击版本号进去)
注意:你的数据库是几版本,就选对应版本的jar包
查看自己数据库版本,我这里是5版本
点击下载(点击红框内就开始下载了)
2:将Jar包引入到项目中
把Jar复制到当前的项目目录中
新建一个目录
找到你下载的Jar包复制
找到你创建的目录(我这刚创建的名字叫lib)拷贝到目录下面
拷贝完成后就会出现这个东西
把这个目录标记成库
准备工作完成接下来就是编写代码了
3:编写代码在Java中连接数据库
(1)创建数据源
(如果你输入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();
}
}