• JDBC的理解:

JDBC是允许便捷式访问底层数据库的应用程序接口,JDO、Hibernate、MyBatis等只是更好的封装了JDBC。

  • JDBC的连接步骤:

1、注册驱动:

//反射机制
Class.forName("com.mysql.jdbc.Driver");

2、获取连接:

//可使用.properties配置文件来声明URL, USERNAME, PASSWORD
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);

3、获取预编译数据库操作对象:

// Statement ps = con.createStatement();
String sql = "sql语句";
PreparedStatement ps = con.prepareStatement(sql);

4、执行SQL:

ResultSet rs = ps.executeUpdate();

5、处理结果集

6、释放资源:(顺序执行)

rs.close();
ps.close();
con.close();
  • PreparedStatement与Statement的区别:

1、PreparedStatement对象所代表的SQL语句中的参数用问号(?)来表示,执行效率高,能够避免sql注入,更安全。

2、Statement对象所代表的SQL语句中的参数不使用占位符表示,执行效率低,有sql注入的风险,缺乏安全性。

  • SQL注入的现象与解决方案:

1、SQL注入现象:

用户输入信息含有SQL语句的关键字,并且参与了sql的编译过程,导致sql语句原意扭曲。

2、解决办法:

采用PrepareStatement对sql语句框架进行预编译,再传值。

  • JDBC使用:

相关资料 密码:007j

1、调用工具类:

//JDBC工具库

import java.sql.*;
// JdbcUtil obj = new JdbcUtil(); obj.getCon()
// JdbcUtil obj = new JdbcUtil(); obj.createStatement();
// JdbcUtil.getCon();
public class JdbcUtil {
//final String URL="jdbc:mysql://localhost:3306/数据库名";
final String URL="jdbc:mysql://localhost:3306/student";
final String USERNAME="root";
//final String PASSWORD="密码";
final String PASSWORD="123456";
PreparedStatement ps= null;
Connection con = null; //注册驱动:将jar包中driver实现类加载到JVM中
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} //获取连接:封装连接通道创建细节
public Connection getCon(){ try {
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
} //获取预编译数据库操作对象:封装交通工具创建细节(预编译)
public PreparedStatement createStatement(String sql){ try {
ps = getCon().prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return ps;
}
//释放资源:ps与con销毁细节 insert,update,delete
public void close(){
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
} } //select: ps,con,rs
public void close(ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
close();
}
}

2、业务逻辑层:

   //JDBC封装库
private JdbcUtil util = new JdbcUtil(); @Override
//用户注册(SqlName:实体类)
public int add(SqlName sqlName) {
String sql = "insert into users(userName,pword)" + " values(?,?)";
//预编译
PreparedStatement ps = util.createStatement(sql);
int result = 0;
try {
//获取参数
ps.setString(1, sqlName.getUserName());
ps.setString(2, sqlName.getPword());
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.close();
}
return result;
}

JDBC基础学习笔记的更多相关文章

  1. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  2. Maven基础学习笔记

    Maven基础学习笔记 下载链接 官网:https://maven.apache.org/ 所有版本:https://archive.apache.org/dist/maven/maven-3/ 阿里 ...

  3. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  4. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  5. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

  6. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  7. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  8. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  9. C#RabbitMQ基础学习笔记

    RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...

随机推荐

  1. 关于VirtualBox在新建虚拟机时-选择操作系统类型后没有64位的版本选项

    今天笔者准备使用VirtualBox安装一台windows的虚拟时,在选项操作系统类型为Microsoft Windows后 发现下面的版本选择中,没有之前看到的64位选择,全是32位的,但实际昨天都 ...

  2. HDU3506 Monkey Party (区间DP)

    一道好题...... 首先要将环形转化为线形结构,接着就是标准的区间DP,但这样的话复杂度为O(n3),n<=1000,要超时,所以要考虑优化. dp[i][j]=min( dp[i][k]+d ...

  3. 洛谷P4513 小白逛公园 (线段树)

    这道题看起来像是线段树和最大子段和的结合,但这里求最大子段和不用dp,充分利用线段树递归的优势来处理.个人理解:线段树相当于把求整个区间的最大子段和的问题不断划分为很多个小问题,容易解决小问题,然后递 ...

  4. MyBatis的各种查询功能

    1.查询一个实体类对象 /** * 根据用户id查询用户信息 * @param id * @return */ User getUserById(@Param("id") int ...

  5. 5.ElasticSearch系列之文档的基本操作

    1. 文档写入 # create document. 自动生成 _id POST users/_doc { "user" : "shenjian", " ...

  6. 消除两个inline-block元素之间的间隔

    发现问题 两个inline-block元素之间的间隔.如下图 期望 消除两个inline-block元素之间的间隔. 解决方法 1.父元素字体大小设置为0 间隔的形成是非元素标签形成的 /** 方案1 ...

  7. wampServer配置WWW根目录遇到的坑

    直接在官网下载之后开始安装,一切正常 打开使用,一切正常 设置WWW目录.坑了一波 按照的都是百度上的教程,设置httpd.conf 这里配置之后网页访问127.0.0.1 还是localhost都还 ...

  8. `<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java

    <jsp:getProperty>动作和<jsp:setProperty>动作的使用 1.<jsp:getProperty>动作 语法格式: <jsp:get ...

  9. C语言二叉树遍历及路径查找

    #include<iostream> #include<stdio.h> #include<math.h> #include<malloc.h> usi ...

  10. JavaScript 默认参数、动态参数、剩余参数

    默认参数: <script> function selet(num, max) { console.log(num + max); } selet(1, 5); </script&g ...