JDBC
1、什么是JDBC?
JDBC是Java Database Connectivity(Java数据库连接),简单来说就是使用Java里面提供的一些类和方法,利于程序连接数据库,进行增删改查操作,这个过程叫做JDBC编程。
2、使用的是数据库MySQL5.7,了解MySQL的一些简单操作
在MySQL命令行里
1、 显示数据库:show datebases;
2、新建数据库:create database web01(数据库名,可自行定义)
3、删除数据库:drop database web01
4、进入某一个数据库:use web01;
5、查看wed01数据库:select database();
6、 建表并把id设置为主键,name,password:create table user(id int primary key auto_increment,username varchar(16),password varchar(16));
7、显示表:show table;
8、删除表:drop database web01;
9、查看表结构:desc user;
10、插入数据:insert into user values(null,‘xinbai’,‘123’);
【说明】:若插入的名字中含有中文,你需要修改表的结构为utf-8
alter table user default character set utf8;
alter table user change username username varchar(16) character set utf8;
11、查询表中的数据: select *from user;
12、删除数据:delete from user;
这里要注意,若要删除会导致表中所有的信息都删除。如果只有删除一个信息,可以使用id(delete from user where id=4;)
13、更新数据:update user set id=4 where username=‘新白’;
14、修改表的名字:rename table user to user01;
3、异常
异常的描述与处理
4、怎么导入jar包?
步骤:新建一个类为JDBC–>右击–>New–>Folder(然后命名lib)–>导入mysql-connector-java-5.0.7-bin.jar包–>右击lib下的mysql-connector-java-5.0.7-bin.jar加入到Build Path里(或者就是直接在JDBC中直接导入).
5、注册驱动
try{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("加载驱动失败!");
e.printStackTrace() ;
}
成功加载后,会将Driver类的实例注册到DriverManager类中
6、创建数据库的连接
要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,
该对象就代表一个数据库的连接,使用DriverManager的getConnectin()方法传入指定的连接的数据库的路径、数据库的用户名和密码来获得。
String url="jdbc:mysql://localhost:3306/web01?userUnicode=true&characterEncoding=UTF8&useSSL=false";//调整数据库的编码格式为UTF-8
String user="root";
String password="123456";
Connection con=DriverManager.getConnection(url,user,password);
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
7、执行sql语句
Statement statement=con.createStatement();//1
ResultSet resultSet=statement.executeQuery("select*from user");//2 这两行代码是像服务器端发起请求的,可以是增删查改
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute(使用executeUpdate(String sql)方法完成数据添加操作,使用executeUpdate(String sql)方法完成数据修改操作,使用executeUpdate(String sql)方法完成数据删除操作)
8、查询
while (resultSet.next()){//在你的那个数据库中查询,直至没有返回false就是退出循环
System.out.println(resultSet.getInt(1)+","+resultSet.getString(2)+","+resultSet.getString(3));//这个数据库中有id(int)、username(String)、password(String),三个
//System.out.println(resultSet.getInt("id")+","+resultSet.getString("username")+","+resultSet.getString("password"));//这个语句也是可以输出的,和上面的代码输出结果一样
}
9、处理异常,关闭JDBC对象资源
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
1、先关闭resultSet
2、再关闭statement
3、最后关闭连接对象con
finally{
if(resultSet!=null)
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (statement!=null)
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(con!=null)
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
【说明】:在finally关闭资源,无论try-catch中发不发生异常,finally都执行
代码:
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) {
//selectAll();
//sql 注入
//System.out.println(setlectByUsernamePassword("xlinbai", "1232 ' or '1'='1"));
//上面这个使用了错误的用户名和密码也是返回true,因为加了一个or,永真,所以返回true,这个判断不安全
System.out.println(selectBUP2("xinbai", "1223' or '1'='1"));
System.out.println(selectBUP2("xinbai","123"));
}
public static void selectAll(){
Connection con=null;
Statement statement=null;
ResultSet resultSet=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/web01?userUnicode=true&characterEncoding=UTF8&useSSL=false";
String user="root";
String password="123456";
con=DriverManager.getConnection(url,user,password);
statement=con.createStatement();//1
resultSet=statement.executeQuery("select*from user");//2 这两行代码是像服务器端发起请求的,可以是增删查改
//ResultSet resultSet2=statement.execute
while (resultSet.next()){
//System.out.println(resultSet.getInt(1)+","+resultSet.getString(2)+","+resultSet.getString(3));
System.out.println(resultSet.getInt("id")+","+resultSet.getString("username")+","+resultSet.getString("password"));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("加载驱动失败!");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(resultSet!=null)
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (statement!=null)
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(con!=null)
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static boolean setlectByUsernamePassword(String username,String password){
Connection connection=null;
Statement statement=null;
ResultSet resultSet=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/web01?userUnicode=true&characterEncoding=UTF8&useSSL=false";
connection=DriverManager.getConnection(url,"root","123456");
statement=connection.createStatement();
String sql="select *from user where username='"+username+"'and password='"+password+"'";
resultSet=statement.executeQuery(sql);
if (resultSet.next()) {
return true;
}
else return false;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("驱动注册失败");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(resultSet!=null)
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (statement!=null)
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(connection!=null)
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
public static boolean selectBUP2(String username,String password){
Connection connection=null;
PreparedStatement pstmt=null;
ResultSet resultSet=null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/web01?userUnicode=true&characterEncoding=UTF8&useSSL=false","root","123456");
String sql="select *from user where username=?and password=?";
pstmt= connection.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
resultSet=pstmt.executeQuery();
if (resultSet.next())
return true;
else return false;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("注册驱动失败");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(resultSet!=null)
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(pstmt!=null)
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (connection!=null)
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
}
输出结果:
false
true