jdbc操作数据库流程,mysql的jdbc,MySQL数据库JDBC编程详解流程

jdbc操作数据库流程,mysql的jdbc,MySQL数据库JDBC编程详解流程

JDBC指的是Java数据库连接,这是一个标准的Java应用程序编程接口(JAVAAPI),用于将Java编程语言与各种数据库连接起来。从根本上说,JDBC是一个标准,它提供了一套完整的接口,并允许对底层数据库的可移植访问。在本文中,我们将了解MySQL连接JDBC的过程。

目录

一、数据库编程必备条件二。Java数据库编程:JDBC 3。JDBC IV的工作原理。JDBC发展步骤诉JDBC操作步骤六。JDBC代码优化1的一部分。正在获取数据库连接对象2。操作命令对象语句3。结果集对象4。摘要

一、数据库编程的必备条件

编程语言:如Java、C、C、Python等。

数据库:如Oracle、MySQL、SQL Server等。

数据库驱动程序包:不同的数据库,当以一种编程语言运行时,需要使用数据库制造商提供的数据库驱动程序包。

比如mysql提供了java的驱动包mysql-connector-java,如果MySQL需要基于java操作就需要驱动包。同样,基于java操作Oracle数据库,需要Oracle的数据库驱动包ojdbc。

二、Java的数据库编程:JDBC

JDBC (java Database Connectivity)是一个用于执行SQL语句的java API,是Java中的数据库连接规范。这个API由java.sql. *、javax.sql. *包中的一些类和接口组成。它为java开发者提供了操作数据库的标准API,并能提供对多个关系数据库的统一访问。

三、JDBC工作原理

JDBC为许多关系数据库提供了统一的访问方法。作为特定厂商数据库访问API的高层抽象,主要包含一些通用接口类。

要访问JDBC数据库层次结构,请执行以下操作:

我们使用一套JDBC电码。数据库切换后,Java操作数据库的代码就可以搞定了(差不多),数据库的驱动包需要调整。sql也需要调整,因为标准sql的部分和数据库相关的关键字,比如mysql中的limit。

JDBC的优势:

Java语言access数据库操作完全面向抽象接口编程。

数据库应用的开发并不局限于某个特定数据库厂商的API。

它为Java操作不同的数据库提供了统一的标准,程序在不同数据库中的可移植性大大增强。

四、JDBC开发步骤

1.创建一个普通Java项目。

2.下载mysql的驱动包

下载驱动程序包网站

我用的是5.1.xx版本,意思是:不同版本的数据库驱动包可能有不同的类/接口。

3.在项目中添加数据库驱动程序包(依赖)

验证:写Java代码时,可以使用mysql驱动包中的类/接口,也就是说引入的依赖没有问题。

4.测试:连接到数据库。

注意:

1.起初,当我们写forName时,它会变成红色。这里不用担心,抛出一个异常就行了。出现进入如下界面,点击第一个:

2.获取数据库连接:连接接口,需要使用jdbc,而不是mysql。

3.URL参数格式为3。MySQL数据连接如下:

Jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值

//加载JDBC驱动:反射方式,让调用初始化com.mysql.jdbc.Driver类

//即把类加载到JVM方法区,执行类的静态方法块和静态属性。

//数据库驱动包可以在这个操作下进行相应的初始化(驱动)。

class . forname( com . MySQL . JDBC . driver );

//获取数据库连接:连接接口,需要使用jdbc,而不是mysql。

connection conn=driver manager . getconnection( JDBC:MySQL://localhost:3306/kang?

user=root password=010124 use unicode=true character encoding=UTF-8 use SSL=false );

五、JDBC操作步骤

1.获取数据库连接对象

连接(JDBC的接口)

2.使用数据库连接对象创建操作命令对象语句,它是sql操作的抽象对象。

//通过连接对象创建操作命令对象语句(使用jdbc),对象是操作sql的抽象对象。

语句s=conn . create statement();

3.调用操作命令对象的方法执行sql查询:executeQuery更新操作(插入、修改、删除):executeUpdate,返回值int,表示成功执行了几项。

