JDBC技术入门
今日内容
1.JDBC基本概念
2.快速入门
3.对JDBC中各个接口和类的详解
1.概念: Java数据库连接(Java Database Connectivity)。
JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂函去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
2.快速入门:
步骤:
1.导入驱动jar包(jar包需要手动下载,导入方式不再赘述)
2.注册驱动
3.获取数据库连接对象 Connection
4.定义sql
5,获取执行sql语句的对象 statement
6,执行sql,接受返回结果
7.处理结果
8.释放资源
代码实现
//1.导入驱动jar包
//2.注册驱动
Class.forname("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
Connection conn = Drivermanager.getConnection(jdbc:mysql://localhost: 3306/db3,root,password)
//4.定义sql语句(以更新操作为例)
String sql=“update account set balance=500 where id=1”;
//5.获取执行sql的对象 Statement
Statement stmt =conn.createstatement();
//6.执行sql
int count = stmt.executeupdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
3.详解各个对象
1. Drivermanager
功能:
1.注册驱动:告诉程序该使用哪一个数据库驱动jar
static void registerdriver( Driver driver):注册与给定的驱动程序 Drivermanager
写代码使用: Class.forname(“com,mysql.jdbc. Driver”);
通过查看源码发現:在com.mysql.jdbc.Driver类中存在静态代码块
static{
try {
java.sql.Drivermanager.registerdriver(new Driver());
}catch(Sqlexception E){
throw new Runtimeexception(“Can’t register driver!");
}
}
//注意:mysq1.5之后的驱动jar包可以省略注册驱动的步骤。
2.获取数据库连接
方法: static Connection getConnection(sting url, string user, string password)
参数:
url:指定连接的路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
细节:如果链接的是本机sql服务器,并且服务器默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
user:用户名
password:密码
2. Connection:数据库连接对象
1.功能:
1.获取执行sql的对象
Statement.createStatement()
PreparedStatement.prepareStatement(String sql)
2.管理事务:
开启事务: setAutoCommit( boolean autoCommit):调用该方法设置参数为 false,即开启事务
提交事务: commit()
回滚事务: rollback()
3. statement:执行sql的对象
执行sql:
1. boolean execute( string sql):可以执行任意的sql了解
2. int executeUpdate( string sql):执行DML( insert、 update、 delete)语句、DDL( create, alter、drop)语句
返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功返回值>9的则执行成功,反之,则失败。
3. Resultset executequery( string sql):执行DQL( select)语句
4. Resultset:结果集对象,封装查询结果
boolean next():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
* getxxx(参数):获取数据
* Xxx:代表数据类型 如:int getInt()
string getstring()
*参数:
1. int :代表列的编号,从1开始 如: getString(1)
2. string :代表列名称。如:getDouble(“Name”)
*注意:
*使用步骤:
1.游标向下移动一行
2.判断是否有数据
3.获取数据
Resultset rs = null;
//循环判断游标是否是最后一行末尾。
while (rs.next()){
//获取数据
//6.2获取数据
int ID = rs.getInt(1);
String Name = rs.getString("name");
System.out.println(ID + "--" + Name);
}
练习题:
定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。
1.定义Emp类
2.定义方法 public List findAll(){};
3.实现方法 select * from emp;
完整代码:
//Emp实体类
package com.idea.Test;
import java.util.Date;
public class Emp {
private int id;
private String name;
private int salary;
Date join_time;
public Emp() {
}
public Emp(int id, String name, int salary, Date join_time) {
this.id = id;
this.name = name;
this.salary = salary;
this.join_time = join_time;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public Date getJoin_time() {
return join_time;
}
public void setJoin_time(Date join_time) {
this.join_time = join_time;
}
@Override
public String toString() {
return "emp{" +
"id=" + id +
", name='" + name + '\'' +
", salary=" + salary +
", join_time=" + join_time +
'}';
}
}
//JDBC
package com.idea.Test;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class JDBC {
public static void main(String[] args) {
List<Emp> list = findAll();
System.out.println(list);
}
public static List<Emp> findAll(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<Emp> list = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql:///Test", "root", "123456");
String sql = "select * from emp";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
Emp emp = null;
list = new ArrayList<>();
while (rs.next()){
int id = rs.getInt(1);
String name = rs.getString("name");
int salary = rs.getInt(3);
Date join_date = rs.getDate(4);
emp = new Emp();
emp.setId(id);
emp.setName(name);
emp.setSalary(salary);
emp.setJoin_time(join_date);
//装载集合
list.add(emp);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
}
}
注意:数据库建表时,最好把字段名和实体类成员变量名一一对应
数据库表
运行结果:
本文到此结束了,感谢您的阅读和支持!!!