3.后续SQL
创始人
2024-06-03 06:12:25

目录

事务

 事务操作

 索引

 如何创建一个好的数据库

三大范式

 第一范式

第二范式

​编辑

第三范式

 JDBC

JDBC对象解释

SQL注入问题

PreparedStatement对象 

1.新增

2.删除

3.修改

4.查询

使用IDEA连接数据库

 数据库连接池


事务

 

 

 

 

 

 事务操作

 

--模拟转账:事务
SET autocommit = 0;--关闭自动提交
START TRANSACTION --开启事务(一组事务)
UPDATE account SET money=money-100 WHERE `name`='A' --A少100
UPDATE account SET money=money+500 WHERE `name`='B' --B加500
COMMIT; --提交事务
ROLLBACK; --如果失败回滚
SET autocommit = 1;--开启自动提交

 索引

 

 

 

 

 

 

 

 

 如何创建一个好的数据库

三大范式

 第一范式

第二范式

第三范式

 JDBC

 

第一个JDBC程序 

package com.kuangshen.lesson01;import com.mysql.jdbc.Driver;import java.sql.*;//我的第一个JDBC程序
public class JdbcFirstDemo {public static void main(String[] args) throws ClassNotFoundException, SQLException {//1.加载驱动Class.forName("com.mysql.jdbc.Driver");//固定写法,加载驱动//2.用户信息和url//1.支持中文编码 2.设置字符集为utf-8 3.用安全的连接String url ="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";String usename = "root";String password = "2001";//3.连接成功。数据库对象Connection connection = DriverManager.getConnection(url, usename, password);//4.执行SQL对象   Statement执行SQL的对象Statement statement = connection.createStatement();//5.执行SQL对象,执行SQLString sql="SELECT * FROM `users`";ResultSet resultSet = statement.executeQuery(sql);//返回的结果集,结果集 中封装了我们全部的查询出来的结果while (resultSet.next()){System.out.print("id="+resultSet.getObject("id")+" ");System.out.print("name="+resultSet.getObject("NAME")+" ");System.out.print("pwd="+resultSet.getObject("PASSWORD")+" ");System.out.print("eml="+resultSet.getObject("email")+" ");System.out.println("birth="+resultSet.getObject("birthday"));System.out.println("=================");}//6.释放连接resultSet.close();statement.close();connection.close();}}

JDBC对象解释

 

 

 

 关闭对象

 这里是通过类获取反射对象,然后获取反射对象的类加载器,调用类加载器的获取资源的方法。一步一步来的

各位,这里是反射的类加载器+集合的map子接口Properties类的知识,别被前面的误导了

前面的,这哪里是IO流的properties类的知识啊?你这不乱引导人么?

我就说看这个Properties类很熟悉,但是IO流没学到过啊。

package com.kuangshen.lesson02.utils;import com.mysql.jdbc.Driver;import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;public class JdbcUtils {private static String driver =null;private static String url =null;private static String username =null;private static String password =null;static {try {InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dp.properties");Properties properties = new Properties();properties.load(in);driver=  properties.getProperty("driver");url=  properties.getProperty("url");username=  properties.getProperty("username");password=  properties.getProperty("password");//1.驱动只用加载一次Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}//获取连接public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url, username, password);}//释放连接资源public static void release(Connection con, Statement st, ResultSet rs){if (con!=null) {try {con.close();} catch (SQLException e) {e.printStackTrace();}if (st != null) {try {st.close();} catch (SQLException e) {e.printStackTrace();}if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}}}}
package com.kuangshen.lesson02;import com.kuangshen.lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class TestInsert {public static void main(String[] args) throws SQLException {Connection conn=null;Statement st =null;ResultSet rs=null;try {conn= JdbcUtils.getConnection();//获取数据库连接st=conn.createStatement();//获得SQL的执行对象String sql="INSERT INTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`)" +"VALUES('4','jiji','213123','123123@qq.com','20010301')";int i=st.executeUpdate(sql);if (i>0){System.out.println("插入成功");}} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtils.release(conn,st,rs);}}
}
package com.kuangshen.lesson02;import com.kuangshen.lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class TestSelect {public static void main(String[] args) {Connection conn=null;Statement st=null;ResultSet RS=null;try {conn= JdbcUtils.getConnection();st =conn.createStatement();String sql ="SELECT * FROM users where id = 1";RS=st.executeQuery(sql);while (RS.next()){System.out.println("name="+RS.getString("NAME"));}} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtils.release(conn,st,RS);}}}

SQL注入问题

 

PreparedStatement对象 

1.preparedStatement可以防止SQL注入,效率更高

1.新增

package com.kuangshen.lesson03;import com.kuangshen.lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.util.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class TestInsert {public static void main(String[] args) {Connection conn=null;PreparedStatement st=null;try {conn= JdbcUtils.getConnection();//区别//使用?占位符代替参数String sql= "INSERT INTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) VALUES(?,?,?,?,?)";st= conn.prepareStatement(sql);//预编译,先写SQL,不执行st.setInt(1,5);st.setString(2,"铭基");st.setString(3,"231");st.setString(4,"139z@qq,com");//注意点:util.Date  java//      sql.Date   数据库 new Date().getTime()获得时间戳     java.sql.Date()通过它转化为数据库的时间st.setDate(5,new java.sql.Date(new Date().getTime()));//执行int i= st.executeUpdate();if (i>0){System.out.println("插入成功");}else {System.out.println("插入失败");}} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtils.release(conn,st,null);}}}

2.删除

package com.kuangshen.lesson03;import com.kuangshen.lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;public class TestDelete {public static void main(String[] args) {Connection conn=null;PreparedStatement st=null;try {conn= JdbcUtils.getConnection();//区别//使用?占位符代替参数String sql= "DELETE FROM users where id =?";st= conn.prepareStatement(sql);//预编译,先写SQL,不执行st.setInt(1,4);//执行int i= st.executeUpdate();if (i>0){System.out.println("删除成功,共影响"+i+"行");}else {System.out.println("删除失败");}} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtils.release(conn,st,null);}}
}

3.修改

package com.kuangshen.lesson03;import com.kuangshen.lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class TestUpdate {public static void main(String[] args) {Connection conn=null;PreparedStatement st=null;try {conn= JdbcUtils.getConnection();//区别//使用?占位符代替参数String sql= "Update users set NAME =? where id=?";st= conn.prepareStatement(sql);//预编译,先写SQL,不执行st.setString(1,"基基");st.setInt(2,1);//执行int i= st.executeUpdate();if (i>0){System.out.println("修改成功,共影响"+i+"行");}else {System.out.println("修改失败");}} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtils.release(conn,st,null);}}
}

4.查询

package com.kuangshen.lesson03;import com.kuangshen.lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;public class TestSelect {public static void main(String[] args) {Connection conn=null;PreparedStatement st=null;ResultSet rs =null;try {conn= JdbcUtils.getConnection();//区别//使用?占位符代替参数String sql= "SELECT `NAME` from users where id =?";st= conn.prepareStatement(sql);//预编译,先写SQL,不执行st.setInt(1,1);//执行rs= st.executeQuery();while (rs.next()){System.out.println(rs.getString("NAME"));}} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtils.release(conn,st,null);}}
}

防止SQL注入

preparedStatement

使用IDEA连接数据库

 

 数据库连接池

 

 

 

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...