本文涉及的有帮助的参考博客
整个JDBC的代码学习参考了JAVA核心编程卷Ⅱ以及下面这篇博客
在使用MySQL的时候出现的相关问题的处理方法
mysql忘记密码的处理
Windows安装MySql时出现“Failed to find valid data directory”的错误
mysql.infoschema@localhost does not exist
JAVA数据库编程
本文主要记录了如何在windows环境的IDEA平台使用jdbc访问本地的mysql服务器。
一、环境配置
1、MySQL服务
最常使用的是MySQL8.0版本和MySQL5.7版本。若未安装的可以根据网上的教程下载安装,下载地址如下:
https://dev.mysql.com/downloads/
安装好数据库后,考虑到是在本地使用的情况,还未实现远程连接,故ip地址可以不记(使用localhost即可),主要记住安装时使用的端口号,忘记了的可以通过在mysql使用SQL语句查询。
具体步骤:登入mysql->输入"use mysql;"切换到mysql数据库->输入"SHOW VARIABLES WHERE VARIABLE_NAME=‘port’;"即可查看端口号。
2、相关jar包
需要使用到mysql-connector-java.jar包,下载地址如下
https://mvnrepository.com/artifact/mysql/mysql-connector-java
下载完毕后,在对应的IDEA项目下,添加一个目录,命名为lib,并设为Resources Directory,将下载得到的jar包放入该目录下,并右击该jar包,将其"add as library"。具体步骤如下图所示:
创建目录
将lib目录设为Resources Root
将添加的jar包加入到library
至此基本的配置已基本实现,接下来可以进行编程了。
二、JAVA程序框架
1、连接
(1)三个基本参数:URL、USERNAME、PASSWORD
首先要通过java与本地的数据库建立起连接。连接会调用DriverManager类下的getConnection()方法,该方法返回一个Connection对象,这个对象将代表我们所建立的连接。调用getConnection方法,需要用到三个参数:url、username、password。
url:这是有固定格式的,使用jdbc连接数据库,其url满足特定的格式,为
jdbc:subprotocol:other stuff
subprotocol:用于选择连接到数据库的具体驱动程序。other stuff:随subprotocol不同而不同。
对于mysql,url的格式为:
jdbc:mysql://ip:port/db_name?parameter1=value1¶meter2=value2&…
ip:所连接数据库服务器所在主机的ip,由于是连接本地的mysql服务器,可以为localhost。port:数据库监听的端口。db_name:所访问的数据库的名字。parameter:需要传入的参数。
而username我们在此处使用root,password则是个人设置的。
(2)注册驱动器类
这个许多JDBC的JAR文件会自动注册,对于需要手动注册的,可以输入
Class.forname(strings); //strings:为驱动器类名
即可实现驱动器类的注册。
上述(1)、(2)部分的代码如下所示:
// 1.连接驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
//驱动类的名字一般都是固定的
// 2.获取连接
// 数据库用户名
String username = "root";
// 数据库密码
String password = "******";//填自己设定的password值
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
Connection conn = DriverManager.getConnection(url,username,password);
2、SQL语句编写与发送
主要的步骤就是:将所需要使用的SQL语句在代码中定义或者交互式地有使用者输入进来,主要是将相应的SQL语句定义为字符串,然后定义一个Statement对象,再调用executeQuery或executeUpdate方法将该语句发送到数据库服务器,并执行语句,再根据需求来决定是否处理返回的结果集。
代码部分如下(不涉及处理结果集的):
// 3.准备发送SQL
String sql = "insert into t_person values(null,'Adair',25,'T','1383838381','硅谷');";
PreparedStatement pstm = conn.prepareStatement(sql);
// 4.发送执行SQL
int update = pstm.executeUpdate();
// 5.(如果是查询语句,需要处理结果集)
// 6.关闭资源
pstm.close();
conn.close();
涉及处理结果集的代码如下:
String sql="select * from t_person";
PreparedStatement pstm=conn.prepareStatement(sql);
ResultSet rs =pstm.executeQuery();
while(rs.next()){
int personId1=rs.getInt("person_id");
String personName1=rs.getString("person_name");
int age1=rs.getInt("age");
String sex1=rs.getString("sex");
String mobile1 = rs.getString("mobile");
String address1 = rs.getString("address");
System.out.println("personId="+personId1+",personName="+personName1
+",age="+age1+",sex="+sex1+",mobile="+mobile1+",address="+address1);
}
rs.close();
pstm.close();
conn.close();
分析:
1、结果集的处理与否
·这取决于所输入的SQL指令,是否存在返回结果的情况。同时对于是否存在结果集这一事件,执行SQL语句调用的方法也需要注意:executeUpdate()方法不能用于会返回结果集的SQL语句,此时只能用executeQuety()方法。
2、结果集的处理方式
·当调用executeQuery()方法发送SQL语句,并存在返回的结果时,该方法会返回一个ResultSet类型的对象,对于此对象我们只能调用next()方法一条条地处理返回结果集中的表项。
3、关于Statement还是PreparedStatement
·可以上网去搜索相关的知识。
之前朋友有个大作业,需要微信小程序模块,而微信小程序模块中调用数据时,需要访问数据库,那时候还没学jdbc这个东西,现在回想或许可以用jdbc访问本地数据库以实现传输数据到微信小程序的功能。