网站建设用户需求调查,商务网站建设流程200字,太原企业网站排名,wordpress定制1 JDBC简介
1.1 前言
当谈论JDBC时#xff0c;我们可以将其看作是一种用于Java程序与数据库进行通信的方式。如果你想编写一个Java程序#xff0c;并且希望能够连接到数据
库、执行查询或更新数据#xff0c;JDBC就是你需要的工具。
JDBC提供了一组类和接口#xff0c;…1 JDBC简介
1.1 前言
当谈论JDBC时我们可以将其看作是一种用于Java程序与数据库进行通信的方式。如果你想编写一个Java程序并且希望能够连接到数据
库、执行查询或更新数据JDBC就是你需要的工具。
JDBC提供了一组类和接口可以帮助我们连接到数据库、执行SQL语句例如查询、插入、更新和删除数据并获取执行结果。
1.2 概念
JDBCJava DataBase Connectivity java数据库连接技术是一种用于执行SQL语句的Java API可以为多种关系型数据库提供统一访问它是由一组用Java语言编写的类和接口组成的。 1.3 作用
可以通过java代码操作数据库。通过Java连接广泛的数据库并对表中数据执行增、删、改、查等操作。
实质就是java官方提供的一套规范(接口)用于帮助开发人员快速实现不同关系型数据库的连接。
2 JDBC入门
2.1 流程
第一步编写Java代码
第二步Java代码将SQL发送到MySQL服务端
第三步MySQL服务端接收到SQL语句并执行该SQL语句
第四步将SQL语句执行的结果返回给Java代码
2.2 步骤 创建工程导入驱动jar包 注册驱动 获取连接 Java代码需要发送SQL给MySQL服务端就需要先建立连接 定义SQL语句 获取执行SQL对象 执行SQL语句需要SQL执行对象而这个执行对象就是Statement对象 执行SQL 处理返回结果 释放资源
import java.sql.*;public class JDBCDemo {public static void main(String[] args) throws Exception {
// 1.注册驱动Class.forName(com.mysql.jdbc.Driver);// 2.获取连接String url jdbc:mysql://127.0.0.1:3307/student?useSSLfalse;String username root;String password root;Connection Conn DriverManager.getConnection(url, username, password);// 3.定义SQL语句String sql UPDATE user SET adress 200 WHERE id 1;// 4.获取执行SQL的对象 statementStatement stmt Conn.createStatement();// 5.执行SQLint count stmt.executeUpdate( sql );//受影响的行数// 6.处理结果System.out.println(count);// 7.释放资源stmt.close();Conn.close();}
}3 JDBC API详解
3.1 DriverManager
DriverManager驱动管理类作用 注册驱动 获取数据库连接
public class JDBCDemo2_DriverManager {public static void main(String[] args) throws Exception {//1. 注册驱动//Class.forName(com.mysql.jdbc.Driver);//2. 获取连接如果连接的是本机mysql并且端口是默认的 3306 可以简化书写String url jdbc:mysql://127.0.0.1:3307/db1?useSSLfalse;String username root;String password root;Connection conn DriverManager.getConnection(url, username, password);//3. 定义sqlString sql update account set money 2000 where id 1;//4. 获取执行sql的对象 StatementStatement stmt conn.createStatement();//5. 执行sqlint count stmt.executeUpdate(sql);//受影响的行数//6. 处理结果System.out.println(count);//7. 释放资源stmt.close();conn.close();}
}3.2 Connection
Connection中定义了3个对应的方法 开启事务 提交事务 回滚事务
/*** JDBC API 详解Connection*/
public class JDBCDemo3_Connection {public static void main(String[] args) throws Exception {//1. 注册驱动//Class.forName(com.mysql.jdbc.Driver);//2. 获取连接如果连接的是本机mysql并且端口是默认的 3306 可以简化书写String url jdbc:mysql://127.0.0.1:3307/db1?useSSLfalse;String username root;String password root;Connection conn DriverManager.getConnection(url, username, password);//3. 定义sqlString sql1 update account set money 3000 where id 1;String sql2 update account set money 3000 where id 2;//4. 获取执行sql的对象 StatementStatement stmt conn.createStatement();try {// 开启事务conn.setAutoCommit(false);//5. 执行sqlint count1 stmt.executeUpdate(sql1);//受影响的行数//6. 处理结果System.out.println(count1);int i 3/0;//5. 执行sqlint count2 stmt.executeUpdate(sql2);//受影响的行数//6. 处理结果System.out.println(count2);// 提交事务//程序运行到此处说明没有出现任何问题则需求提交事务conn.commit();} catch (Exception e) {// 回滚事务//程序在出现异常时会执行到这个地方此时就需要回滚事务conn.rollback();e.printStackTrace();}//7. 释放资源stmt.close();conn.close();}
}3.3 Statement
Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样。 执行DDL、DML语句 执行DQL语句 执行DML语句 /*** 执行DML语句* throws Exception*/
Test
public void testDML() throws Exception {//1. 注册驱动//Class.forName(com.mysql.jdbc.Driver);//2. 获取连接如果连接的是本机mysql并且端口是默认的 3306 可以简化书写String url jdbc:mysql://127.0.0.1:3307/db1?useSSLfalse;String username root;String password root;Connection conn DriverManager.getConnection(url, username, password);//3. 定义sqlString sql update account set money 3000 where id 1;//4. 获取执行sql的对象 StatementStatement stmt conn.createStatement();//5. 执行sqlint count stmt.executeUpdate(sql);//执行完DML语句受影响的行数//6. 处理结果//System.out.println(count);if(count 0){System.out.println(修改成功~);}else{System.out.println(修改失败~);}//7. 释放资源stmt.close();conn.close();
}执行DDL语句 /*** 执行DDL语句* throws Exception*/
Test
public void testDDL() throws Exception {//1. 注册驱动//Class.forName(com.mysql.jdbc.Driver);//2. 获取连接如果连接的是本机mysql并且端口是默认的 3306 可以简化书写String url jdbc:mysql:///db1?useSSLfalse;String username root;String password 1234;Connection conn DriverManager.getConnection(url, username, password);//3. 定义sqlString sql drop database db2;//4. 获取执行sql的对象 StatementStatement stmt conn.createStatement();//5. 执行sqlint count stmt.executeUpdate(sql);//执行完DDL语句可能是0//6. 处理结果System.out.println(count);//7. 释放资源stmt.close();conn.close();
}3.4 ResultSet 代码实现 /*** 查询account账户表数据封装为Account对象中并且存储到ArrayList集合中* 1. 定义实体类Account* 2. 查询数据封装到Account对象中* 3. 将Account对象存入ArrayList集合中*/
Test
public void testResultSet2() throws Exception {//1. 注册驱动//Class.forName(com.mysql.jdbc.Driver);//2. 获取连接如果连接的是本机mysql并且端口是默认的 3306 可以简化书写String url jdbc:mysql://127.0.0.1:3307/db1?useSSLfalse;String username root;String password root;Connection conn DriverManager.getConnection(url, username, password);//3. 定义sqlString sql select * from account;//4. 获取statement对象Statement stmt conn.createStatement();//5. 执行sqlResultSet rs stmt.executeQuery(sql);// 创建集合ListAccount list new ArrayList();// 6.1 光标向下移动一行并且判断当前行是否有数据while (rs.next()){Account account new Account();//6.2 获取数据 getXxx()int id rs.getInt(id);String name rs.getString(name);double money rs.getDouble(money);//赋值account.setId(id);account.setName(name);account.setMoney(money);// 存入集合list.add(account);}System.out.println(list);//7. 释放资源rs.close();stmt.close();conn.close();
}3.5 PreparedStatement java测试代码如下 /*** PreparedStatement原理* throws Exception*/
Test
public void testPreparedStatement2() throws Exception {//2. 获取连接如果连接的是本机mysql并且端口是默认的 3306 可以简化书写// useServerPrepStmtstrue 参数开启预编译功能String url jdbc:mysql://127.0.0.1:3307/db1?useSSLfalseuseServerPrepStmtstrue;String username root;String password root;Connection conn DriverManager.getConnection(url, username, password);// 接收用户输入 用户名和密码String name zhangsan;String pwd or 1 1;// 定义sqlString sql select * from tb_user where username ? and password ?;// 获取pstmt对象PreparedStatement pstmt conn.prepareStatement(sql);Thread.sleep(10000);// 设置的值pstmt.setString(1,name);pstmt.setString(2,pwd);ResultSet rs null;// 执行sqlrs pstmt.executeQuery();// 设置的值pstmt.setString(1,aaa);pstmt.setString(2,bbb);// 执行sqlrs pstmt.executeQuery();// 判断登录是否成功if(rs.next()){System.out.println(登录成功~);}else{System.out.println(登录失败~);}//7. 释放资源rs.close();pstmt.close();conn.close();
}