JDBC学习(一)---JDBC的概念/JDBC相关类/如何使用JDBC

news/2024/5/19 0:21:22 标签: JDBC

JDBCJDBCJDBCJDBC_0">JDBC学习(一)—JDBC的概念/JDBC相关类/如何使用JDBC

JDBC_2">01 JDBC概念

JDBC:Java Data Base Connectivity,Java数据库连接

SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC

应用程序必须要通过相应的数据库驱动程序与数据库进行交互。

因此,开发人员想要操作数据,需要通过jdbc加载具体的驱动。


JDBC_14">02 JDBC相关类

  • DriverManager类

    DriverManager用于加载驱动,并创建与数据库的链接。

    常用方法:

    • DriverManager.registerDriver(new Driver());在实际开发中并不推荐采用registerDriver方法注册驱动。此方式会导致驱动程序注册两次,在内存中会有两个Driver对象;程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。推荐方式:Class.forName(“com.mysql.jdbc.Driver”);采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
    • DriverManager.getConnection(url, user, password);获取数据库连接
      • 注意url的书写格式:协议 :子协议 : //主机:端口 + 数据库 + 参数
      • 常用数据库URL地址的写法:
        • Oracle写法:jdbc:oracle:thin:@localhost:1521:数据表名称
        • SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=数据表名称
        • MySql写法:jdbc:mysql://localhost:3306/数据表名称,如果连接的是本地的Mysql数据库,并且连接使用的端口是3306,那么的url地址可以简写为: jdbc:mysql:///数据库

  • Connection类

    用于代表数据库的链接,客户端与数据库所有交互都是通过connection对象完成的.

    注意:Connection对象,是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机

    常用方法:

    createStatement():创建向数据库发送sql的statement对象。
    prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
    prepareCall(sql):创建执行存储过程的callableStatement对象。
    setAutoCommit(boolean autoCommit):设置事务是否自动提交。
    commit() :在链接上提交事务。
    rollback() :在此链接上回滚事务。
    

  • Statement类

    用于向数据库发送SQL语句

    注意:该对象需要释放资源

    常用方法:

    executeQuery(String sql) :用于向数据发送查询语句。
    executeUpdate(String sql):用于向数据库发送insert、update或delete语句
    execute(String sql):用于向数据库发送任意sql语句
    addBatch(String sql) :把多条sql语句放到一个批处理中。
    executeBatch():向数据库发送一批sql语句执行。
    

  • ResultSet类

    用于封装Sql语句的执行结果。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一
    行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行
    的数据。可以理解为迭代器。

    注意:该对象需要释放资源

    常用方法:

    //滚动方法:
    next():移动到下一行
    Previous():移动到前一行
    absolute(int row):移动到指定行
    beforeFirst():移动resultSet的最前面。
    afterLast() :移动到resultSet的最后面。
    
    //可以通过get获取任意类型的数据,如 :
    getObject(int index)
    getObject(string columnName)
    getString(int index)
    getString(String columnName)
    

    示例:

     while (resultSet.next()){
    	     System.out.println(resultSet.getObject("columnName1"));
    	     System.out.println(resultSet.getObject("columnName2"));
    	     System.out.println(resultSet.getObject("columnName3"));
    	     System.out.println(resultSet.getObject("columnName4"));
    }
    

JDBC_107">03 如何使用JDBC

  • 准备步骤

    • 下载驱动:通过下载地址https://mvnrepository.com/artifact/mysql/mysql-connector-java下载jar包

    • 导jar包,可以参考文章https://blog.csdn.net/yinyanyao1747/article/details/90751024详细步骤

    • 搭建实验环境

      • 在mysql中创建一个库,并创建数据表,插入数据。以下列数据库为例:
      create database jdbcStudy character set utf8 collate utf8_general_ci;
      
      use jdbcStudy;
      
      create table users(
          id int primary key,
          name varchar(40),
          password varchar(40),
          email varchar(60),
          birthday date
      );
      
      insert into users(id,name,password,email,birthday) values(1,'zhansan','123456','zs@sina.com','1980-12-04');
      insert into users(id,name,password,email,birthday) values(2,'lisi','123456','lisi@sina.com','1981-12-04');
      insert into users(id,name,password,email,birthday) values(3,'wangwu','123456','wangwu@sina.com','1979-12-04');
      
  • 使用JDBC

