Java连接MySQL数据库--小白易错
前提工具:
1,eclipse
2,MySQL5.6/Navicat
3,MySQL连接驱动JDBC:mysql-connector-java-5.1.27.jar
( 可以在这里直接下载.)
连接步骤
1,加载驱动(关键)
Java 连接 MySQL 需要 驱动包解压后得到 jar 库文件(mysql-connector-java-5.1.27.jar),然后在对应的项目中导入该库文件。如图:
mysql-jdbc添加方法:
a,右键工程名,在java build path中的Libraries分页中选择Add JARs…,选择刚才添加的JDBC
b,选中java项目右键 ⟶ 点击“构建路径” ⟶ 点击“配置构建路径” ⟶ 点击“添加外部JAR”,找到sqlite-jdbc.jar后,打开并应用 ⟶ 点击“Apply and Close”。
总之就是找到jar库导入文件,a,b两个摘抄描述均可用
2,创建测试数据
接下来我们在 MySQL 中创建 RUNOOB 数据库,并创建 websites 数据表(可用已有表,但注意修改第3步相应代码),表结构如下:
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’);
3,连接数据库(易错)
加载驱动与连接数据库方式如下:
Class.forName(“com.mysql.cj.jdbc.Driver”);
conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/test_demouseSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC”,“root”,“password”);
连接数据库并读取数据:
数据库名称:test
数据表名称:websites
端口号:3306
用户名:root
密码:password
以下实例使用了 JDBC 连接 MySQL 数据库
package com.runoob.test;
import java.sql.*;
public class MySQLDemo {
// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB";
//注意如RUNOOB为库名
// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
//static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&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";
//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!");
}
}
以上实例执行输出结果如下:
以上为个人归纳,具体还可参考: Java MySQL 连接.
易错点
1,注意一些数据如用户名,密码需要根据你的开发环境来配置
2,如果连接其他表,注意如RUNOOB为库名,websites是数据表名,按自己的改
3,MySQL 8.0 以上版本的数据库连接有所不同
(可在上方链接中解决)
若依然没有解决可参考本人代码再测试
//JDBC 驱动名及数据库 URL
static final String JDBC_DRIVER = “com.mysql.jdbc.Driver”;
static final String DB_URL = “jdbc:mysql://localhost:3306/abc?&useSSL=false&serverTimezone=UTC”;
//可以分开判断JDBC 驱动名及数据库 URL是否正确
import java.sql.*; //导入java.sql包
public class Text{
static Connection con; //声明Connection对象
static Statement sql; //声明Statement对象
static ResultSet res; //声明ResultSet对象
public Connection getConnection(){ //建立返回值为Connection的方法
try { //加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库驱动加载成功");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
try { //通过访问数据库的URL获取数据库连接对象
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql");
System.out.println("数据库连接成功");
System.out.print('\n');
}catch(SQLException e) {
e.printStackTrace();
}
return con; //按方法要求放回一个Connection对象
}
扩展(增加、删除,修改和查询数据)
备注:偷懒直接用了网上的。。
使用例表:
CREATE TABLE emp(
empno INT(4) PRIMARY KEY,
ename VARCHAR(10),
job VARCHAR(9),
hiredate DATE,
sal FLOAT(7,2)
) ;
增加
String name;
String id;
PreparedStatement psql;
ResultSet res;
//预处理添加数据,其中有两个参数--“?”
psql = con.prepareStatement("insert into emp (empno,ename,job,hiredate,sal) "
+ "values(?,?,?,?,?)");
psql.setInt(1, 3212); //设置参数1,创建id为3212的数据
psql.setString(2, "王刚"); //设置参数2,name 为王刚
psql.setString(3, "总裁");
DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
Date myDate2 = dateFormat2.parse("2010-09-13");
psql.setDate(4,new java.sql.Date(myDate2.getTime()));
psql.setFloat(5, (float) 2000.3);
psql.executeUpdate(); //执行更新
删除
PreparedStatement psql;
//预处理删除数据
psql = con.prepareStatement("delete from emp where sal > ?");
psql.setFloat(1, 4500);
psql.executeUpdate();
psql.close();
修改
PreparedStatement psql;
//预处理更新(修改)数据,将王刚的sal改为5000.0
psql = con.prepareStatement("update emp set sal = ? where ename = ?");
psql.setFloat(1,(float) 5000.0);
psql.setString(2,"王刚");
psql.executeUpdate();
查询
package sqldemo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class main {
public static void main(String[] args) {
//声明Connection对象
Connection con;
//驱动程序名
String driver = "com.mysql.jdbc.Driver";
//URL指向要访问的数据库名mydata
String url = "jdbc:mysql://localhost:3306/sqltestdb";
//MySQL配置时的用户名
String user = "root";
//MySQL配置时的密码
String password = "123456";
//遍历查询结果集
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = DriverManager.getConnection(url,user,password);
if(!con.isClosed())
System.out.println("Succeeded connecting to the Database!");
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = con.createStatement();
//要执行的SQL语句
String sql = "select * from emp";
//3.ResultSet类,用来存放获取的结果集!!
ResultSet rs = statement.executeQuery(sql);
System.out.println("-----------------");
System.out.println("执行结果如下所示:");
System.out.println("-----------------");
System.out.println("姓名" + "\t" + "职称");
System.out.println("-----------------");
String job = null;
String id = null;
while(rs.next()){
//获取stuname这列数据
job = rs.getString("job");
//获取stuid这列数据
id = rs.getString("ename");
//输出结果
System.out.println(id + "\t" + job);
}
rs.close();
con.close();
} catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
System.out.println("数据库数据成功获取!!");
}
}
}
运行结果:
Succeeded connecting to the Database!
-----------------
执行结果如下所示:
-----------------
姓名 职称
-----------------
李兴华 经理
张三 总监
王五 厂长
齐秦 书记
张刚 组长
曹操 财务
李四 总裁
数据库数据成功获取!!