JDBC( Java Database Connectivity ) 翻译过来就是Java数据库连接,其实就是通过Java语言操作数据库的一门技术。
1.2 为什么要学习JDBC在Java开发中,我们不是通过CMD窗口来操作数据库,更多的是通过Java程序来操作数据库,而JDBC就可以实现这样一个操作.
1.3 如何使用JDBC访问数据库1.提出需求:
创建一个 jdbc 数据库,在库中创建一个Account表,并插入三条记录,然后利用Java程序查询出Account表中所有的记录,并打印在控制台上.
2.开发步骤:
(1)准备数据, 创建jdbc库, 创建account表
drop database if exists jdbc; create database jdbc charset utf8; use jdbc; create table account( id int primary key auto_increment, name varchar(50), money double ); insert into account values(null, 'tom', 1000); insert into account values(null, 'andy', 1000); insert into account values(null, 'tony', 1000);
(2)创建JAVA工程
(3)导入jar包
(4)创建类并实现JDBC程序(六个步骤)
代码实现
package com.demo.jdbc;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcDemo1 {
@Test
public void testJdbc() throws Exception {
//1、注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//DriverManager.registerDriver(new Driver)
//2、获取数据库连接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8",
"root",
"root"
);
//3、获取传输器
Statement statement = conn.createStatement();
//4、利用传输器执行sql语句,返回执行结果
String sql = "select * from account";
ResultSet resultSet = statement.executeQuery(sql);
//5、处理执行结果
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
double money = resultSet.getDouble("money");
System.out.println(id + ":" + name + ":" + money);
}
//6、释放资源
resultSet.close();
statement.close();
conn.close();
}
}
1.4 JDBC开发细节
1、注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
所谓的注册驱动,就是让JDBC程序加载mysql驱动程序,并管理驱动
驱动程序实现了JDBC API定义的接口以及和数据库服务器交互的功能,加载驱动是为了方便使用这些功能。
2、获取连接之数据库URL
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jdbc", "root", "root" );
DriverManager.getConnection() 用于获取数据连接, 返回的Connection连接对象是JDBC程序连接数据库至关重要的一个对象。
参数2和参数3分别是所连接数据库的用户名和密码。
参数1 “jdbc:mysql://localhost:3306/jdbc” 是连接数据库的URL,用于指定访问哪一个位置上的数据库服务器及服务器中的哪一个数据库,其写法为:
当连接本地数据库,并且端口为3306,可以简写为如下形式:
jdbc:mysql:///jdbc
3、Statement****传输器对象
Statement stat = conn.createStatement(); Statement传输器对象用于向数据库服务器发送sql语句,该对象上提供了发送sql的方法: executeQuery(String sql) – 用于向数据库发送查询类型的sql语句,返回一个ResultSet对象中 executeUpdate(String sql) – 用于向数据库发送更新(增加、删除、修改)类型的sql语句,返回一个int值,表示影响的记录行数
4、ResultSet结果集对象
ResultSet对象用于封装sql语句查询的结果,也是一个非常重要的对象。该对象上提供了遍历数据及获取数据的方法。
(1)遍历数据行的方法
next() – 使指向数据行的索引向下移动一行
(2)获取数据的方法
getInt(int columnIndex)
getInt(String columnLable)
getString(int columnIndex)
getString(String columnLable)
getDouble(int columnIndex)
getDouble(String columnLable)
getObject(int columnIndex)
getObject(String columnLable)
…
5、释放资源
rs.close();
stat.close();
conn.close();
此处释放资源必须按照一定的顺序释放,越晚获取的越先关闭。所以先关闭 rs对象,再关闭stat对象,最后关闭conn对象。
另,为了避免上面的程序抛出异常,释放资源的代码不会执行,应该把释放资源的代码放在finally块中.
try{
...
}catch(Exception e){
...
}finally{
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
stat = null;
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
2 JDBC增删改查
完成JDBC对数据库中数据的增删改查操作!!
package com.demo.jdbc;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class JdbcCRUD {
@Test
public void testAdd() {
Connection conn = null;
Statement statement = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8",
"root", "root");
statement = conn.createStatement();
String sql = "insert into account values(null,'lucy','3500')";
//影响的行数
int row = statement.executeUpdate(sql);
System.out.println("影响的行数:" + row);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
statement.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
@Test
public void tesUpdate() {
}
@Test
public void testDelete() {
}
@Test
public void testFindById() {
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//1、提示用户登录
System.out.println("请登录:");
//2、提示用户输入用户名并接收用户名
System.out.println("请输入用户名:");
String userName = sc.nextLine();
//3、提示用户输入密码并接收密码
System.out.println("请输入密码:");
String password = sc.nextLine();
//4、调用login方法,并传入用户名密码
login(userName, password);
}
private static void login(String userName, String password) {
Connection conn = null;
Statement statement = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8",
"root", "root");
statement = conn.createStatement();
String sql = "select * from user where user_name = '" + userName + "' and password = '" + password + "'";
ResultSet resultSet = statement.executeQuery(sql);
if (rs.next()) {//true :用户名密码正确
System.out.println("恭喜您登录成功");
} else {
System.out.println("用户名或密码错误!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("登录失败");
} finally {
//这边进行关闭连接等操作
}
}
public void prepareStatement() {
Connection conn = null;
PreparedStatement statement = null;
ResultSet rs = null;
try {
String username = "";
String password = "";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8",
"root", "root");
String sql = "select * from user where user_name = ? and password = ?";
statement = conn.prepareStatement(sql);
statement.setString(1, username);
statement.setString(2, password);
rs = statement.executeQuery();
if (rs.next()) {//true :用户名密码正确
System.out.println("恭喜您登录成功");
} else {
System.out.println("用户名或密码错误!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("登录失败");
} finally {
//这边进行关闭连接等操作
}
}
}
以实战来学习java,希望每个从我这边都有收获,然后点上一个小小赞,关注,共同进步,谢谢



