框架前连接数据库的准备:通过JDBC连接MySQL

在java中连接数据库有多种方法,但是基本都需要对应的驱动jar包。其实万法不离其宗,学会一种,其他也就基本会了

今天主要讲通过JDBC连接MySQL,其余的后续有机会会详细讲

开发环境: eclipse+MySQL

JDBC简介:

JDBC(Java DataBase Connectivity, java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。有了JDBC,可以方便的在Java语言中使用SQL语言,从而使Java应用程序或Java Applet可以实现对分布在网络上的各种关系数据库的访问。

1. 导入jdbc驱动

①下载jdbc驱动 官网和网上或者学长都有,可以自己去找,一定要找对应的版本,因为在后续开发中,jar包的版本很重要 ②驱动导入工程直接把下载的jar包拖动到工程src文件夹里面 然后再把jar包添加到库里面

然后就可以在这里看到导入的jar包

 

2. 数据库管理

连接数据库的方法单独封装成类,这里提供了三种连接方法 先看一下目录结构

DBConfig.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbc_test
username=root
pwd=1234

DBUtil.java

package connect;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
    //直连数据库
    public Connection getConnection(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
          return DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_test","root","1234");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(SQLException e){
            e.printStackTrace();
        }
        return null;
    }

    //通过参数连接数据库
    public Connection getConnection(String url,String username,String pwd){
            try{

                Class.forName("com.mysql.jdc.Driver");
                return DriverManager.getConnection(url,username,pwd);
            } catch(ClassNotFoundException e){
                e.printStackTrace();
            }catch(SQLException e){
                e.printStackTrace();
            }
            return null;
    }   

    //通过配置文件DBConfig.properties连接数据库
    public Connection openConnection(){
          Properties prop=new Properties();
          String driver=null;
          String username=null;
          String url=null;
          String pwd=null;

        try{
         prop.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties"));
             driver=prop.getProperty("driver");
             url=prop.getProperty("url");
             username=prop.getProperty("username");
             pwd=prop.getProperty("pwd");
            Class.forName(driver);
            return DriverManager.getConnection(url,username,pwd);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(SQLException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }   

    //关闭数据库
    public void closeConn(Connection conn){     
         try {
            conn.close();
          } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("数据库关闭异常");
            e.printStackTrace();
          }
    }

}

3. 增删改查

Mysql数据库表

create table Users(
    id          int     primary key AUTO_INCREMENT,
    name        varchar(100),
    age         int,
    birthday    date    default '1994-5-6',
    money       int
)AUTO_INCREMENT = 1 ;

UserBean.java

package connect;

//封装userbean,并且定义接口
public class UserBean {

        private int id ;
        private String name ;
        private int age;
        private String birthday;
        private int money;


        public int get_id(){
            return id;
        }
        public void set_id(int id){
            this.id=id;
        }

        public String get_name(){
            return name;
        }
        public void set_name(String name){
            this.name=name;
        }

        public int get_age(){
            return age;
        }
        public void set_age(int age){
            this.age=age;
        }

        public String get_birthday(){
            return birthday;
        }
        public void set_birthday(String birthday){
            this.birthday=birthday;
        }

        public int get_money(){
            return money;
        }
        public void set_money(int money){
            this.money=money;
        }
}

UserDAO.java

