JDBC
1.概述
jdbc(Java Database Connectivity)java数据库连接,是一种专门用java语言实现数据库的标准,我们所说的JDBC是面向关系型数据库的。
数据库分为关系型数据库和非关系型数据库。关系型数据库比如有MySQL,Oracle,SQL Service,DB2等,非关系型数据库有Redis,Nosql等
2.使用步骤
导入jar包(存放了大量java工具类的压缩包)
使用工具类,连接数据库
通过程序发起SQL,操作数据库
数据库把结果返回给java程序
java程序解析结果
1.使用IDEA导入mysql-connector-java的jar包
这是一个Maven项目,直接在pom.xml中导入mysql连接java的依赖包,就可以使用JDBC的功能
2.创建数据库、表,使用SQLyog工具
USE cgb2106;
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
PASSWORD VARCHAR(10)
);
INSERT INTO USER VALUES(NULL,'jack','123456');
INSERT INTO USER VALUES(NULL,'rose','123')
SELECT * FROM USER
3.数据库实现了数据的持久化,在java程序中处理数据,一般步骤:
1)注册驱动
2)获取连接
3)获取传输器
4)执行SQL语句
5)处理结果集
6)释放资源
3.模拟登录功能
下面是代码:
package cn.tedu.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
//JDBC连接数据库,模拟用户登录的功能
public class Test1 {
public static void main(String[] args) throws Exception {
method();//根据用户名和密码登录的方法
}
private static void method() throws Exception {
//1.获取驱动,使用反射的技术
Class.forName("com.mysql.jdbc.Driver");
//2,获取mysql连接url,用户名和密码
//jdbc:数据库类型:主机IP:端口号/数据库名?characterEncoding=编码
String url="jdbc:mysql://localhost:3306/cgb2106?characterEncoding=utf8";
Connection c = DriverManager.getConnection(url, "root", "123456");
System.out.println("请输入用户名:");
String name=new Scanner(System.in).nextLine();
System.out.println("请输入密码:");
String pwd=new Scanner(System.in).nextLine();
//SQL骨架,执行SQL语句
String sql="select * from user where name=? and password=?";
//3.获取传输器
/**PreparedStatement和Statement传输器的区别
* Statement传输器低效,不安全,可能会出现SQL注入攻击的现象,比如#在Mysql中是注释的意思
* 因此这里使用prepareStatement传输器高效,安全*/
try{
PreparedStatement ps = c.prepareStatement(sql);
//4.给字段赋值
ps.setString(1,name);
ps.setString(2,pwd);
//5.处理结果集
ResultSet r = ps.executeQuery();//执行查询的方法
if(r.next()){//判断是否有下一个可执行语句
System.out.println("登陆成功啦~");
}else{
System.out.println("请输入正确的用户名和密码~");
}
//6.释放资源
r.close();
ps.close();
c.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
4.注意事项
1.首先一定要导入jar包(工具类),不然JDBC的功能无法实现
2.防止中文乱码:可以将字符集设置为utf-8在url后面加?characterEncoding=utf8
//jdbc:数据库类型:主机IP:端口号/数据库名?characterEncoding=编码
例如:String url=“jdbc:mysql://localhost:3306/cgb2106?characterEncoding=utf8” ;
3.sql注入
使用高级的传输器PreparedStatement,是预编译的,对于批量处理可以大大提高效率,安全
Statment是低级的传输器,不安全,可能会出现SQL注入攻击的现象,比如当用户输入了特殊数据时
//当用户名输入了jack’# 时候,SQL中出现了特殊符号#,在SQL里表示注释的意思
//只需要输入用户名正确,不需要密码也能登录
//SQL语义变了:SELECT * FROM USER WHERE NAME=‘jack’#’ AND PASSWORD=‘123456’
4,最后记得要释放资源,使用close()方法