JDBC编程---JDBC基础以及连接MySql数据库

一:JDBC基础

   JDBC全称为 Java Database Connectivity。即为java数据库连接,它是一种可执行SQL语句的API。程序可通过JDBC连接到关系型数据库,并且使用结构化查询语言(SQL数据库标准的查询语言)来完成对数据库的查询和更新。

与其他数据库编程环境相比,JDBC为数据库提供了标准的API。所以使用JDBC的数据库可以跨平台开发,如果全部使用标准的SQL语句,也可以说夸数据库开发。也就是说,如果使用一个JDBC开发一个数据库应用,那么该应用既可以在windows下运行,也可以在linux下运行,既可以使用Mysql数据库,也可以使用oracle数据库,而程序无须进行修改

1 JDBC简介

通过使用JDBC,就可以使用同一种API访问不同的数据库,换而言之,有了JDBC的API之后,你就不用为Sbase数据库学习一组API,又为Oracle数据库学习另一组API,开发人员使用标准的API编写程序,然后根据不同的数据库,加入不同的数据库驱动即可工作。当程序员使用JDBC编程时只要面向标准的JDBC的API编程即可,当进行数据库切换时候只需要更换不同的实现类即可,这就是面向接口编程的典型!

 

  • 与数据库建立连接
  • 执行SQL语句
  • 获得SQL语句的执行结果

通过这三个步骤就可以通过JDBC操作数据库。

2 JDBC驱动程序类型

数据库驱动程序是JDBC和数据库之间的转换程序,数据库驱动负责将JDBC的调用映射成数据库的调用,

大部分是数据库都应用JDBC驱动程序例如Oracle和Sybase等,当连接特定的数据库时候,必须使用相应的数据库程序,但是对于一些数据的数据库,例如Access,可能使用JDBC-ODBC桥进行访问,关于ODBC就是JDBC的前辈了,这里不加以阐述!

二 JDBC编程步骤

  1. 加载数据库驱动 
    Class.forName(driverClass)
    
    //mysql加载驱动
    
    Class.forName("com.mysql.jdbc.Driver")
    
    //Oracle加载驱动
    
    Class,forName("oracle.jdbc.driver.OracelDriver")

     

  2.    获取数据库连接
    DriverManger.getConnection(String url,String user,String pass)
     
  3. 通过connection 创建Statement对象,Connetion创建Statement的方法有如下三个 
crateStatement()//创建其对象
prepareStatement(String sql) //根据sql语句创建预编译的statement对象
prepareCall(String sql) 根据sql语句创建callstatement

    4.使用statement对象来执行sql语句,也有三种方式

1
excute //执行任何语句,但是比较麻烦
excuteUpdate()//主要执行DML和DDL语句,执行DML语句返回受影响的行数,执行DDL语句返回0
excuteQuery()//只用于查询语句,执行后放回查询的结果集ResultSet对象

  

   5.操作结果集,对于执行sql语句的查询语句,将要返回一个ResultSet对象,该对象保存Sql语句的查询结果,程序可以通过操作ResultSet来取得查询结果

 

三 以连接Mysql为例子

    private static  final String  PROP_FIlE= "database.ini";
    //数据库8.0以下url后面加?serverTimezone=GMT%2B8 ,
    private static  String mysqlURl          = "";
    private static  String mysqlUserName     = "";
    private static  String mysqlUserPassword = "";
    private static  String mysqlDriver       = "";

这里我们利用配置文件PROP_FILE来获取加载驱动参数,在项目中通常这么多

#数据库连接常用参数
mysqlURl = jdbc:mysql://localhost:3306/lvp_base?serverTimezone=GMT%2B8
mysqlUserName = root
mysqlUserPassword = 111111
mysqlDriver = com.mysql.cj.jdbc.Driver

对于Mysql的URL写法 jdbc:mysql://localname:port/databasename 

如果不知道你的数据库端口号,可以查看如下

 

然后加载配置,获取这些配置参数

 Properties properties = new Properties();
        try {
            properties.load(new FileInputStream(PROP_FIlE));
        } catch (IOException e) {
            e.printStackTrace();
        }
        mysqlDriver = properties.getProperty("mysqlDriver");
        mysqlURl    = properties.getProperty("mysqlURl");
        mysqlUserName = properties.getProperty("mysqlUserName");
        mysqlUserPassword = properties.getProperty("mysqlUserPassword");

然后我们加载驱动连接数据库


        // 注册驱动
        try {
            Class.forName(mysqlDriver);
        } catch (ClassNotFoundException e) {
            System.out.println("未能成功加载驱动程序,请检查是否成功导入驱动程序");
            e.printStackTrace();
        }
        //登录数据库
        try {
            System.out.println("读取配置信息:"+mysqlURl + "_" + mysqlUserName + "_" +mysqlUserPassword + "\t\n");
            connection =  DriverManager.getConnection(mysqlURl, mysqlUserName,mysqlUserPassword);
            System.out.println("连接数据库成功");
             return  true;

        } catch (SQLException throwable) {
            System.out.println("连接数据库失败");

            throwable.printStackTrace();

        }
        return false;

