版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.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.csdn.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.csdn.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.csdn.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语句执行性能和安全性
<--------仅供参考------->