java基础——JDBC与MySQL数据库

                JDBC与MySQL数据库

写博客是一个好习惯,可以方便自己查阅遗忘的知识,还是希望自己能够坚持下去。前段时间因为兴趣原因把郭大神的第二行代码看完了,现在觉得java有必要重新拾起来了。这一次我来聊聊JDBC与MySQL入门的那些事吧,为自己的学习打个卡!
注:这里并非讲解数据库原理,而是讲解如何在java程序中使用JDBC提供的API和数据库进行信息交互。

MySQL数据库管理系统
简称MySQL,是世界上最流行的开源数据库管理系统之一。
1.下载
MySQL是开源项目,这里可以选择的下载地址是MySQL
点击Products,然后点击MySQL CommunityEdition。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.安装,就不赘述了。

启动MySQL数据库服务器

1 启动
MySQL是一个网络数据库管理系统,可以使远程的计算机访问它所管理的数据库。安装了MySQL后,需要启动MySQL提供的数据库服务器,以便使远程的计算机可以访问它所管理的数据库。
注意:这里的数据库启动之前必须进行安全初始化,在命令行进入MySQL安装目录的bin子目录,输入“mysqld–initialize-insecure”命令。
在这里插入图片描述

作用是初始化data目录。并授权一个无密码的root用户,执行成功以后,mysql安装目录下多出一个data子目录。初始化后,在mysql安装目录的bin子目录下输入“mysqld”启动数据库服务器,3306是该数据库服务器默认的使用端口号,启动成功后,该数据库服务器将占有当前MS-DOS窗口。还有就是启动后无任何提示。
需要注意的是,,直接关闭mysql数据库服务器所占用的命令行窗口不能直接关闭MySQL数据库服务器,可以使用操作系统的任务管理器(按下ctrl+shift+esc组合键)来关闭数据库服务器。之后才能在命令行窗口重新启动MySQL数据库服务器。
2.root用户
数据库服务器启动后,MySQL默认授权可以访问该服务器的用户只有一个,名字是root,密码是空,应用程序以及mysql客户端管理工具软件都必须借助mysql授权的用户来访问数据库服务器。可以建立多个用户。
mysql数据库服务器的root用户默认没有密码,如何修改呢?
需要使用mysqladmin命令,使用格式如下:
在这里插入图片描述

进入mysql的bin子目录下执行命令,将提示输入用户的当前密码,由于初始密码是无,,所以按下Enter建即可。在命令行里直接按Enter表示无密码。默认是无密码。。

这里吧,我想插一点。就是关于下载数据库以及建立连接遇到的问提。因为我吧。很久以前有接触过一点点mysql,所在在我的电脑上有存在使用mysql的记录(没卸干净)。这也导致我在重装时遇到不少困难。

  1. mysql服务有建立过,但是之前的Service没有删除。导致我重安装后,命令行里始终无法启动MySQL数据库服务器。后来查了资料,发现是mysql服务的可执行文件路径还是之前的路径。这就需要修改。如何修改?
    这里有链接。修改mysql可执行文件路径

  2. mysql曾经没有用过,电脑上没有安装过mysql服务。可以参考下面的连接。安装mysql服务

  3. 还有就是我曾经遇到过的问题,3306默认的端口被别的服务占用了。可以参考下面的。解决端口占用问题
    注册表和计算机管理都可以在自己的电脑上搜索到。。
    注册表:我们直接按快捷键【WIN+R】打开【运行】弹出窗,在输入框输入【regedit】命令,然后点击【确定】或者按【Enter】回车键
    计算机管理:运行compmgmt.msc也可以打开计算机管理或使用快捷键windows+R打开‘运行’程序,输入compmgmt.msc就可以打开计算机管理

MySQL客户端管理工具
就是在MySQL数据库服务器上建立数据库的软件,可以下载GUI的mysql管理工具,
并使用该工具在mysql服务器上创建数据库,和表。
可以在搜索引擎中,寻找客户端管理工具,,可以登录 下载适用版本,笔者用的是Navicat for MySQL。
注意这里的数据库管理工具必须和数据库服务器建立连接才能操作。
1建立连接
启动Navicat for MySQL后,单击界面的“连接”,出现对话框。
在对话框输入如下信息。

  1. 连接名:super-csdner

  2. 主机名:localhost

  3. 端口:3306

  4. 用户名:root

  5. 密码:有就填写,没有就不需要。
    输入完成,然后确认就可以了。数据库服务器就建立起了super-csdner的连接。新建连接后,主界面的左侧就会出现新建立的名字。
    在新建立的连接上右击,选择“打开连接命令”就okk!
    2.建立数据库
    在主界面上选择一个连接,例如super-csdner,右击,选择“打开连接命令”,在super-csdner右击,选择新建数据库,,填入信息。
    3.创建表(也可以使用SQL语句创建)
    右击数据库,右击表选项,选择“创建表”,弹出表的对话框,在对话框中输入表的列名,数据类型。其中number是主键,数据库原理有介绍,并将该表存为mess的表。
    单击表,可以展开表,就可以对表进行操作了。

                            JDBC
    

