热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

java基于jdbc连接mysql数据库功能实例详解

这篇文章主要介绍了java基于jdbc连接mysql数据库功能,结合实例形式详细分析了jdbc连接mysql数据库的原理、步骤、实现方法及相关操作技巧,需要的朋友可以参考下

本文实例讲述了java基于jdbc连接mysql数据库的方法。分享给大家供大家参考,具体如下:

一、JDBC简介

Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。它JDBC是面向关系型数据库的。

1、JDBC架构:

JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:

JDBC API: 提供了应用程序对JDBC的管理连接;

JDBC Driver API: 支持JDBC管理到驱动器连接;

JDBC API的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库;

JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源,该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序;

以下是结构图,它显示了驱动程序管理器方面的JDBC驱动程序和Java应用程序的位置:

2、常见的JDBC组件:

JDBC API提供了以下接口和类:

DriverManager: 这个类管理数据库驱动程序的列表,内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求,识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接;

Driver: 此接口处理与数据库服务器通信,很少直接与驱动程序对象,相反,使用DriverManager中的对象,它管理此类型的对象,它也抽象与驱动程序对象工作相关的详细信息;

Connection : 此接口与接触数据库的所有方法,连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象;

Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库,一些派生的接口接受除执行存储过程的参数;

ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据,它作为一个迭代器,让您可以通过移动它的数据;

SQLException: 这个类处理发生在一个数据库应用程序的任何错误.

二、连接JDBC需要掌握的基本知识

1、数据库的基本操作,

eg:Mysql的安装和基本操作(insert,delete,update,query)

2、java开发工具的使用,

eg:Eclipse/MyEclipse (包括mysql-connector-java-5.0.3-bin.jar的导入)

三、JDBC的连接及代码演示

1、JDBC连接工具类

1)、Configuration.java:可以从.xml文件中连接数据库的配置信息,需要引入dom4j-1.6.1.jar包

package cn.java.jdbc;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Configuration {
  private String url;
  private String driver;
  private String username;
  private String password;
  public Configuration() {
  }
  public Configuration(String url, String driver, String username,
      String password) {
    super();
    this.url = url;
    this.driver = driver;
    this.username = username;
    this.password = password;
  }
  public static Configuration getConfigure()
  {
    try {
      InputStream in = Configuration.class.getResourceAsStream("/db.xml");
      if (null!=in) {
        return load(in);
      }
      return null;
    } catch (DocumentException e) {
      e.printStackTrace();
      return null;
    }
  }
  private static Configuration load(InputStream in) throws DocumentException {
    SAXReader reader = new SAXReader();
    Document doc = reader.read(in);
    Element jdbc = doc.getRootElement();
    String url = jdbc.element("url").getText();
    String driver = jdbc.element("driver").getText();
    String username = jdbc.element("username").getText();
    String password = jdbc.element("password").getText();
    Configuration cfg = new Configuration(url, driver, username, password);
    return cfg;
  }
  public String getUrl() {
    return url;
  }
  public void setUrl(String url) {
    this.url = url;
  }
  public String getDriver() {
    return driver;
  }
  public void setDriver(String driver) {
    this.driver = driver;
  }
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
}

2)、db.xml:保存数据库的配置信息

<&#63;xml version="1.0" encoding="UTF-8"&#63;>

jdbc:mysql://localhost:3306/test
com.mysql.jdbc.Driver
root



3)、ConnectionFactory.java:JDBC连接工厂方法之一

package cn.java.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
  private static ConnectionFactory cOnnectionFactory=null;
  private static Configuration cOnfig=Configuration.getConfigure();
  private ConnectionFactory()
  {
    try {
    Class.forName(config.getDriver());
  } catch (ClassNotFoundException e) {
  }
  }
  public Connection getConnection() throws SQLException
  {
    Connection con=null;
    try {
      con=DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword());
      return con;
    }finally{
//     if (null != con) {
//       con.close();
//     }
    }
  }
  public static ConnectionFactory getInstance()
  {
    if (null==connectionFactory) {
      cOnnectionFactory=new ConnectionFactory();
    }
    return connectionFactory;
  }
}

4)、ConnectionFactory2.java:JDBC连接工厂方法之二

