基础入门
注册驱动
获取Connection对象
获取执行sql的对象
执行sql
释放资源

public class JDBCDemo1Insert {public static void main(String[] args) {Statement stmt = null;Connection conn = null;try {//1. 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2. 定义sqlString sql = "insert into student values (20185663,'杜Zn','男',20,'CS','2000-09-01')";//3.获取Connection对象conn = DriverManager.getConnection("jdbc:mysql:///jdbclearning?serverTimezone=Asia/Shanghai", "root", "12345");//4.获取执行sql的对象 Statementstmt = conn.createStatement();//5.执行sqlint count = stmt.executeUpdate(sql);//影响的行数//6.处理结果System.out.println(count);if (count > 0) {System.out.println("添加成功!");} else {System.out.println("添加失败!");}} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();} finally {//stmt.close();//7. 释放资源//避免空指针异常if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}}
注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
通过反射创建该类,该类中有静态代码块,会执行注册驱动代码
public class Driver extends NonRegisteringDriver implements java.sql.Driver {public Driver() throws SQLException {}static {try {DriverManager.registerDriver(new Driver());} catch (SQLException var1) {throw new RuntimeException("Can't register driver!");}}}
获取Connection对象
Connection conn = DriverManager.getConnection("jdbc:mysql:///databasename?serverTimezone=Asia/Shanghai", "name", "password");
参数:
mysql数据库URL地址
数据库账号
数据库密码
获取执行sql的对象
Statement stmt = conn.createStatement();
Connection对象常用方法
| 方法 | 描述 |
|---|---|
| createStatement() | 创建向数据库发送sql的statement对象。 |
| prepareStatement(sql) | 创建向数据库发送预编译sql的PrepareSatement对象。 |
| prepareCall(sql) | 创建执行存储过程的callableStatement对象。 |
| setAutoCommit(boolean autoCommit) | 设置事务是否自动提交。 |
| commit() | 在链接上提交事务。 |
| rollback() | 在此链接上回滚事务。 |
执行sql
stmt.executeUpdate(sql);
Statement对象常用方法:
| 方法 | 含义 |
|---|---|
| executeQuery(String sql) | 用于向数据发送查询语句。 |
| executeUpdate(String sql) | 用于向数据库发送insert、update或delete语句 |
| execute(String sql) | 用于向数据库发送任意sql语句 |
| addBatch(String sql) | 把多条sql语句放到一个批处理中。 |
| executeBatch() | 向数据库发送一批sql语句执行。 |
释放资源
stmt.close();
执行DDL
DDL:操作数据库、表
核心代码:
//4.获取执行sql的对象 Statementstmt = conn.createStatement();//5.执行sqlboolean execute = stmt.execute("DDL语句");
执行DML
DML:增删改表中数据
SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
输入用户随便,输入密码:a' or 'a' = 'a
sql:select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a' 。会导致密码无论是什么都是正确
核心代码(无预处理):
//4.获取执行sql的对象 Statementstmt = conn.createStatement();//5.执行sqlint count = stmt.executeUpdate("DML语句");//影响的行数
核心代码(含预处理):
Statement stmt = conn.createStatement();PreparedStatement pre = conn.prepareStatement("insert into student values (20185665,'杜Zn',?,20,?,'2000-09-01')");pre.setString(1,"男");pre.setString(2,"CS");int i = pre.executeUpdate();
执行DQL
DQL:查询表中的记录
Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式,ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
获取行
ResultSet提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
获取值
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
获取任意类型的数据
getObject(int index)
getObject(string columnName)
获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
常用数据类型转换:
| SQL类型 | Jdbc对应方法 | 返回类型 |
|---|---|---|
| bit(1),bit(n) | getBoolean,getBytes() | Boolean,byte[] |
| tinyint | getByte() | Byte |
| smallint | getShort() | Short |
| int | getInt | Int |
| bigint | getLong() | Long |
| char,varchar,longvarchar | getString | String |
| text(clob) blob | getClob(),getblob() | Clob,blob |
| date | getDate() | java.sql.Date |
| time | getTime() | java.sql.Time |
| timestamp | getTimestamp | java.sql.Timestamp |
执行:
Statement stmt = conn.createStatement();resultSet = stmt.executeQuery("select * from student ");List<Student> students = CreateClass.CreateStudent(resultSet);System.out.println(students);
CreateClass.CreateStudent:
public static List<Student> CreateStudent(ResultSet resultSet) {List<Student> list = new ArrayList<>();Student s;try {while (resultSet.next()) {String sno = resultSet.getString("Sno");//String sno = resultSet.getString(1);String sname = resultSet.getString("Sname");String ssex = resultSet.getString("Ssex");short ssage = resultSet.getShort("Sage");String sdept = resultSet.getString("Sdept");Date s_entrance = resultSet.getDate("S_entrance");s = new Student(sno, sname, ssex, ssage, sdept, s_entrance);list.add(s);}} catch (SQLException e) {e.printStackTrace();}return list;}
事务处理
开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
提交事务:commit()
回滚事务:rollback()
connection.setAutoCommit(false);Statement statement = connection.createStatement();int i = statement.executeUpdate("DML语句");connection.commit();// connection.rollback();