JDBC是一种用于执行SQL语句的java API,JDBC API提供了一个标准接口,用于与任何关系数据库管理系统进行交互。

为了使java编写的程序不依赖具体的数据库,java提供了专门操作数据库的API,即是JDBC。JDBC操作不同的数据库仅仅是连接方式上的差异而已。使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库。
操作如下:

  1. 与一个数据库建立连接。

  2. 向一个连接的数据库发送SQL语句。

  3. 处理SQL语句返回的结果。

    		   连接数据库
    

MySQL数据库服务器启动后,应用程序为了可以和数据库交互信息,要先和MySQL数据库服务器上的数据库建立连接。
连接数据库的 方式是:加载JDBC-数据库驱动(即就是用JAVA语言编写的数据库驱动) 即就是JDBC调用本地的JDBC-数据库驱动和相应的数据库建立连接。
java运行环境将JDBC-数据库驱动转换为DBMS所使用的专用协议来实现和特定的DBMS交互信息。

使用JDBC-数据库驱动方式和数据库建立连接需要两个步骤:

  1. 加载JDBC-数据库驱动
    windows版本
    下载安装即可。将解压后的文件复制到JDK的拓展目录中,例如E:\jdk1.8\jre\lib\ext。
    在下载JDK时,一般也会有一个JRE,最好也将该驱动复制到jre\lib\ext中去,保证即使启动该环境运行程序,也会有需要的驱动。
  2. 和指定的数据库建立连接
    应用程序负责加载的JDBC-MySQL数据库驱动的代码:
    在命令行输入ipconfig可以获得本机的ip地址。
 try{
 Class.forName(com.mysql.jdbc.Driver);
 }
 catch{ Exception e){
 }


  1. 连接数据库
    java.sql包中的DriverManager类有两个用于建立连接的类方法。
    Connection getConnection(java.lang.String,java.lang.String ,java.lang.String )
    Connection getConnection(java.lang.String )
    返回一个Connection对象。应用程序要和MySQL数据库服务器管理的数据库students建立连接,而有权力访问数据库students的用户的id和密码是root,密码是自己设置的。使用第二种方式的代码如下:
Connection con;
String url=
“jdbc:mysql:localhost:3306/students?user=root&password=****&useSSL=true";
try{
con=DriverManager.getConnection(url);
}
catch(Exception e)
{
}

密码是自己设置的。
第一种方式:

Connection con;
String url=
“jdbc:mysql:localhost:3306/students? useSSL=true";
String user="root";
String  password="***";
try{
con=DriverManager.getConnection(url,user,password);
}
catch(Exception e)
{
}

一旦和数据库建立连接,就可以通过SQL语句和该数据库的表交互信息。

  1. 注意汉字问题,如果数据库中有汉字,在建立连接时需要额外多加一个参数characterEncoding 取值gb2312或者utf-8;
String url=
“jdbc:mysql:localhost:3306/students? useSSL=true&charaterEncoding=utf-8";
                           查询操作

1.向数据库发送SQL查询语句。
首先使用Statement声明一个SQL语句对象,让已经创建的con对象调用方法createStatement()创建这个SQL语句对象。
代码:

