1.注册驱动
DriverManager.registerDriver(new Driver()); //创建了两次
new Driver(); // 不能指定
Class.forName("com.mysql.cj.jdbc.Driver"); //最好的
2.获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu","root","abc123");
/*
*getConnect(1,2,3)是一个重载方法
* 核心属性
* 1.数据软件所在的主机的IP地址 : localhost | 127.0.0.1
* 2.数据软件所在的主机端口号:3306
* 3.连接的具体库
* 4.连接的账号
* 5.连接的密码
* 6.可选信息
* 三个参数:
* String url 数据库软件所在的信息,连接的具体库,以及其他可选信息
* 语法:jdbc:数据库管理软件名称[mysql,oracle]://ip地址|主机名:port/数据库名
* jdbc:mysql://127.0.0.1:3306/atguigu
* 本机3306省略版 jdbc:mysql:///atguigu
* String user 数据库的账号
* String password 数据库的密码
* 二个参数
* Properties info = new Properties();
info.put("user","root");
info.put("password","root");
* Properties: 存储账号和密码,类似map,key和value都是string类型
* url的路径属性可选信息
* url?user=账号&password=密码
* */
3.创建statement
//不安全 sql注入攻击
Statement statement = connection.createStatement();
String sql = "Select * from t_user where account = '" + account +
"' AND password = '" + password + "';";
ResultSet resultSet = statement.executeQuery(sql);
//安全
// 1、编写SQL语句结果,不包括动态值部分的语句,动态值部分使用使用占位符 ?
// 2、创建preparedstatement,并且传入动态值
// 3、动态值占位符 赋值 ? 单独赋值即可
String sql = "select * from t_user where account = ? and password = ?;";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setObject(1,account);
preparedStatement.setObject(2,password);
ResultSet resultSet = preparedStatement.executeQuery();
4.发送sql语句,并且获取返回结果
//返回改变的行数
int i = statement.executeUpdate(sql);
//返回查询结果集 也是一种类似与表的结构
ResultSet resultSet = statement.executeQuery(sql);
查询方式1 知道有几列并且列的名字确定
while (resultSet.next()) {
int id = resultSet.getInt(1);
String account1 = resultSet.getString("account");
String password1 = resultSet.getString(3);
String nickname = resultSet.getString(4);
}
查询方式2 不知道有几列
ResultSetMetaData metaData = resultSet.getMetaData();
List<Map> list = new ArrayList<>();
int columnCount = metaData.getColumnCount();
while(resultSet.next()) {
Map map = new HashMap();
for(int i = 1; i <= columnCount; ++i) {
Object value = resultSet.getObject(i);
String columnLabel = metaData.getColumnLabel();
map.put(columnLabel,value);
}
list.add(map);
}
5、释放资源
resultset.close();
statement.close();
connection.close();