本次用到的数据库名是自建的my_sql
数据库语句:
--创建数据库my_sql
create database my_sql;
--选中数据库
use my_sql;
--创建users表 三个字段
drop table if exists users;
create table users(
id int,
name varchar(20),
password varchar(20)
);
--插入一条数据
insert into users(id, name, password) values(1,'bit','123');
一、基础用法
import java.sql.*;
//JDBC开发案例
//数据库(cmd中):my_sql
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获取连接
String url="jdbc:mysql://127.0.0.1:3306/my_sql?useSSL=true";
String username="root";//数据库名称
String password="11111";//数据库密码
Connection connection=
DriverManager.getConnection(url,username,password);
//3、执行SQL语句
String sql="select * from users";//写一条SQL语句
Statement statement=connection.createStatement();
//结果集
ResultSet resultSet =statement.executeQuery(sql); //关于查询的用executeQuery
if(resultSet.next()){//resultSet指向查询到的结果集的上方,判断下一个为空吗
System.out.println(resultSet.getInt(1));//第一列是int型
System.out.println(resultSet.getString(2));//第二列是string型
System.out.println(resultSet.getString(3));//列的下标是从1开始的
}//多条语句用while
}
}
运行结果:(与上面数据库查询的对应)
二、改造进化。
将user封装成类
1.封装的类
public class User {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
2.对结果集部分进行改造(只对结果集 改造,其他没变)
import java.sql.*;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获取连接
String url="jdbc:mysql://127.0.0.1:3306/my_sql?useSSL=true";
String username="root";//数据库名称
String password="11111";//数据库密码
Connection connection=
DriverManager.getConnection(url,username,password);
//3、执行SQL语句
String sql="select * from users";//写一条SQL语句
Statement statement=connection.createStatement();
//结果集
ResultSet resultSet =statement.executeQuery(sql); //关于查询的用executeQuery
User user =new User();
if(resultSet.next()){//resultSet指向查询到的结果集的上方,判断下一个为空吗
user.setId(resultSet.getInt(1));
user.setName(resultSet.getString(2));
user.setPassword(resultSet.getString(3));
}//多条语句用while
System.out.println("查询到的数据为:"+user);
}
}
输出结果:
改造后的 where 查询示例:
输出结果:
sql注入:
出现在当你的SQL语句是字符串的情况下(如上)。
三、示例
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.*;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url="jdbc:mysql://127.0.0.1:3306/my_sql?useSSL=true";
String username="root";//数据库名称
String password="11111";//数据库密码
DataSource dataSource=new MysqlDataSource();//获取数据源(之前的加载驱动不要了)
((MysqlDataSource)dataSource).setUrl(url);
((MysqlDataSource)dataSource).setUser(username);
((MysqlDataSource)dataSource).setPassword(password);
//MysqlDataSource mysqlDataSource=new MysqlDataSource();//也可以是这样
Connection connection=dataSource.getConnection();
//3、执行SQL语句
String uname = "admin";
String upass = "123";
String sql = "select * from user where name = ? and password = ?";//占位符
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//通过这两句将占位符赋值
preparedStatement.setString(1,uname);
preparedStatement.setString(2,upass);
//System.out.println("sql:" + preparedStatement.toString());
//结果集
ResultSet resultSet = preparedStatement.executeQuery();
User user =new User();
if(resultSet.next()){
user.setId(resultSet.getInt(1));
user.setName(resultSet.getString(2));
user.setPassword(resultSet.getString(3));
}
System.out.println("查询到的数据为:"+user);
}
}