java操作MYSQL数据库
0.开发环境
- windows10
- Mysql 8.0.11 官网下载地址:https://dev.mysql.com/downloads/mysql/
- IDea 2017.2.6 官方下载地址:https://www.jetbrains.com/idea/
- java 1.8.0_171 官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
1.java练习,编写一个JAVA程序从MYSQL数据库中读取出一张表并且显示在命令窗口中。
1.1 检查MYSQL数据库是否安装成功
在命令行输入 mysql -uroot -p 检查电脑中mysql是否安装成功。
1.2 检查java是否已经配置成功
在命令行输入java -version 以检查java环境是否配置成功:
1.3 创建Idea项目
1.3.1 下载对应版本的mysql数据库连接的jdbc
相信大家和我一样,肯定会有这么一个疑问:java连接数据库为什么还需要单独加载jdbc?那我们就不得不讲述一下jdbc所要执行的功能:
JDBC是一种执行sql语句的java API,可以为多种关系数据库提供统一访问,它由一组用Java编写的类和接口组成,是java访问数据库的标准规范;另外JDBC还提供了一种基准,用户可以根据 这个构建更高级的类和接口,使数据库开发人员可以编写数据库应用程序。
JDBC需要连接驱动,驱动是两个设备进行通信,满足一定数据通信格式,数据格式由设备供应商规定,设备供应商为设备提供驱动软件,通过软件可以和该设备进行通信。
好了现在我们正式开始下载我们的jdbc,在这之前,一定要查看一下自己电脑mysql的版本,例如我的版本使8.0.11,所以我们就进入网站 https://mvnrepository.com/search?q=connector其界面如下所示:
在搜索框输入 connector然后点击search,可以看到第一个返回的结果就是我们需要的jdbc了,不多我们需要下载和我们mysql对应的版本。点击第一个即可进入选择版本的网页,如下所示:
选择好版本下载即可。
1.3.2 创建项目并且加载jdbc
创建项目
打开Idea 依次点击File—new-----Project-----java-----Project SDK-----Next
加载jdbc
依次点击File-----Project Structure-----选择右侧的Dependence-----点击右侧加号-----选择JARs or directories-----选择自己的jdbc jar包即可。
添加完成之后,则会出现如下界面:
然后在我们刚刚添加的jar包前边的复选框选中即可。
1.4代码书写
由于要对于数据库进行操作,于是我对于数据库的操作单独封装了一个java类,这样我在对于数据库操作的时候,我就不用重写很多代码了,以下就是我封装的增删查改的数据库操作类DBoper。
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created with IntelliJ IDEA.
* User: kingback
* Author:king@王延凯
* Date: 2019/6/15
* Time: 13:51
* Description: No Description
*/
public class DBoper {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
//打开连接
public Connection getConn(String server,String dbname,String dbuser,String dbpwd){
String DRIVER = "com.mysql.cj.jdbc.Driver";
String URL = "jdbc:mysql://"+server+":3306/"+dbname+"?user="+dbuser+"&password="+dbpwd+"&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false";
try{
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL);
System.out.println("connect success!!!");
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
//关闭连接
public void closeAll(){
try{
if(rs != null){
rs.close();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(ps != null){
ps.close();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(conn != null){
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
}
}
//执行sql语句,可以进行查询
public ResultSet executeQuery(String preparedSql,String []param){
try{
ps = conn.prepareStatement(preparedSql);
if(param != null){
for (int i = 0; i < param.length; i++) {
ps.setString(i + 1, param[i]);
}
}
rs = ps.executeQuery();
}catch(SQLException e){
e.printStackTrace();
}
return rs;
}
//执行sql语句,增加,修改,删除
public int executeUpdate(String preparedSql,String[]param){
int num = 0;
try{
ps = conn.prepareStatement(preparedSql);
if(ps != null){
for (int i = 0; i < param.length; i++) {
ps.setString(i + 1, param[i]);
}
}
num = ps.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
}
return num;
}
//执行sql语句,进行删除 delete
public void Delete(String sql){
}
//执行sql语句,进行插入 insert
public void Insert(String sql){
try{
Statement statement=conn.createStatement();
statement.execute(sql);
}
catch (Exception e) {
e.printStackTrace();
}
}
//执行sql语句。进行修改 update
public void Update(String sql){
}
/**
* 执行查询
*
* @param sql 传入的预设的 sql语句
* @param params 问号参数列表
* @return 查询后的结果
*/
public List<Map<String, Object>> execQuery(String sql, Object[] params) {
try {
PreparedStatement pstmt = conn.prepareStatement(sql);// 获得预设语句对象
if (params != null) {
// 设置参数列表
for (int i = 0; i < params.length; i++) {
// 因为问号参数的索引是从1开始,所以是i+1,将所有值都转为字符串形式,好让setObject成功运行
pstmt.setObject(i + 1, params[i] + "");
}
}
// 执行查询
ResultSet rs = pstmt.executeQuery();
List<Map<String, Object>> al = new ArrayList<Map<String, Object>>();
// 获得结果集元数据(元数据就是描述数据的数据,比如把表的列类型列名等作为数据)
ResultSetMetaData rsmd = rs.getMetaData();
// 获得列的总数
int columnCount = rsmd.getColumnCount();
// 遍历结果集
while (rs.next()) {
Map<String, Object> hm = new HashMap<String, Object>();
for (int i = 0; i < columnCount; i++) {
// 根据列索引取得每一列的列名,索引从1开始
String columnName = rsmd.getColumnName(i + 1);
// 根据列名获得列值
Object columnValue = rs.getObject(columnName);
// 将列名作为key,列值作为值,放入 hm中,每个 hm相当于一条记录
hm.put(columnName, columnValue);
}
// 将每个 hm添加到al中, al相当于是整个表,每个 hm是里面的一条记录
al.add(hm);
}
return al;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//this.close(this.rs,pstmt, conn);
//closeAll();
}
return null;
}
}
接下来我将我的主函数那部分的代码展示一下,在该函数内我调用了上边封装好的DBoper类来对数据库进行操作,这样也使这部分代码变得整洁,易读。
import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Created with IntelliJ IDEA.
* User: kingback
* Author:king@王延凯
* Date: 2019/6/28
* Time: 16:03
* Description: No Description
*/
public class test {
public static void main(String[] args) {
//初始化连接变量,用来存储数据
String server="localhost";
String dbname="words";
String dbuser="root";
String dbpwd="123456";
//实例化一个数据库连接类
DBoper dBoper=new DBoper();
//链接数据库
dBoper.getConn(server,dbname,dbuser,dbpwd);
//初始化数据库结果参数
ResultSet rs = null;
ResultSet resultSet=null;
//执行查询操作:
String sql_test="select * from cet";
resultSet=dBoper.executeQuery(sql_test,null);
try {
while (resultSet.next()){
String id=resultSet.getString(1);
String word=resultSet.getString(2);
String chinese=resultSet.getString(3);
String sent=resultSet.getString(4);
System.out.println(id+" "+word+" "+chinese+" "+sent);
}
} catch (SQLException e) {
e.printStackTrace();
}
//调用数据库连接类的方法,关闭数据库连接
dBoper.closeAll();
}
}
1.5 运行结果截图:
1.6 总结
这次练习让我明白了jdbc工作原理、如何在java项目中如何添加数据库连接的jdbc以及对于数据库的简单操作。我相信在不断的练习中,我会一步一步成长的。加油!!!