一、需要用到的工具:
(1)本文使用的编译器是idea,下载链接,建议用迅雷下载:
https://download.jetbrains.com.cn/idea/ideaIU-2021.1.1.exe
提示:下载的软件刚开始免费试用30天之后需要收费,这里对于如何免费使用此软件,不再赘述,请自行百度。建议使用跟我一样的编译器操作
(2)使用的数据库是mysql数据库,百度网盘链接
https://pan.baidu.com/s/159uDdczQW_LvRtnYwYkuWA
提取码:aa8e
(3)还需要mysql驱动:
链接:https://pan.baidu.com/s/1TsXIIZg_elgW7SGonsSj_A
提取码:evjd
提醒一下,如果之前有自己装过mysql数据库的话,这里的建议是:卸载,因为每个人的情况不同,如果你出问题了,我也无法给出解决方案。这里附带一个卸载软件吧geek:卸载完后要重启!!!别忘了
链接:https://pan.baidu.com/s/15XvbokNa_QTtq0pQMagDhw
提取码:mhri
该软件打开即用,无需安装,在geek里找到mysql
,然后右键选择卸载,卸载完后,这个软件会自动查找遗留在注册表的残留,稍微等等,然后选择删除就行()
二、环境配置:
1.安装idea编辑器并配置环境:
刚开始一路next就行了,注意选择安装的位置,别再当c盘战士了。。。。:
这里跟我一样选:
然后一路next,等他安装好,然后打开,接下来就是同意协议什么的。。。
选择dont send
选择试用:
直接new project
然后就到了下面的界面,咱们要创建的时java project,但是idea没有设置对应的jdk,咱们需要自己弄
点击那个小箭头,就会看见如下选项,这里直接选择download jdk,
然后会看见如下选项,这里直接点击download就行了,等待他下载完后,继续点击next:
给你的项目起个名字:
界面大概是这样的:
接下来创建一个package,鼠标点击src,然后鼠标右键点击,选择new,会出现下图这样的,然后选择package,并起个名字,这里我名字是test
接下来在test这个package里面创建一个java文件,操作跟刚刚类似,鼠标点击test,然后鼠标右键点击,选择new,然后选择java class,并起个名字,这里我名字是ttt,然后按回车就行
最终大概就是这样的,要运行的话,鼠标右键,然后选择运行就行,或者ctrl+shift+F10:
idea基本操作就是这样了,idea有很多非常方便的功能,这里就不一一赘述了。
2.导入mysql驱动(mysql jar包),
点击file-----点击project structure,出现类似如下界面(咱们可能不一样):
选择左边一栏的Libraries,然后点那个+,选择java
这时候选择刚刚下载的MySql Connector Java 5.1.23目录下的jar文件,然后点击ok即可:
然后继续点击ok,这时你会看见左边的一栏里出现了刚刚导入的包
这就证明导入成功了。
3.接下来我们安装mysql数据库,打开安装包,刚开始没什么好说的,next就行,然后到这一步,要选择typical,然后install,安装过程中会出现广告(就是这个公司推荐他们enterprise版本。不用管点击next就行)
点击finish,然后会进入设置界面(这是最重要的一部分)
点击next
跟下图选一样的,然后next
跟下图选一样的,选择第一个,然后next
跟下图选一样的,然后next
继续next
继续next
下图,这个地方是设置你的端口,默认为3306,一般情况不修改,如果你要修改的话,要记住自己的端口号,
然后next
下面这一步非常重要,跟我选一样的,一定要看清楚,选最后一个,选择的是utf-8:弄完后点击next
下面也是跟我选一样的,然后next:
下面是设置root用户的密码,我这里设置的是333,这里要激活root用户的远程访问,方便其他的数据库管理工具远程访问
出现下图表示安装成功:
成功:
三、JDBC数据库连接:
JDBC编程大致分为这六步(其实没什么难得,就是套模板):
1.注册驱动(告诉java程序,即将要连接的是哪个品牌的数据库)class.forname(“com.sql.jdbc.”)
2.获取连接(表示JVM进程和数据库进程之间的通道打开了,使用完之后要关闭通道)Connection conn = DriverManager.getConection()
3.获取数据库操作对象(专门执行SQL语句的对象)
Statement stat = conn.getStatement
4.执行SQL语句(DQL,DML。。)
5.处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集)
6.释放资源(使用完资源后,一定要关闭资源,java和数据库之间属于进程间的通信)
下面这段代码就是模板了,你完全可以把下面的代码,直接copy到你的代码里,然后修改相应的东西就行了
Connection conn = null;
Statement stat = null;
ResultSet rset = null;
try {
Class.forName("com.mysql.jdbc.Driver");//注册驱动
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","333");
//连接驱动,这里在连接数据库的时候需要注意了,需要将3306改为你自己的端口,
//后面的两个参数分别 是登录数据库的用户名和密码,要改成你自己的。
//如果你一直在跟我照做的话,就不用设置了
stat = conn.createStatement();//获取数据库操作对象
String sql = "你想要执行的sql语句";
rset = stat.executeQuery(sql);//这个时候就获取到了数据库的查询结果集,
//然后就可以查询了,稍后我会再做讲解
} catch (Exception e) {
e.printStackTrace();
}finally{
if(stat!=null)
{
try {
stat.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(rset!=null)
{
try{
rset.close();
}catch(SQLException e)
{
e.printStackTrace();
}
}
}
四:数据库操作,
table长这样:
例1、获取员工工资最小值:
public String Min() throws EmptyException {
String rest="";
try {
stat = conn.createStatement("select * from emp where sal=(select min(sal) from emp);");
//执行对应的sql语句
resultSet = stat .executeQuery();//获得查询结果集
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();//通过查询结果集获得数据
int column = resultSetMetaData.getColumnCount();//得到获取的数据有多少列(多少个属性),方便遍历
if(resultSet.next()) //这个地方其实也是模板,记住就好
{
for(int i=1;i<=column;i++)
{
String s = resultSetMetaData.getColumnName(i); //得到对应的行的数据
if(s.equals("No"))s="工号";
if(s.equals("Name"))s="姓名";
if(s.equals("Birthday"))s="出生日期";
if(s.equals("Email"))s="Email";
if(s.equals("Sal"))s="工资";
rest+=s+":"+resultSet.getString(i)+"\n";
}
}
if(rest.equals(""))
{
throw new EmptyException();
}
else return rest;
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
if(stat !=null)
{
try {
stat .close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(resultSet!=null)
{
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
return rest;
}
如果是获得最大值,那么就小改下sql语句即可。
例二 查询全体员工数据:
arraylist理解成数组就行,这里的返回值就是。把每个人的所有信息变为字符串数组,然后把每个字符串数组放入数组里返回,这么理解就行了
public ArrayList<String[]> query_ALL()
{
ArrayList<String[]> arrayList = new ArrayList<>();
try {
stat = conn.createStatement("select * from emp");//模板
resultSet = stat .executeQuery();//模板
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();//通过查询结果集获得数据
int column = resultSetMetaData.getColumnCount();//得到获取的数据有多少列,方便遍历
int k = 0;
while (resultSet.next()) //也可以理解为模板,有想真正理解的自行百度吧,就是个类似迭代器的东西
{
String[]strs = new String[5];//因为有5个属性所以字符串数组大小为5
k=0;
for(int i=1;i<=column;i++) //就是循环一个人的所有信息
{
strs[k]=resultSet.getString(i); //得到对应列的内容
k++;
}
arrayList.add(strs);//将这个人的全部信息,放入到数组里面,然后接着看下一个人
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
if(stat !=null)
{
try {
stat .close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(resultSet!=null)
{
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
return arrayList;
}
例三:删除(这个就比较简单了,一看就懂,纯套模板)若删除成功返回true,否则返回false
public void delete(int No) throws NotFoundNoException {
boolean success= false;
try {
stat = conn.createStatement("delete from emp where No="+No);
success = stat .execute();
} catch (SQLException throwables) {
throw new NotFoundNoException("");
}
}
例四:修改(也简单):
这里if的意思是:当用户选择了要改变的属性时,程序需要知道要修改哪一部分,所以通过这种方式判断
sql语句该怎么写
public void update(String item,String text,int No) throws NotFoundNoException {
try {
String s=null;
if(item.equals("工资"))
{
stat = conn.createStatement("update emp set sal="+"text where no="+No);
stat .execute();
}else if(item.equals("电子邮箱"))
{
stat = conn.createStatement("update emp set email="+"text where no="+No);
stat .execute();
}
else{
stat = conn.createStatement("update emp set birthday="+text+" where no="+No);
stat .execute();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
throw new NotFoundNoException("");
}
}
例五:插入,也很简单,就是构造SQL语句的时候需要注意一下,可能会眼花
public void insert(String Name,String Birthday,String Email,int Sal)
{
try {
String sql = "insert into emp (name,birthday,email,sal) values(" +Name+ "," +Birthday+ "," +Email+ ","+ Sal+ ")";
stat = conn.createStatement(sql);
stat .execute();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
也许有人想知道如何通过图形化界面控制数据库,那么请看我之前的文章,其实就是一个思路的问题https://blog.csdn.net/m0_46261647/article/details/116499560
其实在操作数据库的时候,用preparedstatement其实更好(涉及到数据库安全的问题),不过由于时间原因,就先不写了,有兴趣的朋友可以自行百度。
第一次写这么长的文章,虽然感觉有点繁琐,但还是值得的,文章中的内容可能有错误的地方,望大家指出