(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作
第一步:在Navicat中创建测试的数据库
在Navicat中输入如下代码,创建数据库:
CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci;
USE jdbcStudy;
CREATE TABLE `users`(
id INT PRIMARY KEY,
NAME VARCHAR(40),
PASSWORD VARCHAR(40),
email VARCHAR(60),
birthday DATE
);
INSERT INTO `users`(id,NAME,PASSWORD,email,birthday)
VALUES(1,'zhansan','123456','aaa@qq.com','1980-12-04'),
(2,'lisi','123456','aaa@qq.com','1981-12-04'),
(3,'wangwu','123456','aaa@qq.com','1979-12-04')
创建出来的结果如下:
第二步:在idea中,创建一个普通项目,名为JDBC
第三步:导入数据库驱动
首先在JDBC项目下,鼠标右键点击,创建一个名为lib的目录
再把相应的jar包复制到lib目录下
在这个网站https://mvnrepository.com/artifact/mysql/mysql-connector-java,找到自己想要的版本的jar包,我下的是5.1.47的
注意!!这时候还没完成
最后,我们需要右键lib目录-add as library
第四步:编写测试代码
- 加载驱动:Class.forName(“com.mysql.jdbc.Driver”);
- 连接数据库:DriverManager.getConnection
- 获取执行sql的对象:Statement
- 获得返回的结果集
- 释放连接
package jdbc.test;
import java.sql.*;
public class jdbcTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动(此为固定源码)
Class.forName("com.mysql.jdbc.Driver");
//2.用户信息和url(使用?来连接参数)
//jdbc:mysql://主机地址:端口号/数据库名?参数1&参数2&参数3
String url = "jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&useSSL=false";
String username = "root";
String password = "111";
//3.连接成功,返回数据库对象
Connection connection = DriverManager.getConnection(url, username, password);//此时的Connection就代表数据库
//4.执行SQL的对象
Statement statement = connection.createStatement();//此时的Statement就执行sql对象
//5.用执行SQL的对象去执行SQL(可能存在结果,需要查看返回结果)
String sql = "SELECT * FROM users";
ResultSet resultSet = statement.executeQuery(sql);//返回的结果集,其中封装了我们全部的查询出来的结果
while(resultSet.next()){
System.out.println("id = "+ resultSet.getObject("id"));
System.out.println("name = "+ resultSet.getObject("NAME"));
System.out.println("pwd = "+ resultSet.getObject("PASSWORD"));
System.out.println("email = "+ resultSet.getObject("email"));
System.out.println("birth = "+ resultSet.getObject("birthday"));
}
//6.释放连接
resultSet.close();
statement.close();
connection.close();
}
}
此时输出结果:
说明是连接成功了
第五步:提取工具类
我们可以看出,如果需要对数据库进行多次的操作,就要多次重复使用上述的代码,并且上述代码是有一个固定套路的,每次只需要改动sql语句和返回的结果,那么,我们有什么办法能够解决此情况呢?——提取工具类
首先,我们把配置类单独提取出来,原因是:这些用户名密码什么的连接jdbc的配置信息,如果把他们都写到代码了,就强耦合了,我们要把他解耦,把其提取出来放到一个文件里,这里我放到db.properties里
在src文件夹下,创建db.properties的文件
在db.properties中写入配置信息:
再创建一个名为utils的包,并在里面创建名为JdbcUtils的类
接下来,在JdbcUtils类中,读取配置文件,(使用反射)
package jdbc.test2.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {
private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;
static {
try{
//第一步:获取流
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
//第二步:拿到流之后,将流加载进来
properties.load(in);
//到目前为止,配置文件中的所有的信息都被读出来了,读到了properties对象中
//第三步:接下来,就只需要获取properties的里面的资源就好了
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password =properties.getProperty("password");
//第五步:加载驱动(只需加载一次)
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
//第六步:获取连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
public static void release(Connection conn, Statement st, ResultSet rs){
if (rs!=null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (st!=null){
try {
st.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
再创建一个test文件,来测试是否能向数据库中插入数据
package jdbc.test2.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestInsert {
public static void main(String[] args) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();//获取数据库连接
st = conn.createStatement();//获得SQL的执行对象
String sql = "INSERT INTO users(id,`NAME`,`PASSWORD`,`email`,`birthday`) " +
"values(4,'xiaoming','abc123','aaa@qq.com','2010-01-01')";
int i = st.executeUpdate(sql);
if (i>0){
System.out.println("插入成功");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);
}
}
}
运行结果:是插入成功的
接下来,再实验一下 删除数据,再创建一个test测试类
package jdbc.test2.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestDelete {
public static void main(String[] args) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();//获取数据库连接
st = conn.createStatement();//获得SQL的执行对象
String sql = "delete from users where id = 4";
int i = st.executeUpdate(sql);
if (i>0){
System.out.println("删除成功");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);
}
}
}
代码与插入代码大体一致,只改动了sql语言和删除成功的文字
最后数据库显式是删除成功的
修改数据库内容也是类似操作
注意,查询有些不同,查询要用到executeQuery
package jdbc.test2.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SelectTest {
public static void main(String[] args) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
st = conn.createStatement();
//SQL
String sql = "select * from users where id = 1";
rs = st.executeQuery(sql);//查询完毕会返回一个结果集
while (rs.next()){
System.out.println(rs.getString("NAME"));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);
}
}
}
输出结果:查询到了id=1的name:
上一篇: 《Java从小白到大牛精简版》之第2章 开发环境搭建
下一篇: (算法练习)——中位数