【JDBC笔记】JDBC快速入门

JDBC:java database connectivity java连接数据库。

sun公司定义了操作了所有关系型数据库的规则(接口)

使用统一java代码,可以操作所有的关系型数据库。

每个数据库厂商都实现接口,提供数据库驱动jar包,真正执行的代码是驱动jar包中的实现类。


步骤:

1、导入驱动jar包

建目录->粘包->add as Library

2、注册驱动(可以不写)

3、获取数据库的连接对象Connection

4、定义sql

5、获取执行sql语句的对象 Statement

6.执行sql,执行返回结果

7、处理结果

8、释放资源


DriveManager:驱动管理对象

功能:

注册驱动(告诉程序应该使用哪一个数据库驱动jar包)

static void registerDriver(Driver driver):注册给定的驱动程序DriveManager

写法:Class.forName("com.mysql.jdbc.Driver");

原理:通过查看源码,发现在com.mysql.jdbc.Driver存在静态代码块,调用了DriveManager的registerDriver方法

(mysql 5后不需要注册驱动,自动注册驱动,建议写上)

获取数据库连接

static Connection getConnection(String url,String user,String password)

url:指定连接的路径 

语法:jdbc:mysql://ip地址:端口号/数据库名称

如果连接的是本机的mysql服务器,并且mysql服务默认端口3306.则url可简写为:

jdbc:mysql:///数据库名称

Connection:数据库连接对象

获取执行sql的对象:

Statement createStatement()

PrepareStatement prepareStatement(String sql)

管理事务:

*开启事务

setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务

*提交事务

commit()

*回滚事务

rollback()

Statement:用于执行静态sql语句

执行sql:

int executeUpdate(String sql):执行DML(insert,update,delete)语句,DDL(创建,删除)语句

返回值:影响的行数

可以通过影响的行数判断DML语句是否成功(>0)

ResultaSet executeQuery(String sql):执行DQL(select)语句

ResultSet:结果集对象,封装查询结果

游标一开始在表头位置

boolean next():游标向下移动一行,判断是否有数据

getXxx():获取数据。Xxx代表数据类型

getInt,getString,get....

参数:

传入int 代表列的编号(从1开始)

传入String 代表列的名称  getString("sex")

ResultSet遍历:

JDBC工具类:JDBCUtils(简化书写)

public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    //配置文件只读取一次,静态代码块
    static{
        //读取资源文件,获取值
        Properties properties=new Properties();
        //加载文件
        try {
            properties.load(new FileReader("src/jdbc.properties"));
            url=properties.getProperty("url");
            user=properties.getProperty("user");
            password=properties.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取连接
    public static Connection getConnection()  {
        try {
            return DriverManager.getConnection(url,user,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    //释放资源
    public static void close(Statement st,Connection ct){
        if(st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(ct!=null){
            try {
                ct.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(ResultSet rs,Statement st,Connection ct){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        close(st,ct);
    }

}

PreparedStatement:执行sql对象

SQL注入问题:

在拼接sql时,有一些sql特殊的关键字参与字符串的拼接,会造成安全问题

解决:使用PreparedStatement表示对象,执行预编译的sql语句(参数使用?作为占位符)

定义时sql参数使用?作为占位符

select *from user where username = ? and password = ?

获取执行sql语句的对象

PrepareStatement pre=Connection.prepareStatement(String sql);

 给?赋值:

setXxx(参数1,参数2)
//参数1:?位置
//参数2:?值

执行sql:不需要传递sql

 注意:后期都会使用preparedstatement进行增删改查。

猜你喜欢

转载自blog.csdn.net/m0_52043808/article/details/123952340