package connect;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDAO {
        //创建insert方法
        public int insert(UserBean users)
        {
                int i=0;
                DBUtil util = new DBUtil();
                Connection  conn=util.openConnection();//创建数据库连接
                String sql = "insert into Users (id , name, age, birthday, money) values(?,?,?,?,?)";//定义sql语句
                PreparedStatement pstmt;
                try {
                    pstmt = (PreparedStatement) conn.prepareStatement(sql);
                    pstmt.setInt(1, users.get_id());
                    pstmt.setString(2, users.get_name());
                    pstmt.setInt(3, users.get_age());
                    pstmt.setString(4, users.get_birthday());
                    pstmt.setInt(5, users.get_money());
                    i = pstmt.executeUpdate();
                    pstmt.close();
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    try{
                        conn.rollback();
                    }catch(SQLException el){
                        el.printStackTrace();
                    }
                }finally{
                    util.closeConn(conn);
                }
                return i;

        }

        //创建delete方法通过name删除记录
        public int delete(String name) {
            DBUtil util = new DBUtil();
            Connection conn = util.openConnection();
            int i = 0;
            String sql = "delete from Users where Name='" + name + "'";
            PreparedStatement pstmt;
            try {
                pstmt = (PreparedStatement) conn.prepareStatement(sql);
                i = pstmt.executeUpdate();
                System.out.println("resutl: " + i);
                pstmt.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return i;
        }

        //创建update方法
        public int update(UserBean users) {
            DBUtil util = new DBUtil();
            Connection conn = util.openConnection();
            int i = 0;
            String sql = "update Users set age='" + users.get_age() + "' where name='" + users.get_name() + "'";
            PreparedStatement pstmt;
            try {
                pstmt = (PreparedStatement) conn.prepareStatement(sql);
                i = pstmt.executeUpdate();
                System.out.println("resutl: " + i);
                pstmt.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return i;
        }

        //创建list方法
        public Integer list() {
            DBUtil util = new DBUtil();
            Connection conn = util.openConnection();
            String sql = "select * from Users";
            PreparedStatement pstmt;
            try {
                pstmt = (PreparedStatement)conn.prepareStatement(sql);
                ResultSet rs = pstmt.executeQuery();
                int col = rs.getMetaData().getColumnCount();//列数
                System.out.println("============================");
                System.out.println("id\tname\tage\tbirthday\t\tmoney");
                while (rs.next()) {//一行一行输出
                    for (int i = 1; i <= col; i++) {
                        System.out.print(rs.getString(i) + "\t");//输出
                        if ((i == 2) && (rs.getString(i).length() < 8)) {//输出制表符
                            System.out.print("\t");
                        }
                     }
                    System.out.println("");
                }
                    System.out.println("============================");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
}

4. 测试

DBUtilTest.java

package connect;

public class DBUtilTest{

    public static void main(String args []){
        UserBean u = new UserBean();
        UserDAO  op= new UserDAO();

        u.set_id(3);
        u.set_name("asdf");
        u.set_age(66);
        u.set_birthday("2018-10-1");
        u.set_money(100);

        //增加
        op.insert(u);
        op.list();

        //修改
        u.set_age(99);
        op.update(u);
        op.list();

        //删除
        op.delete("asdf");
        op.list();
    }
}

5.IDEA使用JDBC连接数据库(MySQL)

下面再来看下导入jar的步骤(对应版本同上获取),网上此类资料很多,不详细赘述了

å¨è¿éæå¥å¾çæè¿°
写代码
//导入包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/*
 * 数据库连接
 */
public class Conn {
    public static void main(String[] args) {
        Connection con;
        //jdbc驱动
        String driver="com.mysql.cj.jdbc.Driver";
        //这里我的数据库是cxxt
        String url="jdbc:mysql://localhost:3306/demo?&useSSL=false&serverTimezone=UTC";
        String user="root";
        String password="1234";
        try {
            //注册JDBC驱动程序
            Class.forName(driver);
            //建立连接
            con = DriverManager.getConnection(url, user, password);
            if (!con.isClosed()) {
                System.out.println("数据库连接成功");
            }
            con.close();
        } catch (ClassNotFoundException e) {
            System.out.println("数据库驱动没有安装");

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

6.总结

JDBC的结构和特点

简单地说,JDBC能完成下列三件事:与一个数据库建立连接;向数据库发送SQL语句;处理数据库返回的结果。

JDBC是一种底层API,这意味着它将直接调用SQL命令。JDBC完全胜任这个任务,而且比其他数据库互联更加容易实现。同时它也是构造高层API和数据库开发工具的基础。高层API和数据库开发工具应该是用户界面更加友好,使用更加方便,更易与理解的。但所有这样的API将最终被翻译为底层API,如JDBC。目前两种基于JDBC的高层API正处在开发阶段。一个是SQL语言嵌入Java的预处理器;另一个是实现从关系数据库到Java类的直接映射。

JDBC包含两部分与数据库独立的API:面向程序开发人员的JDBC API和面向底层的JDBC Driver API。

  1. java.sql.DriverManager:处理驱动的调入并且对产生新的数据库连接提供支持;
  2. java.sql.Connection:代表对特定数据库的连接;
  3. java.sql.Statement:代表一个特定的容器,来对一个特定的数据库执行SQL语句;
  4. java.sql.ResultSet:控制对一个特定语句的行数据的存取。

其中java.sql.Statement又有两个子类型:java.sql.PreparedStatement用于执行预编译的SQL语句;java.sql.CallableStatement用于执行对一个数据库内嵌过程的调用。

面向地层的JDBC Driver API主要是针对数据库厂商开发数据库底层驱动程序使用的,一般情况下用于开发应用程序用不到这些类库。Java通过SQL包中定义的一系列抽象类对数据库进行操作,而实现这些抽象类并完成实际操作,则是由数据库驱动器Driver运行的。JDBC的Driver可分为以下4中类型:

  1. JDBC-ODBCBridge和ODBC Driver
  2. Native-API partly-Java Driver
  3. JDBC-Net All-Java Driver
  4. Native-protocol All-Java Driver

JDBC优缺点

  1. 可以对所以主流数据库进行统一访问(ACCESS,MySQL,Sql Server,Oracle);
  2. 极大地减少了程序操作数据库的复杂性;
  3. jdbc使用面向对象的方式操作数据,能更好的和Java语言衔接;
  4. jdbc可以直接调用数据库存储过程;
  5. jdbc操作数据库的效率很高; 
  6. 缺点就是不安全,因为你会把数据库的用户名和密码写入代码里,别人可以反编译便可以获取你的数据库信息。

Guess you like

Origin blog.csdn.net/lxqasn/article/details/107200585