运行之后,我们可以看到运行成功

 

当然这样就连接成功了,我觉得不够直观,不过美观,我就用GUI界面操作连接更加直观化,这里我用Swing是java界面化开发语言,比AWT更出色,关于这部分我就不细说了。

//SWing 登录界面的GUI组件
    private JFrame jFrame = new JFrame();
    private JTextField userTextField = new JTextField(20);
    private JTextField passTextField = new JTextField(20);
    private JButton loginButton = new JButton("登录");

上面是界面的初始化,点击登录后输入账户和密码即可登录成功,这里用到的按钮的一个事件监听器,感觉就跟Qt的点击信号差不多意思,我就不瞎扯 了,哈哈哈,感觉就是!

  //为登录按钮添加事件添加器
        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                System.out.println(userTextField.getText() + passTextField.getText() +"," +mysqlUserName +mysqlUserPassword);
                if(userTextField.getText().equals(mysqlUserName) && passTextField.getText().equals(mysqlUserPassword))
                {
                    System.out.println("enter");
                  if(connectionFun())
                  {
                      JOptionPane.showMessageDialog(jFrame,"登录成功");
                  }else
                  {
                      JOptionPane.showMessageDialog(jFrame,"登录失败");

                  }
                }

            }
        });

运行结果展示如下

 

源码如下

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
import java.sql.Statement;
import java.sql.PreparedStatement;
import javax.swing.*;

/*
* 连接数据库的步骤如下
* 1 加载数据库驱动
*
*
*
* */
public class connect_test {


    private static  final String  PROP_FIlE= "database.ini";
    //数据库8.0以下url后面加?serverTimezone=GMT%2B8 ,
    private static  String mysqlURl          = "";
    private static  String mysqlUserName     = "";
    private static  String mysqlUserPassword = "";
    private static  String mysqlDriver       = "";

    //执行JDBC操作的对象
    private  Connection connection = null;
    private  Statement statement = null;
    //SWing 登录界面的GUI组件
    private JFrame jFrame = new JFrame();
    private JTextField userTextField = new JTextField(20);
    private JTextField passTextField = new JTextField(20);
    private JButton loginButton = new JButton("登录");
    public void initParam()
    {
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream(PROP_FIlE));
        } catch (IOException e) {
            e.printStackTrace();
        }
        mysqlDriver = properties.getProperty("mysqlDriver");
        mysqlURl    = properties.getProperty("mysqlURl");
        mysqlUserName = properties.getProperty("mysqlUserName");
        mysqlUserPassword = properties.getProperty("mysqlUserPassword");

        //为登录按钮添加事件添加器
        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                System.out.println(userTextField.getText() + passTextField.getText() +"," +mysqlUserName +mysqlUserPassword);
                if(userTextField.getText().equals(mysqlUserName) && passTextField.getText().equals(mysqlUserPassword))
                {
                    System.out.println("enter");
                  if(connectionFun())
                  {
                      JOptionPane.showMessageDialog(jFrame,"登录成功");
                  }else
                  {
                      JOptionPane.showMessageDialog(jFrame,"登录失败");

                  }
                }

            }
        });

        jFrame.add(userTextField, BorderLayout.NORTH);
        jFrame.add(passTextField);
        jFrame.add(loginButton,BorderLayout.SOUTH);
        jFrame.pack();
        jFrame.setVisible(true);

    }
    public boolean connectionFun()
    {

     
        // 注册驱动
        try {
            Class.forName(mysqlDriver);
        } catch (ClassNotFoundException e) {
            System.out.println("未能成功加载驱动程序,请检查是否成功导入驱动程序");
            e.printStackTrace();
        }
        //登录数据库
        try {
            System.out.println("读取配置信息:"+mysqlURl + "_" + mysqlUserName + "_" +mysqlUserPassword + "\t\n");
            connection =  DriverManager.getConnection(mysqlURl, mysqlUserName,mysqlUserPassword);
            System.out.println("连接数据库成功");
             return  true;

        } catch (SQLException throwable) {
            System.out.println("连接数据库失败");

            throwable.printStackTrace();

        }
        return false;
    }

 public  void CloseFun()
    {
        if(connection != null)
        {
            try {
                connection.close();
            } catch (SQLException throwable) {
                System.out.println("数据库关闭出现异常");
                throwable.printStackTrace();
            }
        }
    }

}

欢迎交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

漫天飞舞的雪花

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

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

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

打赏作者

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

抵扣说明:

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

余额充值