JDBCJava连接MySql数据库

举报
AlbertYang 发表于 2021/02/02 23:29:38 2021/02/02
【摘要】 JDBCJava连接MySql数据库 工具准备:Mysql(数据库)、 MyEclipse(开发工具)、Navicat(数据库管理工具) 对应的mysql驱动jar包(我的mql是8.0,所以用mysql-connector-java-8.0.13.jar) mysql-connector-java-8.0.13.jar包下载 1.下载地址:https://dev....

JDBCJava连接MySql数据库

工具准备:Mysql(数据库)、 MyEclipse(开发工具)、Navicat(数据库管理工具)
对应的mysql驱动jar包(我的mql是8.0,所以用mysql-connector-java-8.0.13.jar)

mysql-connector-java-8.0.13.jar包下载
1.下载地址:https://dev.mysql.com/downloads/connector/j/选择与平台无关选项,下载jar包。

2.下载后解压找到mysql-connector-java-8.0.13.jar

把jar包加到Myeclipse的项目中。

搭建环境 引入 jar 包
I. 使用普通文本编辑器开发编译代码, 需要将 jar 包配置到 ClassPath 变量中 CLASSPATH=.;E:\jdbc\ojdbc5.jar
II. 使用集成开发工具 myeclipse 在项目下新建一个lib目录 —> 将jar包放入 --> 选中jar包右键 —>buildpath —>addtobuildpath—>ok
第一个 Jdbc 程序

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class PreparedStatementJdbc {
// 连接字符串
private static final String URL = “jdbc:mysql://127.0.0.1:3306/exam?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC”;
// 用户名
private static final String USER = “root”;
// 密码
private static final String PASSWORD = “123456”;

public static void main(String[] args) {
	// 1. 根据用户输入的卡号,查询账户信息,并打印
	 get(1);
	// 2. 根据用户录入的信息,完成一个账户的添加工作 ( name , password , balance )
	// add("牛牛897","123456",9943.0);
	// 3. 根据用户录入的信息, 修改账户密码
	//update(8, "rfgs");
	// 4. 根据用户输入的卡号,密码, 完成销户动作
	//delete(7, "123456");
}

// 1. 根据用户输入的卡号,查询账户信息,并打印

public static void get(Integer a) {
	Connection con = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	try {
		// 使用的是Mysql,加载驱动程序
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 获得数据库的连接
		con = DriverManager.getConnection(URL, USER, PASSWORD);
		// SQL语句
		String sql = "select cardid,name,password,balance from account where cardid=?";
		// 通过数据库的连接操作数据库,实现增删改查
		ps = con.prepareStatement(sql);
		// 给?赋实际值 //1s
		ps.setInt(1, a);
		// 执行数据库语句
		rs = ps.executeQuery();
		// 如果有数据,则rs.next返回ture,否则返回false
		while (rs.next()) { System.out.println(rs.getInt("cardid") + "," + rs.getString("name") + ", " + rs.getString("password") + "," + rs.getDouble("balance"));
		}
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
		if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
		if (con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
	}

}

// 2. 根据用户录入的信息,完成一个账户的添加工作 ( name , password , balance )

public static void add(String name, String password, Double balance) {
	Connection con = null;
	PreparedStatement ps = null;
	try {
		Class.forName("com.mysql.cj.jdbc.Driver");
		con = DriverManager.getConnection(URL, USER, PASSWORD);
		String sql = "insert into account(name,password,balance) values(?,?,?);";
		ps = con.prepareStatement(sql);
		ps.setString(1, name);
		ps.setString(2, password);
		ps.setDouble(3, balance);
		ps.execute();
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
		if (con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
	}
}

// 3. 根据用户录入的信息, 修改账户密码
public static void update(Integer cardid,String password) {
	Connection con = null;
	PreparedStatement ps = null;
	try {
		Class.forName("com.mysql.cj.jdbc.Driver");
		con = DriverManager.getConnection(URL, USER, PASSWORD);
		String sql = "update account set password=? where cardid=?;";
		ps = con.prepareStatement(sql);
		ps.setString(1, password);
		ps.setInt(2, cardid);
		ps.execute();
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
		if (con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
	}
}

// 4. 根据用户输入的卡号,密码, 完成销户动作
public static void delete(Integer cardid,String password) {
	Connection con = null;
	PreparedStatement ps = null;
	try {
		Class.forName("com.mysql.cj.jdbc.Driver");
		con = DriverManager.getConnection(URL, USER, PASSWORD);
		String sql = "delete from account where cardid=? and password=?;";
		ps = con.prepareStatement(sql);
		ps.setInt(1, cardid);
		ps.setString(2, password);
		ps.execute();
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
		if (con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); }
		}
	}
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170

}
Statement和PreparedStatement的区别

Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句:Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。Statement每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.但存在sql注入风险。PreparedStatement是预编译执行的。在执行可变参数的一条SQL时,PreparedStatement要比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率高。安全性更好,有效防止SQL注入的问题。对于多次重复执行的语句,使用Prepared
Statement效率会更高一点。执行SQL语句是可以带参数的,并支持批量执行SQL。由于采用了Cache机制,则预编译的语句,就会放在Cache中,下次执行相同的SQL语句时,则可以直接从Cache中取出来。
那么CallableStatement扩展了PreparedStatement的接口,用来调用存储过程,它提供了对于输入和输出参数的支持,CallableStatement 接口还有对 PreparedStatement 接口提供的输入参数的sql查询的支持。
PreparedStatement: 数据库会对sql语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率(但尽量采用使用?号的方式传递参数),如果sql语句只执行一次,以后不再复用。从安全性上来看,PreparedStatement是通过?来传递参数的,避免了拼接sql而出现sql注入的问题,所以安全性较好。
在开发中,推荐使用 PreparedStatement

文章来源: albertyang.blog.csdn.net,作者:Albert Yang,版权归原作者所有,如需转载,请联系作者。

原文链接:albertyang.blog.csdn.net/article/details/83833246

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。