文章目录
【Mysql】JDBC从放弃到入门(上)
【Mysql】JDBC从放弃到入门(中)
【Mysql】JDBC从放弃到入门(下)
1.JDBC概述
JDBC,Java DataBase Connectivity (Java语言链接数据库)。
JDBC 是sun公司提供的一套接口。
2.JDBC本质的理解
因为每一个数据库的底层实现原理不同,Mysql有Mysql的底层原理,Oracle有Oracle的底层实现原理,…所以我们要有一套统一的标准来方便我们程序员进行编程。
3.编写程序模拟JDBC
sun角色:
package com.sdnu;
/**
* @author Beyong
* @Description 模拟sun公司制定JDBC接口
* @date 2021/07/17 16:53
*/
public interface Jdbc {
void getConnection();
}
各个数据库厂商:
package com.sdnu;
/**
* @author Beyong
* @Description 模拟Mysql厂家
* @date 2021/07/17 16:54
*/
public class Mysql implements Jdbc{
public void getConnection(){
System.out.println("Mysql数据库连接成功");
}
}
package com.sdnu;
/**
* @author Beyong
* @Description 模拟Oracle公司
* @date 2021/07/17 16:56
*/
public class Oracle implements Jdbc{
public void getConnection(){
System.out.println("Oracle数据库连接成功");
}
}
package com.sdnu;
/**
* @author Beyong
* @Description 模拟SqlServer公司
* @date 2021/07/17 16:57
*/
public class SqlServer implements Jdbc{
public void getConnection(){
System.out.println("SqlServer数据库连接成功");
}
}
java程序员:
package com.sdnu;
/**
* @author Beyong
* @Description Java程序员
* @date 2021/07/17 16:49
**/
public class JavaProgrammer {
public static void main(String[] args) {
Jdbc jdbc = new Mysql();
jdbc.getConnection();
Jdbc jdbc2 = new Oracle();
jdbc2.getConnection();
Jdbc jdbc3 = new SqlServer();
jdbc3.getConnection();
}
}
4.JDBC编程
我们下面来使用JDBC来连接一下数据库,由于IDEA中有驱动程序,为了更好展示,所以我们使用记事本来编写我们的程序,并使用命令行运行。
4.1编程前的准备
将jar包的路径添加到classpath中。
4.2 步骤一:注册驱动
告诉Java程序,即将要连接的是哪一个品牌的数据库。
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @author Beyong
* @Description JDBC编程
* @date 2021/07/17 22:07
*/
public class JdbcTest {
public static void main(String[] args) {
try{
/* 多态,父类型引用指向子类型 */
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
}catch(SQLException e){
e.printStackTrace();
}
}
}
4.3步骤二:获取连接
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
/**
* @author Beyong
* @Description JDBC编程
* @date 2021/07/17 22:07
*/
public class JdbcTest {
public static void main(String[] args) {
try{
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
String url = "jdbc:mysql://127.0.0.1:3306/mydatabase";
String user = "root";
String password = "XXXXXX";
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("Databases = " + conn);
}catch(SQLException e){
e.printStackTrace();
}
}
}
要保证Mysql服务器开启。
使用自己Mysql的密码。
String password = "XXXXXX";
4.4 步骤三:获取数据库操作对象
Statement专门执行sql语句
stmt = conn.createStatement();
4.5 步骤四: 执行sql
String sql = "Create Table Mytable1 (name INT);";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "v" : "F");
4.6 步骤五:处理查询结果
由于我们是查询处理,所以这里省略了。
4.7总的代码
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
/**
* @author Beyong
* @Description JDBC编程
* @date 2021/07/17 22:07
*/
public class JdbcTest {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
String url = "jdbc:mysql://127.0.0.1:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai";
String user = "root";
String password = "WGF720130601";
conn = DriverManager.getConnection(url, user, password);
System.out.println("Databases = " + conn);
stmt = conn.createStatement();
String sql = "Create Table Mytable1 (name INT);";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "v" : "F");
}catch(SQLException e){
e.printStackTrace();
} finally {
try{
if(stmt != null){
stmt.close();
}
} catch (SQLException e){
e.printStackTrace();
}
try{
if(conn != null){
conn.close();
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
注意,我使用的是Mysql8,如果是5,则将url中?后面一长串去掉。
我们通过命令的方式或则可视化,看到多了一个表格在数据库中。
4.8 JDBC执行删除和更新
package com.sdnu;
import java.sql.*;
/**
* @author Beyong
* @Description JDBC编程
* @date 2021/07/17 22:07
*/
public class JdbcTest {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
//1.注册驱动
DtiverManager.registerDriver(new com.mysql.jdbc.Driver());
//2.获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "123456");
//3.获取数据库操作对象
Stmt = conn.createStatement();
//4.执行sql语句
String sql = "DELETE FROM mytable2 WHERE id=13 ";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "delete succeed" : "delete failed");
}catch(SQLException e) {
e.printStackTrace();
}finally{
//6.释放资源
if(stmt != null){
try{
stmt.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
4.9 类加载的方式注册驱动
注册驱动的第二中写法,常用。
因为参数字符串可以写到 xxxx.properties中。
package com.sdnu;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import static java.lang.Class.forName;
/**
* @author Beyong
* @Description JdbcTest2
* @date 2021/07/18 15:54
*/
public class JdbcTest2 {
public static void main(String[] args) {
try{
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai", "root", "WGF720130601");
Statement stmt = conn.createStatement();
String sql = "DELETE FROM mytable2 WHERE id=12";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "delete succeed" : "delete failed");
}catch(SQLException e) {
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
4.10 从属性资源文件读取连接数据库
package com.sdnu;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* @author Beyong
* @Description JdbcTest3
* @date 2021/07/18 17:09
*/
public class JdbcTest3 {
public static void main(String[] args) {
Locale locale = Locale.getDefault();
ResourceBundle bundle = ResourceBundle.getBundle("jdbc", locale);
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
Connection conn = null;
Statement stmt = null;
try{
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
String sql = "INSERT INTO mytable2 (id, name) VALUES (21, 'wang')";
stmt.executeUpdate(sql);
}catch(SQLException e) {
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai
user=root
password=123
5.IDEA配置驱动
选择一个模块。
选择我们的jar包。
测试程序,不报错说明成功。
package com.sdnu;
/**
* @author Beyong
* @Description test idea connection mysql
* @date 2021/07/18 18:02
*/
public class JdbcTest4 {
public static void main(String[] args) {
try{
Class.forName("com.mysql.cj.jdbc.Driver");
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
作者:Beyong
出处:Beyong博客
github地址:https://github.com/beyong2019
本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。