jbdc mysql
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.****.net/qq_41303423/article/details/79582085
1)JBDC简介:
JBDC 是java数据库链接技术的简称,提供链接各种常用数据库的能力
JBDC的工作原理:
JBDC API:
提供者:Sun公司
内容:供程序员调用的接口与类,集成在 Java.sql 和 javax.sql 包中,
如:
DriverManager 类:
Connection接口:
Statement接口:
ResultSet接口:
DriverManager:
提供者:Sun公司
作用:管理各种不同的JBDC驱动
JBDC驱动:
提供者:数据库厂商
作用:负责链接各种不同的数据库
JBDC API主要功能:
与数据库建立连接、执行SQL语句、处理结果
DriverManager: 依据数据库的不同,管理JDBC驱动
Connection:负责链接数据库并担任传送数据的任务
Statement: 由Connection 产生、负责执行SQL语句
ResultSet :负责保存Statement 执行后所产生的查询结果
2)连接数据库库
JBDC驱动由数据库厂商提供:
在个人开发测试中,可以使用JBDC-ODBC桥连方式
在生产型开发中,推荐使用纯java 驱动方式
使用JBDC - OBDC 桥方式连接数据库
将对JBDC API 的调用,转换为对另一组数据库连接API的调用
优点:可以访问所有ODBC可以访问的数据库
缺点:执行效率低、功能不够强大
=====================================================================
JDBC驱动:
使用纯java方式连接数据库
由JDBC驱动直接访问数据库
优点:100% java,快又可跨平台
缺点:访问不同的数据库需要下载专用的JDBC驱动
在使用纯java方式连接数据库之前需要先引用相关架包
下载地址:https://download.****.net/download/qq_41303423/10291176
引用完后就可以使用了。以下代码演示,如若拷贝代码,请注释记录日志代码,以免有错误
使用纯java方式连接数据库的步骤:
1.加载驱动 2.建立连接 3.异常处理 4.关闭连接
-
package jdbc;
-
import java.sql.Connection;
-
import java.sql.DriverManager;
-
import java.sql.SQLException;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
/**
-
* 纯java方式连接关闭数据库
-
*<p>Title:Text01</p>
-
*<p>Description:</p>
-
*<p>Company:</p>
-
* @author MLQ
-
* @date 2018年3月16日 下午5:21:42
-
*/
-
public class Text01 {
-
//记录日志
-
private static Logger log=LoggerFactory.getLogger(Text01.class);
-
public static void main(String[] args) {
-
Connection con=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
/**
-
* localhost:3306 本地
-
* Library:要操作的数据库
-
* text:用户名
-
* 123:密码
-
*/
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
System.out.println("建立连接成功");
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(con!=null){
-
con.close();
-
System.out.println("关闭连接成功");
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
-
}
-
}
3)使用 Statement 和 ResultSet
Statement常用方法:
ResultSet常用方法:
代码演示向数据库添加信息:
-
package jdbc;
-
import java.sql.Connection;
-
import java.sql.DriverManager;
-
import java.sql.SQLException;
-
import java.sql.Statement;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
public class Text02 {
-
private static Logger log=LoggerFactory.getLogger(Text02.class);
-
public static void main(String[] args) {
-
//连接数据库
-
Connection con=null;
-
//向数据库发送信息
-
Statement stmt=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
/**
-
* localhost:3306 本地
-
* Library:要操作的数据库
-
* text:用户名
-
* 123:密码
-
*/
-
StringBuffer sql=new StringBuffer();
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
//发送给数据库命令,并执行sql语句
-
stmt=con.createStatement();
-
//拼接sql语句
-
//INSERT INTO `reader` VALUES('006','测试',4,'吴名区');
-
sql.append("INSERT INTO `reader` VALUES(");
-
sql.append("'007',");
-
sql.append("'测试1',");
-
sql.append("4,");
-
sql.append("'吴名区1');");
-
//执行sql
-
//boolean flog=stmt.execute(sql.toString());
-
int num=stmt.executeUpdate(sql.toString());
-
if(num>0)
-
{
-
System.out.println("插入成功");
-
}else
-
{
-
System.err.println("插入失败!!!");
-
}
-
// if(flog)
-
// {
-
// System.out.println("插入成功");
-
// }else
-
// {
-
// System.err.println("插入失败!!!");
-
// }
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(stmt!=null)
-
{
-
stmt.close();
-
}
-
if(con!=null){
-
con.close();
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
-
}
-
}
//对数据库进行修改
-
public static void main(String[] args) {
-
//连接数据库
-
Connection con=null;
-
//向数据库发送信息
-
Statement stmt=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
//发送给数据库命令,并执行sql语句
-
stmt=con.createStatement();
-
int num = stmt.executeUpdate("UPDATE `reader` SET `rName`='测试数据' WHERE `Rid`='007';");
-
if(num>0)
-
{
-
System.out.println("修改成功");
-
}else
-
{
-
System.err.println("修改失败!!!");
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(stmt!=null)
-
{
-
stmt.close();
-
}
-
if(con!=null){
-
con.close();
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
//查询数据库中一张表的信息
-
public static void main(String[] args) {
-
//连接数据库
-
Connection con=null;
-
//向数据库发送信息
-
Statement stmt=null;
-
//定义一个容器
-
ResultSet set=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
//发送给数据库命令,并执行sql语句
-
stmt=con.createStatement();
-
set=stmt.executeQuery("select * from reader");//把查询到的信息保存到一个容器里面
-
//循环读取
-
System.out.println("编号\t姓名\t测试\t地址");
-
while(set.next())
-
{//循环所有行
-
System.out.print(set.getInt(1)+"\t");//输出每一列
-
System.out.print(set.getString(2)+"\t");
-
System.out.print(set.getInt(3)+"\t");
-
System.out.println(set.getString(4));
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(stmt!=null)
-
{
-
stmt.close();
-
}
-
if(con!=null){
-
con.close();
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
4)PreparedStatement接口:
使用PreparedStatement接口
继承自Statement接口
比Statement对象使用起来更加灵活,更有效率
代码演示:
-
public static void main(String[] args) {
-
//连接数据库
-
Connection con=null;
-
//向数据库发送信息
-
PreparedStatement stmt=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
//发送给数据库命令,并执行sql语句
-
stmt=con.prepareStatement("UPDATE `reader` SET `rName`=? WHERE `Rid`=?;");
-
stmt.setString(1, "判断");
-
stmt.setInt(2, 007);
-
int num=stmt.executeUpdate();
-
if(num>0)
-
{
-
System.out.println("修改成功");
-
}else
-
{
-
System.err.println("修改失败!!!");
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(stmt!=null)
-
{
-
stmt.close();
-
}
-
if(con!=null){
-
con.close();
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
-
}
-
}
5)PreparedStatement 与 Statement 执行SQL时的差异区别
数据库User表 UserId为:2018 密码UserPwd:123
测试结果如下:
调用:statementText() 方法时可以登录成功
调用:preparedStatementText() 方法时登陆失败
具体详情请参考以下代码:
----------------------内容重置-------------------------
PreparedStatement接口继承自Statement接口
提高了代码的可读性和维护性
提高了SQL语句执行性能和安全性
<--------仅供参考------->
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.****.net/qq_41303423/article/details/79582085
1)JBDC简介:
JBDC 是java数据库链接技术的简称,提供链接各种常用数据库的能力
JBDC的工作原理:
JBDC API:
提供者:Sun公司
内容:供程序员调用的接口与类,集成在 Java.sql 和 javax.sql 包中,
如:
DriverManager 类:
Connection接口:
Statement接口:
ResultSet接口:
DriverManager:
提供者:Sun公司
作用:管理各种不同的JBDC驱动
JBDC驱动:
提供者:数据库厂商
作用:负责链接各种不同的数据库
JBDC API主要功能:
与数据库建立连接、执行SQL语句、处理结果
DriverManager: 依据数据库的不同,管理JDBC驱动
Connection:负责链接数据库并担任传送数据的任务
Statement: 由Connection 产生、负责执行SQL语句
ResultSet :负责保存Statement 执行后所产生的查询结果
2)连接数据库库
JBDC驱动由数据库厂商提供:
在个人开发测试中,可以使用JBDC-ODBC桥连方式
在生产型开发中,推荐使用纯java 驱动方式
使用JBDC - OBDC 桥方式连接数据库
将对JBDC API 的调用,转换为对另一组数据库连接API的调用
优点:可以访问所有ODBC可以访问的数据库
缺点:执行效率低、功能不够强大
=====================================================================
JDBC驱动:
使用纯java方式连接数据库
由JDBC驱动直接访问数据库
优点:100% java,快又可跨平台
缺点:访问不同的数据库需要下载专用的JDBC驱动
在使用纯java方式连接数据库之前需要先引用相关架包
下载地址:https://download.****.net/download/qq_41303423/10291176
引用完后就可以使用了。以下代码演示,如若拷贝代码,请注释记录日志代码,以免有错误
使用纯java方式连接数据库的步骤:
1.加载驱动 2.建立连接 3.异常处理 4.关闭连接
-
package jdbc;
-
import java.sql.Connection;
-
import java.sql.DriverManager;
-
import java.sql.SQLException;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
/**
-
* 纯java方式连接关闭数据库
-
*<p>Title:Text01</p>
-
*<p>Description:</p>
-
*<p>Company:</p>
-
* @author MLQ
-
* @date 2018年3月16日 下午5:21:42
-
*/
-
public class Text01 {
-
//记录日志
-
private static Logger log=LoggerFactory.getLogger(Text01.class);
-
public static void main(String[] args) {
-
Connection con=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
/**
-
* localhost:3306 本地
-
* Library:要操作的数据库
-
* text:用户名
-
* 123:密码
-
*/
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
System.out.println("建立连接成功");
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(con!=null){
-
con.close();
-
System.out.println("关闭连接成功");
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
-
}
-
}
3)使用 Statement 和 ResultSet
Statement常用方法:
ResultSet常用方法:
代码演示向数据库添加信息:
-
package jdbc;
-
import java.sql.Connection;
-
import java.sql.DriverManager;
-
import java.sql.SQLException;
-
import java.sql.Statement;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
public class Text02 {
-
private static Logger log=LoggerFactory.getLogger(Text02.class);
-
public static void main(String[] args) {
-
//连接数据库
-
Connection con=null;
-
//向数据库发送信息
-
Statement stmt=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
/**
-
* localhost:3306 本地
-
* Library:要操作的数据库
-
* text:用户名
-
* 123:密码
-
*/
-
StringBuffer sql=new StringBuffer();
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
//发送给数据库命令,并执行sql语句
-
stmt=con.createStatement();
-
//拼接sql语句
-
//INSERT INTO `reader` VALUES('006','测试',4,'吴名区');
-
sql.append("INSERT INTO `reader` VALUES(");
-
sql.append("'007',");
-
sql.append("'测试1',");
-
sql.append("4,");
-
sql.append("'吴名区1');");
-
//执行sql
-
//boolean flog=stmt.execute(sql.toString());
-
int num=stmt.executeUpdate(sql.toString());
-
if(num>0)
-
{
-
System.out.println("插入成功");
-
}else
-
{
-
System.err.println("插入失败!!!");
-
}
-
// if(flog)
-
// {
-
// System.out.println("插入成功");
-
// }else
-
// {
-
// System.err.println("插入失败!!!");
-
// }
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(stmt!=null)
-
{
-
stmt.close();
-
}
-
if(con!=null){
-
con.close();
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
-
}
-
}
//对数据库进行修改
-
public static void main(String[] args) {
-
//连接数据库
-
Connection con=null;
-
//向数据库发送信息
-
Statement stmt=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
//发送给数据库命令,并执行sql语句
-
stmt=con.createStatement();
-
int num = stmt.executeUpdate("UPDATE `reader` SET `rName`='测试数据' WHERE `Rid`='007';");
-
if(num>0)
-
{
-
System.out.println("修改成功");
-
}else
-
{
-
System.err.println("修改失败!!!");
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(stmt!=null)
-
{
-
stmt.close();
-
}
-
if(con!=null){
-
con.close();
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
//查询数据库中一张表的信息
-
public static void main(String[] args) {
-
//连接数据库
-
Connection con=null;
-
//向数据库发送信息
-
Statement stmt=null;
-
//定义一个容器
-
ResultSet set=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
//发送给数据库命令,并执行sql语句
-
stmt=con.createStatement();
-
set=stmt.executeQuery("select * from reader");//把查询到的信息保存到一个容器里面
-
//循环读取
-
System.out.println("编号\t姓名\t测试\t地址");
-
while(set.next())
-
{//循环所有行
-
System.out.print(set.getInt(1)+"\t");//输出每一列
-
System.out.print(set.getString(2)+"\t");
-
System.out.print(set.getInt(3)+"\t");
-
System.out.println(set.getString(4));
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(stmt!=null)
-
{
-
stmt.close();
-
}
-
if(con!=null){
-
con.close();
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
4)PreparedStatement接口:
使用PreparedStatement接口
继承自Statement接口
比Statement对象使用起来更加灵活,更有效率
代码演示:
-
public static void main(String[] args) {
-
//连接数据库
-
Connection con=null;
-
//向数据库发送信息
-
PreparedStatement stmt=null;
-
//1.加载驱动
-
try {
-
Class.forName("com.mysql.jdbc.Driver");
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
//2.建立连接
-
try {
-
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
-
//发送给数据库命令,并执行sql语句
-
stmt=con.prepareStatement("UPDATE `reader` SET `rName`=? WHERE `Rid`=?;");
-
stmt.setString(1, "判断");
-
stmt.setInt(2, 007);
-
int num=stmt.executeUpdate();
-
if(num>0)
-
{
-
System.out.println("修改成功");
-
}else
-
{
-
System.err.println("修改失败!!!");
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
finally
-
{
-
try {
-
if(stmt!=null)
-
{
-
stmt.close();
-
}
-
if(con!=null){
-
con.close();
-
}
-
} catch (SQLException e) {
-
e.printStackTrace();
-
log.error(e.toString());
-
}
-
}
-
}
-
}
5)PreparedStatement 与 Statement 执行SQL时的差异区别
数据库User表 UserId为:2018 密码UserPwd:123
测试结果如下:
调用:statementText() 方法时可以登录成功
调用:preparedStatementText() 方法时登陆失败
具体详情请参考以下代码:
----------------------内容重置-------------------------
PreparedStatement接口继承自Statement接口
提高了代码的可读性和维护性
提高了SQL语句执行性能和安全性
<--------仅供参考------->