什么是JDBC
Java database connectivity——Java数据库链接,Java语言操作数据库。
数据库驱动----数据库厂商提供的可以和Java链接的接口。
jdbc是官方定义的一套操作所有关系型数据库的规则,即接口,各个数据库厂商实现接口,
提供数据库驱动jar包,通过JDBC编程,真正执行代码的是驱动的jar包中的程序。
JDBC快速入门
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
* JDBC快速入门
*
*/
public class JDBCDemo1 {
public static void main(String[] args) throws Exception {
//1.导入jar包---mysql-connector-java-8.0.13
/*
创建目录 方便管理 第三方库
新建目录 转为 库
将jar包复制到项目的目录文件下
*/
//2.注册驱动
Class.forName("com.MysqL.jdbc.Driver");
//3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:MysqL://localhost:3306/db3", "root", "15367485979");
//4.定义一个sql语句
String sql = "update mytable set score = 500 where ages =5";
//5.执行sql对象 statement
Statement statement = conn.createStatement();
//6执行sql
int count = statement.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
statement.close();
conn.close();
/*
如果报错和时区有关的错误时,可以参考下面的博客,亲测有效
https://blog.csdn.net/manongxf/article/details/87615026
*/
}
}
JDBC 接口
**DriverManager; 驱动管理对象**
功能:
注册驱动---告诉程序哪个数据库驱动jar,MysqL5之后的jar包可以省略注册驱动程序。
Class.forName("com.MysqL.jdbc.Driver");
通过查看源码发现在com.MysqL.jdbc.Driver类中存在静态代码块
---注册驱动部分代码;
获取数据库连接
Connection conn=DriverManager.getConnection
("jdbc:MysqL://localhost:3306/db3", "root", "15367485979");
"jdbc:MysqL://localhost:3306/db3"指定链接数据。
-------------------------------------------------------------------------------------------------------------
**Connection; 数据库链接对象**
功能:
获取执行sql的对象
statement createstatement()
preparedstatement preparestatement(string sql)
管理事务
开启事务 setautocommit(boolean autocommit)参数为false 开启事务
提交事务 commit()
回滚事务 rollback()
-----------------------------------------------------------------------------------------------------------
**Statement; 执行sql对象**
int executeUpdate(string sql)执行DML(insert update delete)语句DDL(create alter drop)语句,返回值指影响的行数,即数据库表中被修改的数据记录条数。
Boolean execute(string sql)可以执行任意的sql了解
resultset executequery(string sql)执行DQL(select)语句
------------------------------------------------------------------------------------------------------
**ResultSet; 结果集对象**
Boolean next()游标向下移动一行
get数据类型:获取数据(参数),参数为列名
// ResultSet rset=null;
rset= stat.executeQuery(sql2);
for (int i=0;i<5;i++){
//处理结果
//让光标向下移动一行
rset.next();
//获取数据
int value = rset.getInt(1);
int value2 = rset.getInt(2);
System.out.println(value+","+value2);}
利用返回值和while来进行遍历
// ResultSet rset=null;
rset= stat.executeQuery(sql2);
boolean v=rset.next();
while(v){
//处理结果
//获取数据
int value = rset.getInt(1);
int value2 = rset.getInt(2);
System.out.println(value+","+value2);
//让光标向下移动一行
v = rset.next();
}
---------------------------------------------------------------------------------------------------------
**PreparedStatement; 执行sql的对象**
public static void main(String[] args) {
Connection conn=null;
Statement stat=null;
//注册驱动
try {
Class.forName("com.MysqL.jdbc.Driver");
//创建链接
conn = DriverManager.getConnection("jdbc:MysqL://localhost:3306/db3", "root", "15367485979");
//定义sql
String sql = "insert into mytable value(5,6)";
//执行sql
stat = conn.createStatement();
int s = stat.executeUpdate(sql);
boolean ss = stat.execute(sql);
if(s>0){
System.out.println("数据执行成功");
} else{
System.out.println("数据执行失败");
}
} catch (ClassNotFoundException e) {
e.printstacktrace();
} catch (sqlException e) {
e.printstacktrace();
}finally {
//避免空指针异常
if (stat!=null){
//关闭资源
try {
stat.close();
} catch (sqlException e) {
e.printstacktrace();
}
}
if (conn!=null){
//关闭资源
try {
conn.close();
} catch (sqlException e) {
e.printstacktrace();
}
}
}
}
}
编写JDBC工具类
目的:简化书写
分析:
1.注册驱动抽取
2.抽取一个方法获取链接对象
3.释放资源
工具类的实现
/**
* JDBC工具类
* 使用配置文件传递参数
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
static {//静态代码块 能够使得在类加载的时候就获取数据
//创建集合类
Properties pro = null;
try {
pro = new Properties();//集合类 基于哈希表
//加载文件
pro.load(new FileReader("utils\\jabc.properties"));
//获取数据 赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
} catch (IOException e) {
e.printstacktrace();
}
}
/**
* 获取链接对象
* @return
*/
public static Connection getConnection(){
try {
Class.forName(driver);
return DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printstacktrace();
} catch (sqlException e) {
e.printstacktrace();
}
return null;
}
/**
* 释放资源
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if(stmt!=null){
try {
stmt.close();
} catch (sqlException e) {
e.printstacktrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (sqlException e) {
e.printstacktrace();
}
}
if (rs!=null){
try {
rs.close();
} catch (sqlException e) {
e.printstacktrace();
}
}
}
}