try{
Statement sql=con.createStatement();
{
catch(){
}

2.处理查询结果

ResultSet rs=new sql.executeQuery("select * from students");

ResultSet对象由按列组织的数据行构成。例如
内存的结果集对象 rs的列数是4列,刚好与表的列数一样。
而对于

ResultSet rs=new sql.executeQuery("select name,height from students");
内存的结果集对象 rs的列数是2列。name和height列。

ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,获得一行数据后,ResultSet对象可以调用getXXX方法获得字段值,列值,将位置索引传给getXXX方法的参数。
无论字段是什么属性,总可以使用getString(int columnIndex)返回字段值的串表示。
3.关闭连接

con.close()
		 接下来一个实例体验体验

顺序查询:是指ResultSet对象一次只能看到一个数据行,使用next()方法移动到下一个数据行,next()方法最初的位置,就是游标位置,位于第一行的前面,next()方法向下移动游标。移动成功返回true。

package 顺序查询; 
import java.sql.Connection;
 import java.sql.DriverManager;
  import java.sql.ResultSet;
   import java.sql.SQLException;
    import java.sql.Statement;
     import java.util.Date; 
     public class Example11_1 {
public static void main(String [] args)
{
 Connection con=null;
 Statement sql;
 ResultSet rs;
 try{
  Class.forName("com.mysql.cj.jdbc.Driver");
  
 }
 catch(Exception e)
 {}
  String uri="jdbc:mysql://localhost:3306/students?useSSL=true&serverTimezone=UTC";
  String user="root";
  String password="123456";
  try{
   
   con=DriverManager.getConnection(uri,user,password);
   
  }
  catch(SQLException e)
  {
   e.printStackTrace();
  }
  try{
   
   sql=con.createStatement(); 
   rs=sql.executeQuery("select * from students");
   while(rs.next())
   {
    String number=rs.getString(1);
    String name=rs.getString(2);
    Date date=rs.getDate(3);
    float height=rs.getFloat(4);
    
    System.out.printf("%s\t",number);
    System.out.printf("%s\t",name);
    System.out.printf("%s\t",date);
    System.out.printf("%.2f\n",height);
   }
   con.close();
  }
  catch(Exception e1)
  {
   System.out.println(e1);
  }
 }
} 	

运行结果:在这里插入图片描述
在数据库里的表是

在这里插入图片描述

感想:我的天啊!做这个实例的时候!我真的要爆炸了。之前一直在报错java.lang.NullPointerException,我找了半个小时错误。鬼知道是什么。。。最后调试着找出错误:java.sql.SQLException: The server time zone value ‘?й???’ is unrecognized or represents more than one time zone。百度才知道这是MySQL最新版驱动必须设置的时区。还有就是新版驱动的名称也改了。
总结一下:
1.新版驱动的名字是:com.mysql.cj.jdbc.Driver
2.设置时区问题

  1. 解决办法1
String uri="jdbc:mysql://localhost:3306/students?useSSL=true&serverTimezone=UTC";

同时可以参考链接新版加载驱动修改处

好啦,就写到这吧。再见。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我会尽量回答你的问题。关于Java连接MySQL数据库实现登录注册功能,以下是一个简单的实现步骤: 1.下载并安装MySQL数据库,安装完成后,创建一个名为“test”的数据库。 2.下载并安装JDBC驱动程序,将下载的JDBC驱动程序的jar包添加到项目的classpath中。 3.编写Java代码,实例化JDBC驱动程序,连接MySQL数据库,创建用户表,实现用户的注册和登录功能。 以下是一个简单的Java代码示例: ``` import java.sql.*; public class JdbcTest { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "123456"; // 注册JDBC驱动程序 try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("找不到JDBC驱动程序!"); e.printStackTrace(); return; } // 连接MySQL数据库 Connection conn = null; try { conn = DriverManager.getConnection(url, username, password); } catch (SQLException e) { System.out.println("连接MySQL数据库失败!"); e.printStackTrace(); return; } // 创建用户表 Statement stmt = null; try { stmt = conn.createStatement(); String sql = "create table if not exists user(id int primary key auto_increment, username varchar(50) not null, password varchar(50) not null)"; stmt.executeUpdate(sql); } catch (SQLException e) { System.out.println("创建用户表失败!"); e.printStackTrace(); return; } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 用户注册 PreparedStatement pstmt = null; try { String sql = "insert into user(username, password) values (?, ?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "user1"); pstmt.setString(2, "123456"); pstmt.executeUpdate(); } catch (SQLException e) { System.out.println("用户注册失败!"); e.printStackTrace(); return; } finally { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 用户登录 ResultSet rs = null; try { String sql = "select * from user where username=? and password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "user1"); pstmt.setString(2, "123456"); rs = pstmt.executeQuery(); if (rs.next()) { System.out.println("用户登录成功!"); } else { System.out.println("用户名或密码错误!"); } } catch (SQLException e) { System.out.println("用户登录失败!"); e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 关闭数据库连接 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们先注册了JDBC驱动程序,然后连接了MySQL数据库,接着创建了一个名为“user”的用户表,实现了用户的注册和登录功能。你可以根据自己的需求修改代码中的数据库连接信息和SQL语句。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devin Dever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值