1、在IDEA里创建Maven项目
1.1、点击Create New Project
1.2、选择Maven,JDK这里用的是1.8,点击Next
1.3、填入“组织名”、“项目名”,版本是默认的,点击Next
1.4、选择创建路径,点击Finsh
1.5、这是创建完成的界面
2、用Maven连接Mysql的JDBC驱动
2.1、打开src下的pom.xml文件, 在里面添加Mysql的jdbc包的引用,代码如下
1
2
3 mysql
4 mysql-connector-java
5 8.0.18
6
7
2.2、添加完成后,IDEA右下角会出现下图提示,点击提示中的Import Changes,Maven就会开始下载资源
2.3、下载时页面左下角出现正在下载的提示
2.4、下载完成变成绿勾
3、连接数据库第一种方式:直接注册驱动,向数据库插入数据(不推荐使用)
3.1、在src——main——java目录下,新建一个LinkDatabaseInsert的类
1 importjava.sql.Connection;2 importjava.sql.DriverManager;3 importjava.sql.PreparedStatement;4 importjava.sql.SQLException;5
6 public classLinkDatabaseInsert {7 public static void main(String[] args) throwsClassNotFoundException, SQLException {8 //1.注册数据库的驱动
9 Class.forName("com.mysql.jdbc.Driver");10 //2.获取数据库连接(里面内容依次是:"jdbc:mysql://主机名:端口号/数据库名","用户名","登录密码")
11 Connection connection = DriverManager.getConnection("jdbc:mysql://rm-uf6lgkv4fd9776rxego.mysql.rds.aliyuncs.com:3306/study","root","whmilyY123!");12 //3.需要执行的sql语句(?是占位符,代表一个参数)
13 String sql = "insert into stu(id,name,age) values(?,?,?)";14 //4.获取预处理对象,并依次给参数赋值
15 PreparedStatement statement =connection.prepareCall(sql);16 statement.setInt(1,12); //数据库字段类型是int,就是setInt;1代表第一个参数
17 statement.setString(2,"小明"); //数据库字段类型是String,就是setString;2代表第二个参数
18 statement.setInt(3,16); //数据库字段类型是int,就是setInt;3代表第三个参数19 //5.执行sql语句(执行了几条记录,就返回几)
20 int i =statement.executeUpdate();21 System.out.println(i);22 //6.关闭jdbc连接
23 statement.close();24 connection.close();25 }26 }
3.2、运行程序,返回1,说明插入成功
4、连接数据库第二种方式——新建数据库配置文件,获取配置文件信息后,再注册数据库驱动
4.1、利用反射获取新建的数据库配置文件db.properties里的信息
4.1.1、在src——main——resources目录下,新建db.properties文件
1 driver=com.mysql.jdbc.Driver2 url=jdbc:mysql://rm-uf6lg6rxego.mysql.rds.aliyuncs.com:3306/study
3 user=root4 password=wY123!
4.1.2、新建util包,然后在里面创建JdbcUtil类,利用反射获取db.properties文件信息,最后返回数据库连接
1 packageutil;2
3 importjava.io.InputStream;4 importjava.sql.Connection;5 importjava.sql.DriverManager;6 importjava.util.Properties;7
8 //获取到db.properties文件中的数据库信息
9 public classJdbcUtil {10 //私有变量
11 private staticString driver;12 private staticString url;13 private staticString user;14 private staticString password;15
16 //静态块
17 static{18 try{19 //1.新建属性集对象
20 Properties properties = newProperties();21 //2通过反射,新建字符输入流,读取db.properties文件
22 InputStream input = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");23 //3.将输入流中读取到的属性,加载到properties属性集对象中
24 properties.load(input);25 //4.根据键,获取properties中对应的值
26 driver = properties.getProperty("driver");27 url = properties.getProperty("url");28 user = properties.getProperty("user");29 password = properties.getProperty("password");30 }catch(Exception e){31 e.printStackTrace();32 }33 }34
35 //返回数据库连接
36 public staticConnection getConnection(){37 try{38 //注册数据库的驱动
39 Class.forName(driver);40 //获取数据库连接(里面内容依次是:主机名和端口、用户名、密码)
41 Connection connection =DriverManager.getConnection(url,user,password);42 //返回数据库连接
43 returnconnection;44 }catch(Exception e){45 e.printStackTrace();46 }47 return null;48 }49 }
4.1.3、在java目录下创建LinkMysql类,调用JdbcUtil类返回的数据库连接操作数据库
1 importutil.JdbcUtil;2
3 importjava.sql.Connection;4 importjava.sql.PreparedStatement;5 importjava.sql.SQLException;6
7 public classLinkMysql {8 public static void main(String[] args) throwsClassNotFoundException, SQLException {9 //获取数据库连接
10 Connection connection =JdbcUtil.getConnection();11 //需要执行的sql语句
12 String sql = "insert into stu(id,name,age) values(?,?,?)";13 //获取预处理对象,并给参数赋值
14 PreparedStatement statement =connection.prepareCall(sql);15 statement.setInt(1,14);16 statement.setString(2,"李四");17 statement.setInt(3,16);18 //执行sql语句(插入了几条记录,就返回几)
19 int i = statement.executeUpdate(); //executeUpdate:执行并更新
20 System.out.println(i);21 //关闭jdbc连接
22 statement.close();23 connection.close();24 }25 }
4.2、通过ResourceBundle类获取新建的数据库配置文件db.properties里的信息
4.2.1、在util包里面创建创建JdbcUtil2类,ResourceBundle类获取db.properties文件信息,最后返回数据库连接
1 packageutil;2
3 import java.sql.*;4 importjava.util.ResourceBundle;5
6 public classJdbcUtil2 {7 //私有变量
8 private staticString driver;9 private staticString url;10 private staticString user;11 private staticString password;12
13 //静态块
14 static{15 try{16 //2.3通过ResourceBundle类拿到数据库连接信息
17 ResourceBundle resourceBundle = ResourceBundle.getBundle("db");18 driver = resourceBundle.getString("driver");19 url = resourceBundle.getString("url");20 user = resourceBundle.getString("user");21 password = resourceBundle.getString("password");22 }catch(Exception e){23 e.printStackTrace();24 }25 }26
27 //返回数据库连接
28 public staticConnection getConnection(){29 try{30 //注册数据库的驱动
31 Class.forName(driver);32 //获取数据库连接(里面内容依次是:主机名和端口、用户名、密码)
33 Connection connection =DriverManager.getConnection(url,user,password);34 //返回数据库连接
35 returnconnection;36 }catch(Exception e){37 e.printStackTrace();38 }39 return null;40 }41
42 //关闭结果集
43 public static voidcloseResultSet(ResultSet resultSet) {44 if (resultSet != null) {45 try{46 resultSet.close();47 } catch(SQLException e) {48 e.printStackTrace();49 }50 }51 }52
53 //关闭预处理对象
54 public static voidcloseStatement(Statement statement) {55 if (statement != null) {56 try{57 statement.close();58 } catch(SQLException e) {59 e.printStackTrace();60 }61 }62 }63
64 //关闭数据库连接
65 public static voidcloseConnection(Connection connection){66 if(connection != null){67 try{68 connection.close();69 } catch(SQLException e) {70 e.printStackTrace();71 }72 }73 }74
75 //一次性关闭上面三个
76 public static voidcloseResource(ResultSet resultSet,Statement statement,Connection connection){77 closeResultSet(resultSet);78 closeStatement(statement);79 closeConnection(connection);80 }81 }
4.2.2、在java目录下创建LinkMysql2类,调用JdbcUtil2类返回的数据库连接操作数据库
1 importutil.JdbcUtil2;2
3 importjava.sql.Connection;4 importjava.sql.PreparedStatement;5 importjava.sql.SQLException;6
7 public classLinkMysql2 {8 public static void main(String[] args) throwsClassNotFoundException, SQLException {9 //获取数据库连接
10 Connection connection =JdbcUtil2.getConnection();11 //需要执行的sql语句
12 String sql = "insert into stu(id,name,age) values(?,?,?)";13 //获取预处理对象,并给参数赋值
14 PreparedStatement statement =connection.prepareCall(sql);15 statement.setInt(1,19);16 statement.setString(2,"王五");17 statement.setInt(3,16);18 //执行sql语句(执行了几条记录,就返回几)
19 int i = statement.executeUpdate(); //executeUpdate:执行并更新
20 System.out.println(i);21 //关闭jdbc连接
22 JdbcUtil2.closeResource(null,statement,connection);23 }24 }25 importutil.JdbcUtil2;26
27 importjava.sql.Connection;28 importjava.sql.PreparedStatement;29 importjava.sql.SQLException;30
31 public classLinkMysql2 {32 public static void main(String[] args) throwsClassNotFoundException, SQLException {33 //获取数据库连接
34 Connection connection =JdbcUtil2.getConnection();35 //需要执行的sql语句
36 String sql = "insert into stu(id,name,age) values(?,?,?)";37 //获取预处理对象,并给参数赋值
38 PreparedStatement statement =connection.prepareCall(sql);39 statement.setInt(1,19);40 statement.setString(2,"王五");41 statement.setInt(3,16);42 //执行sql语句(执行了几条记录,就返回几)
43 int i = statement.executeUpdate(); //executeUpdate:执行并更新
44 System.out.println(i);45 //关闭jdbc连接
46 JdbcUtil2.closeResource(null,statement,connection);47 }48 }
5、连接数据库的第三种方式:新建数据库配置文件,获取配置文件信息后,再通过DButils工具包连接数据库
5.1、打开src下的pom.xml文件, 在里面添加DButils的引用,代码如下
1
2 commons-dbutils
3 commons-dbutils
4 1.5
5
5.2、创建DbutilsInsert类,往数据库内插入数据,代码如下
1 importorg.apache.commons.dbutils.QueryRunner;2 importutil.JdbcUtil2;3
4 importjava.sql.Connection;5 importjava.sql.SQLException;6
7 public classDbutilsInsert {8 public static void main(String[] args) throwsSQLException {9 //创建dbUtils里面的QueryRunner对象
10 QueryRunner queryRunner = newQueryRunner();11 //sql语句
12 String sql = "insert into stu(id,name,age) values(?,?,?)";13 //存参数值的数组
14 Object[] objects = {20,"小红",11};15 //获取数据库连接
16 Connection connection =JdbcUtil2.getConnection();17 //执行sql语句,并返回影响的行数
18 int i =queryRunner.update(connection,sql,objects);19 System.out.println(i);20 //关闭数据库连接
21 connection.close();22 }23 }
5.3、创建DbutiUpdate类,更新数据库内数据,代码如下
1 importorg.apache.commons.dbutils.QueryRunner;2 importutil.JdbcUtil2;3
4 importjava.sql.Connection;5 importjava.sql.SQLException;6
7 public classDbutilsUpdate {8 public static void main(String[] args) throwsSQLException {9 //创建dbUtils里面的QueryRunner对象
10 QueryRunner queryRunner = newQueryRunner();11 //sql语句
12 String sql = "update stu set name=? where id=?";13 //存参数值的数组
14 Object[] objects = {"红红",21};15 //获取数据库连接
16 Connection connection =JdbcUtil2.getConnection();17 //执行sql语句,并返回影响的行数
18 int i =queryRunner.update(connection,sql,objects);19 System.out.println(i);20 //关闭数据库连接
21 connection.close();22 }23 }
5.4、创建DbutiDelete类,删除数据库内数据,代码如下
1 importorg.apache.commons.dbutils.QueryRunner;2 importutil.JdbcUtil2;3
4 importjava.sql.Connection;5 importjava.sql.SQLException;6
7 public classDbutilsDelete {8 public static void main(String[] args) throwsSQLException {9 //创建dbUtils里面的QueryRunner对象
10 QueryRunner queryRunner = newQueryRunner();11 //sql语句
12 String sql = "delete from stu where id=?";13 //存参数值的数组
14 Object[] objects = {11};15 //获取数据库连接
16 Connection connection =JdbcUtil2.getConnection();17 //执行sql语句,并返回影响的行数
18 int i =queryRunner.update(connection,sql,objects);19 System.out.println(i);20 //关闭数据库连接
21 connection.close();22 }23 }
5.5、创建UtilsSelectArrayHandler类,查询数据(ArrayHandler()只会返回第一条记录)
1 importorg.apache.commons.dbutils.QueryRunner;2 importorg.apache.commons.dbutils.handlers.ArrayHandler;3 importutil.JdbcUtil2;4
5 importjava.sql.Connection;6 importjava.sql.SQLException;7 importjava.util.Arrays;8
9 public classUtilsSelectArrayHandler {10 public static void main(String[] args) throwsSQLException {11 //创建dbUtils里面的QueryRunner对象
12 QueryRunner queryRunner = newQueryRunner();13 //sql语句
14 String sql = "select * from stu where age>?";15 //获取数据库连接
16 Connection connection =JdbcUtil2.getConnection();17 //存参数值的数组
18 Object[] params = {16};19 //执行查询,并以数组的形式返回查询结果(new ArrayHandler()只会返回第一条记录)
20 Object[] objects = queryRunner.query(connection,sql, newArrayHandler(),params);21 System.out.println(Arrays.toString(objects));22 System.out.println("\n");23 //关闭数据库连接
24 connection.close();25 }26 }
5.6、创建UtilsSelectArrayListHandler类,查询数据(ArrayListHandler()会返回所有查询到的记录)
1 importorg.apache.commons.dbutils.QueryRunner;2 importorg.apache.commons.dbutils.handlers.ArrayListHandler;3 importutil.JdbcUtil2;4
5 importjava.sql.Connection;6 importjava.sql.SQLException;7 importjava.util.Arrays;8 importjava.util.List;9
10 public classUtilsSelectArrayListHandler {11 public static void main(String[] args) throwsSQLException {12 //创建dbUtils里面的QueryRunner对象
13 QueryRunner queryRunner = newQueryRunner();14 //sql语句
15 String sql = "select * from stu where age>?";16 //获取数据库连接
17 Connection connection =JdbcUtil2.getConnection();18 //存参数值的数组
19 Object[] params = {16};20 //执行查询,并以数组的形式返回查询结果(new ArrayListHandler()返回所有查询到的记录)
21 List lists = queryRunner.query(connection,sql, newArrayListHandler(),params);22 for(Object[] item:lists){23 System.out.println(Arrays.toString(item));24 }25 //关闭数据库连接
26 connection.close();27 }28 }
5.7、创建UtilsSelectBeanHandler类,查询数据,并将查询数据转成实际对象(BeanHandler只会返回第一条记录)
先创建student类
1 public classStudent {2 privateString id;3 privateString name;4 private intage;5 privateString tname;6
7 publicString getId() {8 returnid;9 }10
11 public voidsetId(String id) {12 this.id =id;13 }14
15 publicString getName() {16 returnname;17 }18
19 public voidsetName(String name) {20 this.name =name;21 }22
23 public intgetAge() {24 returnage;25 }26
27 public void setAge(intage) {28 this.age =age;29 }30
31 publicString getTname() {32 returntname;33 }34
35 public voidsetTname(String tname) {36 this.tname =tname;37 }38
39 @Override40 publicString toString() {41 return "Student{" +
42 "id='" + id + '\'' +
43 ", name='" + name + '\'' +
44 ", age=" + age +
45 ", tname='" + tname + '\'' +
46 '}';47 }48 }
再创建UtilsSelectBeanHandler类
importorg.apache.commons.dbutils.QueryRunner;importorg.apache.commons.dbutils.handlers.BeanHandler;importutil.JdbcUtil2;importjava.sql.Connection;importjava.sql.SQLException;public classUtilsSelectBeanHandler {public static void main(String[] args) throwsSQLException {//创建dbUtils里面的QueryRunner对象
QueryRunner queryRunner = newQueryRunner();//sql语句
String sql = "select * from stu where age>?";//获取数据库连接
Connection connection =JdbcUtil2.getConnection();//存参数值的数组
Object[] params = {16};//执行查询,并以数组的形式返回查询结果(new BeanHandler()只会返回第一条记录,并转成对象)
Student student = queryRunner.query(connection,sql, new BeanHandler(Student.class),params);
System.out.println(student);
System.out.println("\n");//关闭数据库连接
connection.close();
}
}
5.8、创建UtilsSelectBeanListHandler类,查询数据,并将查询数据转成实际对象(BeanListHandler会返回查询到的所有记录)
1 importorg.apache.commons.dbutils.QueryRunner;2 importorg.apache.commons.dbutils.handlers.BeanListHandler;3 importutil.JdbcUtil2;4
5 importjava.sql.Connection;6 importjava.sql.SQLException;7 importjava.util.List;8
9 public classUtilsSelectBeanListHandler {10 public static void main(String[] args) throwsSQLException {11 //创建dbUtils里面的QueryRunner对象
12 QueryRunner queryRunner = newQueryRunner();13 //sql语句
14 String sql = "select * from stu where age>?";15 //获取数据库连接
16 Connection connection =JdbcUtil2.getConnection();17 //存参数值的数组
18 Object[] params = {16};19 //执行查询,并以数组的形式返回查询结果(new BeanListHandler()返回查询到的所有记录,并转成对象)
20 List students = queryRunner.query(connection,sql, new BeanListHandler(Student.class),params);21 System.out.println(students);22 //关闭数据库连接
23 connection.close();24 }25 }
5.9、创建UtilsSelectColumnListHandler类,查询数据(ColumnListHandler会返回结果中指定的列)
1 importorg.apache.commons.dbutils.QueryRunner;2 importorg.apache.commons.dbutils.handlers.ColumnListHandler;3 importutil.JdbcUtil2;4
5 importjava.sql.Connection;6 importjava.sql.SQLException;7 importjava.util.List;8
9 public classUtilsSelectColumnListHandler {10 public static void main(String[] args) throwsSQLException {11 //创建dbUtils里面的QueryRunner对象
12 QueryRunner queryRunner = newQueryRunner();13 //sql语句
14 String sql = "select * from stu where age>?";15 //获取数据库连接
16 Connection connection =JdbcUtil2.getConnection();17 //存参数值的数组
18 Object[] params = {16};19 //执行查询,并以数组的形式返回查询结果(new ColumnListHandler<>()返回结果中指定的列)
20 List strs = queryRunner.query(connection,sql, new ColumnListHandler<>("name"),params);21 System.out.println(strs);22 for(Object item:strs){23 System.out.println(item);24 }25 //关闭数据库连接
26 connection.close();27 }28 }
5.10、创建UtilsSelectScalarHandler类,查询单数据(ScalarHandler返回分组函数的值)
1 importorg.apache.commons.dbutils.QueryRunner;2 importorg.apache.commons.dbutils.handlers.ScalarHandler;3 importutil.JdbcUtil2;4
5 importjava.sql.Connection;6 importjava.sql.SQLException;7
8 public classUtilsSelectScalarHandler {9 public static void main(String[] args) throwsSQLException {10 //创建dbUtils里面的QueryRunner对象
11 QueryRunner queryRunner = newQueryRunner();12 //sql语句
13 String sql = "select max(age) from stu";14 //获取数据库连接
15 Connection connection =JdbcUtil2.getConnection();16 //存参数值的数组
17 Object[] params ={};18 //执行查询,并以数组的形式返回查询结果(new ScalarHandler<>()返回分组函数的值)
19 int age = queryRunner.query(connection,sql, new ScalarHandler<>(),params);20 System.out.println(age);21 //关闭数据库连接
22 connection.close();23 }24 }
6、用c3p0连接池,连接数据库
6.1、在scr——pom.xml文件里,引入c3p0包
1
2 c3p0
3 c3p0
4 0.9.1.2
5
6.2、在src——main——resources下增加c3p0-config.mxl文件
1 <?xml version="1.0" encoding="UTF-8"?>
2
3
4
5
6 com.mysql.jdbc.Driver
7
8 jdbc:mysql://rm-uf9776rxego.mysql.rds.aliyuncs.com:3306/study
9
10 root
11
12 whmilyY123!
13
14
15
16 30000
17
18 30
19
20 10
21
22 30
23
24 100
25
26 10
27
28 200
29
30 200
31
32 3
33
34
6.3、在src——main——java——util里添加DataSourceUtils类
1 packageutil;2
3 importcom.mchange.v2.c3p0.ComboPooledDataSource;4
5 importjavax.sql.DataSource;6 importjava.sql.Connection;7 importjava.sql.ResultSet;8 importjava.sql.SQLException;9 importjava.sql.Statement;10
11 public classDataSourceUtils {12 private static ComboPooledDataSource ds = newComboPooledDataSource();13
14 /**
15 * 获取数据源16 *17 *@return连接池18 */
19 public staticDataSource getDataSource() {20 returnds;21 }22
23 /**
24 * 释放资源25 *26 *@paramconn27 *@paramst28 *@paramrs29 */
30 public static voidCloseResource(Connection conn, Statement st, ResultSet rs) {31 closeResultSet(rs);32 closeStaement(st);33 closeConn(conn);34 }35
36 /**
37 * 获取连接38 *39 *@return连接40 *@throwsSQLException41 */
42 public static Connection getConnection() throwsSQLException {43 returnds.getConnection();44 }45
46 /**
47 * 释放连接48 *49 *@paramconn 连接50 */
51 public static voidcloseConn(Connection conn) {52 if (conn != null) {53 try{54 conn.close();55 } catch(SQLException e) {56 e.printStackTrace();57 } finally{58 conn = null;59 }60 }61 }62
63 /**
64 * 释放语句执行者65 *66 *@paramst 语句执行者67 */
68 public static voidcloseStaement(Statement st) {69 if (st != null) {70 try{71 st.close();72 } catch(SQLException e) {73 e.printStackTrace();74 } finally{75 st = null;76 }77 }78 }79
80 /**
81 * 释放结果集82 *83 *@paramrs 结果集84 */
85 public static voidcloseResultSet(ResultSet rs) {86 if (rs != null) {87 try{88 rs.close();89 } catch(SQLException e) {90 e.printStackTrace();91 } finally{92 rs = null;93 }94 }95 }96 }
6.4、新建C3p0Select类,用数据库连接池的方式查询
1 importorg.apache.commons.dbutils.QueryRunner;2 importorg.apache.commons.dbutils.handlers.BeanListHandler;3 importutil.DataSourceUtils;4
5 importjava.sql.SQLException;6 importjava.util.List;7
8 public classC3p0Select {9 public static void main(String[] args) throwsSQLException {10 //创建dbUtils里面的QueryRunner对象,并获取数据库连接
11 QueryRunner queryRunner = newQueryRunner(DataSourceUtils.getDataSource());12 //sql语句
13 String sql = "select * from stu where age>?";14 //存参数值的数组
15 Object[] params = {16};16 //执行查询,并以数组的形式返回查询结果(new BeanListHandler()返回查询到的所有记录,并转成对象)
17 List students = queryRunner.query(sql, new BeanListHandler(Student.class),params);18 System.out.println(students);19 }20 }