java 使用JBDC访问MySQL数据库
2018-03-16 20:29
399 查看
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) b25f { 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() 方法时登陆失败
具体详情请参考以下代码:
Statement 工具类:package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class ToolClass {
//加载驱动
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static Connection con=null;
//向数据库发送信息
private static Statement stmt=null;
/**
* @return the stmt
*/
public static Statement getStmt() {
return stmt;
}
/**
* @return the con
*/
public static Connection getCon() {
if(con==null)
{
try {//建立连接
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
} catch (SQLException e) {
e.printStackTrace();
}
try {
stmt=con.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
}
return con;
}
public static void close()
{
try {
stmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}PreparedStatement 工具类:package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
public class ToolClass1 {
public static void main(String[] args) {
try {//加载驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static Connection con=null;
//向数据库发送信息
private static PreparedStatement preparedStatement=null;
/**
* @return the stmt
*/
public static PreparedStatement getStmt() {
return preparedStatement;
}
/**
* @return the con
*/
public static Connection getCon(String sql) {
if(con==null)
{
try {//建立连接
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Library","text","123");
} catch (SQLException e) {
e.printStackTrace();
}
try {
preparedStatement=con.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
return con;
}
public static void close()
{
try {
preparedStatement.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
调用测试类:package jdbc;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TextJd5 {
public static void main(String[] args) {
//preparedStatement方式
//preparedStatementText();
//Statement方式
//statementText();
}
/**
* preparedStatement方式登陆
*/
public static void preparedStatementText() {
// 创建存储容器
ResultSet set = null;
// 1.加载驱动
ToolClass1.main(null);
// 2.建立连接并执行SQL语句
ToolClass1.getCon("SELECT * FROM `user` WHERE `UserId`=? AND `UserPwd`=?");
try {
ToolClass1.getStmt().setInt(1, 2018);
//ToolClass1.getStmt().setString(2, "123");
ToolClass1.getStmt().setString(2, "12'or'1'='1");
set = ToolClass1.getStmt().executeQuery();
if (set.next()) {
System.out.println("登陆成功");
} else {
System.err.println("登陆失败!!!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ToolClass1.close();
}
}
/**
* Statement方式登陆
*/
public static void statementText()
{
// 创建存储容器
ResultSet set = null;
// 1.加载驱动
ToolClass.main(null);
//打开与数据库通道
ToolClass.getCon();
String text="12'or'1'='1";
//执行SQL
try {
set=ToolClass.getStmt().executeQuery("SELECT * FROM `user` WHERE `UserId`=2018 AND `UserPwd`='"+text+"'");
if(set.next())
{
System.out.println("登陆成功");
}else
{
System.out.println("登陆失败!!!");
}
} catch (SQLException e) {
e.printStackTrace();
}
finally
{
ToolClass.close();
}
}
}PreparedStatement接口继承自Statement接口
提高了代码的可读性和维护性
提高了SQL语句执行性能和安全性
<--------仅供参考------->
相关文章推荐
- java使用jdbc访问mysql数据库乱码
- 编程实践:使用java访问mySQL数据库
- Java中使用JDBC访问MySQL数据库
- JAVA 访问MySQL数据库(使用方法及测试)
- java使用JDBC访问MYSQL数据库
- 如果在本地搭一个服务器和mysql数据库环境,如果使用java来访问数据库
- 使用java访问MySQL数据库
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 不使用 java.awt.Desktop API,打开默认浏览器访问指定链接的方法
- java中的访问修饰符及使用范围
- 使用 Java 访问 Windows 注册表
- 使用java备份还原MySQL数据库
- java访问com组件_jacob使用指南
- 如何使用java程序备份和恢复MySql数据库?
- 使用JXPath访问java对象、集合和XML文件
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- java基础-使用jdbc访问数据库
- 使用JAVA访问ACCESS数据库的方法