//更新操作:调用executeUpdate方法,插入、修改、删除。

int n=s . execute update( update exam _ result set math=60其中id=1 );

System.out.println(修改成功次数: n );

4.如果是查询操作,需要查询ResultSet对象,返回ResultSet结果集对象,类似于数据结构中的ListMapString,对象。

//查询:

//(1)调用语句操作命令对象的executeQuery(sql)。

//(2)返回一个ResultSet结果集对象(查询sql执行的结果集)

ResultSet r=s . execute query( select id,name,chinese,math,English from exam _ result where ID3 );

//处理结果:结果集可能是多行数据,需要遍历才能得到。

//调用next移动到下一行。如果返回true,则新行中有数据;如果返回false,则该行中没有数据。

While(r.next()){//一路走到底

//进入循环,表示操作遍历的一行数据。

int id=r . getint( id );

string name=r . getstring( name );

int chinese=r.getInt(中文);

int math=r . getint( math );

int English=r . getint( English );

System.out.printf(id=%s,名称=%s,中文=%s,数学=%s,英文=%sn

、id、姓名、中文、数学、英文);

}

运行结果:

评论:

5.释放资源无论jdbc操作成功还是发生异常,都需要释放资源。考虑到异常对象尚未初始化或为空的情况,有必要反向释放资源。

公共类JDBC {

公共静态void main(String[] args)抛出ClassNotFoundException,SQLException {

连接连接=空;

语句s=null

结果集r=null

尝试{

//把之前写的程序全部放入try。

}最后{//不管怎样,释放资源。

//释放资源:

//(1)无论情况如何(异常)

//(2)释放的顺序与创造的顺序相反。

//(结果集对象、操作命令对象、数据库连接对象)

if(r!=null){

r . close();

}

如果(s!=null){

s . close();

}

如果(conn!=null){

conn . close();

}

}

}

}

六、优化JDBC的部分代码

1.获取数据库连接对象

连接实现类由数据库提供,通常有两种方法可以获得连接对象:

1.一种是通过DriverManager(驱动管理类)的静态方法获取,也就是我们上面说的方法。

2.一个是通过DataSourse(数据源/数据库连接池)对象获得的。在实践中,将使用DataSourse对象。

//先创建一个数据库连接池,然后通过连接池获取数据库连接对象。

data source ds=new MySQL data source();

//创建数据库连接池:初始化时,会创建一定数量的数据库连接,这些连接对象可以以更高的效率被重用。

//只有使用seturl方法,或者调用带参数的方法,才能设置带参数的整个URL。