package com.hooi.demo1;

import java.sql.*;

public class JDBCTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

     //step1:加载驱动
     
     Class.forName("com.mysql.jdbc.Driver");
     
     //step2:获取连接
     
     String username ="root";
     
     String passwd = "123456";
     
     String url ="jdbc:mysql://localhost:3306/jdbcstudy";
     
     Connection connection = DriverManager.getConnection(url, username, passwd);
     
     //step3:获取用于向数据库发送sql语句的statement对象
     
     Statement statement = connection.createStatement();
     
     //step4:用string包装sql语句
     
	 String sql ="select id,name,password,email FROM users";
	 
	 //step5:执行sql语句
	 
     ResultSet resultSet = statement.executeQuery(sql);

	//step6:获取执行结果
	
	 while (resultSet.next()){
	     System.out.println(resultSet.getObject("id"));
	     System.out.println(resultSet.getObject("name"));
	     System.out.println(resultSet.getObject("password"));
	     System.out.println(resultSet.getObject("email"));
	 }
	
	//step7:释放资源,关闭连接

     resultSet.close();
     statement.close();
     connection.close();

    }
}


http://www.niftyadmin.cn/n/1779866.html

相关文章

redis学习之三配置文件redis.conf 的含义

摘自http://www.runoob.com/redis/redis-conf.html 安装redis之后的第一件事,我就开始配置密码,结果总是不生效,而我居然还没想到原因。今天突然用命令行设置了密码,居然可以了。然后info一下,看到配置文件位置才恍然大…

史上最详细的Android Studio系列教程三--快捷键

2019独角兽企业重金招聘Python工程师标准>>> Android Studio 1.0正式版发布啦 今天是个大日子,Android Studio 1.0 终于发布了正式版, 这对于Android开发者来说简直是喜大普奔的大消息啊,那么就果断来下载使用。 官方下载地址&…

JDBC学习(二)---将JDBC优化为工具包/数据库的增删改查

JDBC学习(二)—将JDBC优化为工具包/数据库的增删改查 01 JDBC的优化 为了优化对JDBC的使用,避免代码的重复率,将创建JDBC的繁琐过程简化为工具包中的各个方法。具体步骤如下: 新建配置文件:内容包括创建连接时所需的驱动&#x…

mongodb在secondary不能直接获取primary的信息解决方法

如果通过shell访问mongo,要在secondary进行查询。会出现如下错误: [rootmongodb-secondary2 ~]# mongo MongoDB shell version: 3.0.9 connecting to: test abc:SECONDARY> show dbs 2016-02-20T02:13:18.5270800 E QUERY Error: …

赛门铁克SF如何在线扩容卷组

1、查看磁盘模式:vxdctl -c mode2、所有dg列表信息:-确认服务器上的dg信息,有些是隐藏的,如仲裁盘。vxdisk -o alldgs list 3、SF扫盘:vxdisk scandisks之前的存储配置磁盘步骤省略,但说明,SF只…

JDBC学习(三)---SQL注入问题/PreparedStatement对象

JDBC学习(三)—SQL注入问题/PreparedStatement对象 01 SQL注入问题 所谓SQL注入,就是通过把SQL命令插入到Web表单提交,最终达到欺骗服务器执行恶意的SQL命令。 程序示例:以SQL语句:select * from users where name ‘不存在的…

我的Java开发学习之旅------Workspace in use or cannot be created, choose a different one.--错误解决办法...

今天使用Eclipse时,突然卡死了,然后我强制关闭了Eclipse,再重新打开的时候就报错了,错误如下: Workspace in use or cannot be created, choose a different one. 错误原因:出现这种情况一般是workspace的…

阅读收藏夹

为什么80%的码农都做不了架构师?>>> 腾讯产品经理:BAT面试的时候喜欢怎样的新人(有好书) http://www.woshipm.com/pmd/284339.html 程序日志 http://macrochen.iteye.com/blog/1399082 转载于:https://my.oschina.net/body/blog/620134