MySql数据库连接代码

Java数据库连接代码

//其实这句话也可以不用写,会在META-INF文件夹下存在
 Class.forName("com.mysql.jdbc.Driver");
        Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc","root","123456");
        //这个我们用的是preparedStatement,如过想用statement,代码如下,但是用statement会出现sql注入问题和效率问题,一般情况下都是使用,preparedStatement
        PreparedStatement ps =connection.prepareStatement(sql);
        //编写sql语句
          String sql ="select * from student";
         // 执行sql代码
        ResultSet resultSet = ps.executeQuery();
        //根据数据库中的字段名获取数据库中的数据,这个和集合中的迭代器对象差不多
        while (resultSet.next()){
            System.out.println(resultSet.getInt("id"));
            System.out.println(resultSet.getString("name"));
            System.out.println(resultSet.getInt("age"));
            System.out.println(resultSet.getDate("birthday"));
        }
                //释放资源
       if(ps != null){
            try{
                ps.close();
            }catch(Exception e){
            }
            ps = null;  //断开栈中变量和堆中对象的引用关系,堆中对象可以被gc快速回收
        }
        ps.close();

这是mysql不用加载驱动的原因,在jar包中会自动执行
在数据库5.0过后会自动加载数据库驱动,就在META-INF文件夹下jj

MySql 常见对象

DriverManager

  • Connection
  • Statement
  • PreparedStatement
  • ResultSet

1、DriverManager
功能一:注册驱动
注册驱动真实代码:

DriverManager.registerDriver(new Driver());

com.mysql.jdbc.Driver类内部代码,因为在Driver中存在静态代码块,所以直接执行 Class.forName(“com.mysql.jdbc.Driver”);就会在Driver类加载的时候执行.不需要再创建对象,执行注册驱动动作.

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

通过Driver的内部代码,我们可以知道,在new Driver()对象时,已经完成注册,所以DriverManager.registerDriver(new Driver())操作会造成
取动重复注册,但是如果new() 对象,存在问题

new Driver(); – 可以注册,但是会产生一个垃圾对象

Driver.class – 这种方式获取的类的字节码对象是一个半成品,类的初始化并没有执行(static静态代码块没有执行,仅仅只是创建了静态变量)

功能二:获取连接

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1","root","root");

2、Connection
功能一:获取执行sql的对象

Statement createStatement(); 这个对象存在sql注入安全问题和效s率问题
PreparedStatement prepareStatement(String sql); // sql 是一个预编译的sql语句,他的所有参数通过?占位 不会出现注入问题,而且sql是预编译,执行的速度也是比较快的.

功能二:执行事务管理

  • setAutoCommit(false) ; //开启事务
    commit(); // 提交事务
    rollback(); // 回滚事务
try{
    //开启事务
    conn.setAutoCommit(false);
    //执行一组关联的sql操作
    dao1.xx(conn);
    dao2.yy(conn); 
    //提交事务
    conn.commit();
}catch(Exception e){
    //回滚事务
    conn.rollback();
}

注意:事务控制的代码应该放在Service层,因为只有在Service层获取的Connection对象,才能保证多个Dao操作使用的是同一个,这样才能保证是同一个事务

3、Statement
功能一:执行sql语句

Statement 这个对象存在sql注入安全问题和效s率问题

  • int executeUpdate(String sql);
    这个可以执行增删改查的操作
  • ResultSet executeQuery(String sql);
    这个执行查询的操作

4、PreparedStatement
功能一:执行sql语句

PreparedStatement prepareStatement(String sql); // sql 是一个预编译的sql语句,他的所有参数通过?占位 不会出现注入问题,而且sql是预编译,执行的速度也是比较快的.

  • int executeUpdate();
  • ResultSet executeQuery();
    在执行操作之前,一定要给预编译的sql中的?赋值

** 5、ResultSet**
功能一:解析结果

 //根据数据库中的字段名获取数据库中的数据,这个和集合中的迭代器对象差不多
while (resultSet.next()){
    System.out.println(resultSet.getInt("id"));
    System.out.println(resultSet.getString("name"));
    System.out.println(resultSet.getInt("age"));
    System.out.println(resultSet.getDate("birthday"));
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值