JDBC基础使用

本文详细介绍了Java中JDBC的驱动注册、连接获取、Statement与PreparedStatement的区别,以及如何防止SQL注入,并演示了如何处理不同类型的查询结果和资源的正确关闭。

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值