((MysqlDataSource)ds)。setURL( JDBC:MySQL://localhost:3306/kang );

((MysqlDataSource)ds)。setUser( root );

((MysqlDataSource)ds)。set password( 010124 );

((MysqlDataSource)ds)。setuse unicode(true);

((MysqlDataSource)ds)。setCharacterEncoding(“UTF-8”);

((MysqlDataSource)ds)。setuse SSL(false);

conn=ds . getconnection();

system . out . println(conn);

两者的区别:

1.由1获得的连接。不能重用DriverManager类。每次资源被使用后释放,物理连接通过Connection.close()关闭。

2.DataSourse提供了连接池的支持。当连接池初始化时,会创建一定数量的数据库连接,这些链接可以重用。每次使用数据库连接时,释放资源并调用connection.close()会回收连接对象。效率更高。

2.操作命令对象Statement

语句对象主要是向数据库发送SQL语句,JDBC API主要提供三种语句对象。

语句:用于执行不带参数的简单SQL语句(简单操作命令对象)

PreParedStatement:(预编译操作命令对象)

用于执行带或不带参数的SQL语句。

SQL语句在数据库系统中预编译。

执行速度比语句对象快。

CallableStatement:用于执行数据库存储过程的调用(存储过程的操作命令对象)。存储过程:就是写一段sql代码,里面可以写变量,循环,条件判断等等。

查询操作:

s=conn . create statement();

//查询:在页面上模拟,输入学生姓名搜索该学生。

//(1)调用语句操作命令对象的executeQuery(sql)。

//(2)返回一个ResultSet结果集对象(查询sql执行的结果集)

查询名=孙权;//可以正常查询的输入

//(1)调用语句操作命令对象的executeQuery(sql)。

//(2)返回一个ResultSet结果集对象(查询sql执行的结果集)

String sql=select id,name,chinese,math,english from exam_result其中name= queryName

system . out . println(SQL);

r=s . execute query(SQL);

While (r.next()) {//一路走到底

//进入循环,表示操作遍历的一行数据。

int id=r . getint( id );

string name=r . getstring( name );

int chinese=r.getInt(中文);

int math=r . getint( math );

int English=r . getint( English );

System.out.printf(id=%s,name=%s,中文=%s,数学=%s,英文=%sn ,id,name,中文,数学,英文);

}

输出结果:

但是这里有一个现象:如果我们把这里的queryName改成“skdj”或者‘1’=‘1’,拼接sql字符串的时候可能会出现安全问题。输出是:

后面的 1= 1 是常量真条件,所以会导致整个or条件为真,输出所有成员。要解决上述安全问题,需要将上述操作命令的对象调整为PreparedStatement,并使用占位符。

//要解决上述安全问题,需要调整上述操作命令对象的PreparedStatement。

String queryName=skeij 或 1 = 1 ;

int query id=6;

//准备一条腰带?占位符的Sql

String sql=select id,name,chinese,math,English from exam _ result where name=?或者id=?;

PS=conn . prepare statement(SQL);//创建预编译操作命令对象

//替换占位符:调用setXXX方法,第一个参数表示哪个占位符(从1开始),第二个参数表示要替换的值。

ps.setString(1,query name);//如果替换的值是什么类型,调用setXXX方法。

ps.setInt(2,queryId);

//要执行sql,需要使用不带参数的方法。

r=PS . execute query();

输出是:

插入操作:

int query id=7;

查询名称=图图;

int中文=60;

int math=98

int english=79

字符串SQL= insert into exam _ result values(??);

PS=conn . prepare statement(SQL);

ps.setInt(1,queryId);

ps.setString(2,query name);

ps.setInt(3,中文);

ps.setInt(4,数学);

ps.setInt(5,英语);

//executeUpdate()方法的返回值是整数,表示受影响的行数。它通常用于update、insert和delete语句。

int ret=PS . execute update();

system . out . println(ret);

其余的删除和更新操作和上面类似,这里就不做过多演示了。

3.ResultSet对象

result set对象,称为ResultSet,表示满足SQL语句条件的所有行,它通过一组getXXX方法提供对这些行中数据的访问。ResultSet中的数据是逐行排列的,每行有多个字段,有一个记录指针。指针指向的数据称为当前数据行,我们只能操作当前数据行。如果要获取记录,应该使用ResultSet的next()方法。如果我们想获得ResultSet中的所有记录,我们应该使用while循环。

//处理结果:结果集可能是多行数据,需要遍历才能得到。

//调用next移动到下一行。如果返回true,则新行中有数据;如果返回false,则该行中没有数据。

While (r.next()) {//一路走到底

//进入循环,表示操作遍历的一行数据。

int id=r . getint( id );

string name=r . getstring( name );

int chinese=r.getInt(中文);

int math=r . getint( math );

int English=r . getint( English );

System.out.printf(id=%s,name=%s,中文=%s,数学=%s,英文=%sn ,id,name,中文,数学,英文);

}

4.总结

掌握执行SQL的两种方法:

1.executeQuery()方法执行后返回单个结果集,通常用在select语句中。

2.2.executeUpdate()方法的返回值是一个整数,表示受影响的行数。它通常用于update、insert和delete语句。

编制报表的注意事项:

1.参数化SQL查询

2.占位符不能使用多值。

3.占位符:下标从1开始

4.防止常见的SQL注入攻击

5.SQL预编译

6.绩效高于陈述

以上就是本文关于MySQL数据库JDBC编程的详细过程。有关MySQL JDBC的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

jdbc操作数据库流程,mysql的jdbc,MySQL数据库JDBC编程详解流程