package cn.java.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class ConnectionFactory2 {
  private DataSource ds ;
  private static ConnectionFactory2 connectionFactory2 = null;
  private ConnectionFactory2() {
    MysqlDataSource myDS = new MysqlDataSource() ;
    myDS.setServerName("localhost");
    myDS.setDatabaseName("test");
    myDS.setPort(3306) ;
    myDS.setUser("root");
    myDS.setCharacterEncoding("utf-8");
    myDS.setPassword("");
    this.ds = myDS ;
  }
  public Connection getConnection() throws SQLException {
    Connection cOnn= null;
    try {
      cOnn= ds.getConnection() ;
      conn.setAutoCommit(false);
      return conn;
    } catch (SQLException e) {
      if (null != conn) {
        conn.close();
      }
      throw e;
    }
  }
  public static ConnectionFactory2 getInstance() {
    if (null == connectionFactory2) {
      connectionFactory2 = new ConnectionFactory2();
    }
    return connectionFactory2;
  }
}

5)、User.java:定义数据库表user中的id和name的bean类,其中id是自动增长的

package cn.java.jdbc;
public class User {
  private int id;
  private String name;
  public User() {
  }
  public User(int id, String name) {
    this.id = id;
    this.name = name;
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

6)、UserDao.java:user表的操作类,实现了insert、delete、update、query等方法

package cn.java.jdbc;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
  private PreparedStatement st = null;
  private ResultSet rs = null;
  public UserDao() {
  }
  public void insert( Connection con,String name) throws SQLException,IOException {
    String sql="insert into user(name) values(&#63;) ";
    try{
      st=con.prepareStatement(sql);
      st.setString(1, name);
      st.executeUpdate();
    }finally{
      if (null!=st) {
        st.close();
      }
    }
  }
  public void delete(Connection con,int id) throws SQLException,IOException {
    String sql="delete from user where id=&#63;";
    try{
      st=con.prepareStatement(sql);
      st.setInt(1, id);
      st.executeUpdate();
    }finally{
      if (null!=st) {
        st.close();
      }
    }
  }
  public void update( Connection con,int id,String name) throws SQLException,IOException {
    String sql="update user set name=&#63; where id=&#63;";
    try{
      st=con.prepareStatement(sql);
      st.setString(1, name);
      st.setInt(2, id);
      st.executeUpdate();
    }finally{
      if (null!=st) {
        st.close();
      }
    }
  }
  public User query(Connection con,int index) throws SQLException,IOException{
    User user=new User();
    String sql="select * from user where id=&#63;";
    try{
      st=con.prepareStatement(sql);
      st.setInt(1, index);
      rs=st.executeQuery();
      while (rs.next()) {
        user.setId(rs.getInt(1));
        user.setName(rs.getString(2));
        break;
      }
    }finally{
      if (null!=rs) {
        rs.close();
      }
      if (null!=st) {
        st.close();
      }
    }
    return user;
  }
  public List queryAll(Connection con) throws SQLException,IOException {
    List list=new ArrayList<>();
    String sql="select * from user";
    try {
      st=con.prepareStatement(sql);
      rs=st.executeQuery();
      while (rs.next()) {
        User user=new User();
        user.setId(rs.getInt(1));
        user.setName(rs.getString(2));
        list.add(user);
      }
    }finally{
      if (null!=rs) {
        rs.close();
      }
      if (null!=st) {
        st.close();
      }
    }
    return list;
  }
}

2、JDBC连接的测试类

1)、TestJdbc.java:数据库测试类

package cn.java.jdbc;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class TestJdbc {
  public static void main(String[] args) {
    Connection con=null;
    try {
      con=(Connection) ConnectionFactory.getInstance().getConnection();
      UserDao userDao=new UserDao();
      //con=(Connection) ConnectionFactory2.getInstance().getConnection();
      if (null!=con) {
        System.out.println("Link JDBC SUCESS");
        //userDao.insert(con, "zhangsir");
        //userDao.delete(con, 4);
        //userDao.update(con, 1, "david");
        List list=userDao.queryAll(con);
        for (User user : list) {
          System.out.println("id="+user.getId()+" name="+user.getName());
        }
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }finally{
      if (null!=con) {
        try {
          con.close();
        } catch (SQLException e) {
        }
      }
    }
  }
}

三、JDBC连接总结

JDBC操作的基本步骤是:

1、创建Connection对象,传入SQL查询命令字符串;
2、获取PreparedStatement对象:通过Connection对象传入SQL查询命令获取;
3、获取ResultSet:对PreparedStatement执行executeUpdate()或者executeQurey()获取;
4、依次关闭打开的对象:先后关闭ResultSet、PreparedStatement和Connection对象.

更多关于java相关内容感兴趣的读者可查看本站专题:《Java+MySQL数据库程序设计总结》、《Java数据结构与算法教程》、《Java文件与目录操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


推荐阅读
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
author-avatar
手机用户2502885647_951
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有