主要摘自
https://www.cnblogs.com/town123/p/8336244.html
https://www.runoob.com/java/java-mysql-connect.html
工具:eclipse、MySQL、MySQL连接驱动:mysql-connector-java-5.1.45.jar
首先要下载Connector/J地址:http://www.mysql.com/downloads/connector/j/
这是MySQL官方提供的连接方式(即MySQL连接驱动),解压后得到jar库文件,需要在工程中导入该库文件。
这是解压后的文件:
一、新建java项目 然后新建一个文件夹——libs(用来放各种外部包)
右键工程名(我的是sqldemo1)—新建New—文件夹Folder—Folder name为libs—Finish。
二、在包里面加入连接mysql数据库的包
即刚才解压后得到的 mysql-connector-java-5.1.45-bin.jar
然后复制粘贴到我们java项目的libs文件夹下面(注意是物理地址里);
此时,在eclipse中—右击libs文件夹—刷新Refresh,就将下载好的JDBC放到该文件夹下,如下图所示:
三、构建路径上的jar包
a:点击项目Project——选择属性Propeties
b:进行添加
四、在java项目中进行mysql数据库的连接
创建测试数据
接下来我们在 MySQL 中创建 test 数据库,并创建 websites 数据表,表结构如下:
CREATE TABLE `websites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL DEFAULT \'\' COMMENT \'站点名称\', `url` varchar(255) NOT NULL DEFAULT \'\', `alexa` int(11) NOT NULL DEFAULT \'0\' COMMENT \'Alexa 排名\', `country` char(10) NOT NULL DEFAULT \'\' COMMENT \'国家\', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
插入一些数据:
INSERT INTO `websites` VALUES (\'1\', \'Google\', \'https://www.google.cm/\', \'1\', \'USA\'), (\'2\', \'淘宝\', \'https://www.taobao.com/\', \'13\', \'CN\'), (\'3\', \'菜鸟教程\', \'http://www.runoob.com\', \'5892\', \'\'), (\'4\', \'微博\', \'http://weibo.com/\', \'20\', \'CN\'), (\'5\', \'Facebook\', \'https://www.facebook.com/\', \'3\', \'USA\');
数据表显示如下:
连接数据库
以下实例使用了 JDBC 连接 MySQL 数据库,注意一些数据如用户名,密码需要根据你的开发环境来配置
MySQL 8.0 以上版本的数据库连接有所不同:
-
1、MySQL 8.0 以上版本驱动包版本 mysql-connector-java-8.0.16.jar。
-
2、com.mysql.jdbc.Driver 更换为 com.mysql.cj.jdbc.Driver。
-
MySQL 8.0 以上版本不需要建立 SSL 连接的,需要显示关闭。
-
最后还需要设置 CST。
加载驱动与连接数据库方式如下:
//MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/<数据库名>"; // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/<数据库名>?useSSL=false&serverTimezone=UTC";
这里还要再说明一下:
com.mysql.jdbc.Driver
是 mysql-connector-java 5中的驱动名,
com.mysql.cj.jdbc.Driver
是 mysql-connector-java 6中的驱动名
我这里使用的是5版。
import java.sql.*; public class test { //MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; // 数据库的用户名与密码,需要根据自己的设置 static final String USER = "root"; static final String PASS = "123456"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ // 注册 JDBC 驱动 Class.forName(JDBC_DRIVER); // 打开链接 System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行查询 System.out.println(" 实例化Statement对象..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, name, url FROM websites"; ResultSet rs = stmt.executeQuery(sql); // 展开结果集数据库 while(rs.next()){ // 通过字段检索 int id = rs.getInt("id"); String name = rs.getString("name"); String url = rs.getString("url"); // 输出数据 System.out.print("ID: " + id); System.out.print(", 站点名称: " + name); System.out.print(", 站点 URL: " + url); System.out.print("\n"); } // 完成后关闭 rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ // 处理 JDBC 错误 se.printStackTrace(); }catch(Exception e){ // 处理 Class.forName 错误 e.printStackTrace(); }finally{ // 关闭资源 try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// 什么都不做 try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } System.out.println("Goodbye!"); } }
以上实例执行输出结果如下:
五、一个实例增删查该的实例
这部分内容是我后补的,主要针对一些常用的增删查改操作给出一个样本吧。注意,这里用的工具是idea而不是之前的eclipse了。
添加JDBC依赖
<!-- JDBC --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency>
1、创建数据库
这里简单地创建一个表,插入三条记录。
DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu` (
`id` INT NOT NULL COMMENT \'编号\',
`name` varchar(100) DEFAULT NULL COMMENT \'姓名\',
`age` INT NOT NULL COMMENT \'年龄\',
PRIMARY KEY (`id`)
) COMMENT=\'学生表\';
INSERT INTO stu VALUES(1,\'张三\',20);
INSERT INTO stu VALUES(2,\'李四\',21);
INSERT INTO stu VALUES(3,\'王五\',19);
2、连接测试
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class GetConnection {
public static void main(String[] args){
try{
//调用Class.forName()方法加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("成功加载MySQL驱动!");
}catch(ClassNotFoundException e1){
System.out.println("找不到MySQL驱动!");
e1.printStackTrace();
}
String url="jdbc:mysql://localhost/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"; //JDBC的URL
//调用DriverManager对象的getConnection()方法,获得一个Connection对象
Connection conn;
try {
conn = DriverManager.getConnection(url, "root","******");//url 账号 密码
//创建一个Statement对象
Statement stmt = conn.createStatement(); //创建Statement对象
System.out.print("成功连接到数据库!");
stmt.close();
conn.close();
} catch (SQLException e){
e.printStackTrace();
}
}
}
3、查找记录
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class SelectTable { public static void main(String[] args){ try{ //调用Class.forName()方法加载驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("成功加载MySQL驱动!"); String url="jdbc:mysql://localhost/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"; //JDBC的URL Connection conn; conn = DriverManager.getConnection(url, "root","*****");//url 账号 密码 Statement stmt = conn.createStatement(); //创建Statement对象 System.out.println("成功连接到数据库!"); String sql = "select * from stu"; //要执行的SQL ResultSet rs = stmt.executeQuery(sql);//创建数据对象 System.out.println("编号"+"\t"+"姓名"+"\t"+"年龄"); while (rs.next()){ System.out.print(rs.getInt(1) + "\t"); System.out.print(rs.getString(2) + "\t"); System.out.print(rs.getInt(3) + "\t"); System.out.println(); } rs.close(); stmt.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); } } }
4、增删查改记录
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class UpdateDeleteDemo { public static void main(String[] args)throws Exception{ try{ //调用Class.forName()方法加载驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("成功加载MySQL驱动!"); String url="jdbc:mysql://localhost/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"; //JDBC的URL Connection conn; conn = DriverManager.getConnection(url, "root","******");//url 账号 密码 Statement stmt = conn.createStatement(); //创建Statement对象 System.out.println("成功连接到数据库!"); //查询数据的代码 String sql = "select * from stu"; //要执行的SQL ResultSet rs = stmt.executeQuery(sql);//创建数据对象 System.out.println("原始数据: \n " + "编号"+"\t"+"姓名"+"\t"+"年龄"); while (rs.next()){ System.out.print(rs.getInt(1) + "\t"); System.out.print(rs.getString(2) + "\t"); System.out.print(rs.getInt(3) + "\t"); System.out.println(); } //增加数据 String sql1 = "insert into stu (id,name,age) values(?,?,?)"; PreparedStatement pst = conn.prepareStatement(sql1); pst.setInt(1,4); pst.setString(2,"sunlu"); pst.setInt(3, 25); pst.executeUpdate(); ResultSet rs1 = stmt.executeQuery(sql);//创建数据对象 System.out.println("插入后数据: \n" + "编号"+"\t"+"姓名"+"\t"+"年龄"); while (rs1.next()){ System.out.print(rs1.getInt(1) + "\t"); System.out.print(rs1.getString(2) + "\t"); System.out.print(rs1.getInt(3) + "\t"); System.out.println(); } //修改数据的代码 String sql2 = "update stu set name=? where id=?"; pst = conn.prepareStatement(sql2); pst.setString(1,"nick"); pst.setInt(2,1); pst.executeUpdate(); ResultSet rs3 = stmt.executeQuery(sql);//创建数据对象 System.out.println("修改后数据: \n" + "编号"+"\t"+"姓名"+"\t"+"年龄"); while (rs3.next()){ System.out.print(rs3.getInt(1) + "\t"); System.out.print(rs3.getString(2) + "\t"); System.out.print(rs3.getInt(3) + "\t"); System.out.println(); } //删除数据的代码 String sql3 = "delete from stu where id=?"; pst = conn.prepareStatement(sql3); pst.setInt(1,1); pst.executeUpdate(); ResultSet rs2 = stmt.executeQuery(sql);//创建数据对象 System.out.println("删除后数据: \n" + "编号"+"\t"+"姓名"+"\t"+"年龄"); while (rs2.next()){ System.out.print(rs2.getInt(1) + "\t"); System.out.print(rs2.getString(2) + "\t"); System.out.print(rs2.getInt(3) + "\t"); System.out.println(); } rs.close(); stmt.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); } } }