JDBC:java语言操作数据库

JDBC是什么?

JDBC(java database connectivity):java数据库连接,也称:java语言操作数据库。官方定义的一套操作所有关系型数据库的规则(一套接口),各个数据库产商要实现这套接口,提供数据库驱动jar包,我们程序猿可以使用这套接口编程(面向接口编程),真正执行的代码却是jar包中的实现类。
.

.

相关API:

java.sql包下的:
DriverManager(类):通过反射Class.foriName(com.mysql,jdbc.Driver)加载MySq厂商的实现类:com.mysql.jdbc.Driver;(类加载的时候执行一次其静态代码块(静态代码块中有执行注册驱动方法DriverManager.registerDriver(new Driver() ) ) );然后通过驱动管理对象DriverManager的getConnection(url,user,password)方法获取到Connection数据库连接对象;
Connection(接口):通过Connection数据库连接对象的方法获取Statement/PreparedStatement
Statement/PreparedStatement(接口)
ResultSet(接口)):通过执行sql对象的statement的executeQuery(sql)方法执行DQL语句获取到查询数据库后的结果集对象(常用方法有:boolean next();int getInt(列的编号));String getString(列的名称);

.

JDBC的编写流程?

1、导入JDBC驱动jar包,(导入jdbc这一套接口的诸多实现类(MySQL版本))
2、注册驱动(MySql 5 之后的驱动jar包可以省略注册驱动的步骤)

注册驱动:告诉程序应该使用哪一个数据库驱动;
驱动管理对象:DriverManager(是java.sql包下的一个类);
注册驱动的原理:

//通过反射加载MySql厂商的JDBC实现类:
Class.forName("com.mysql.jdbc.Driver);
 			//com.mysql.jdbc.Driver本身具有的静态代码块:
 			static{  //静态代码块在类加载的时候只会执行 一次,
				try{
				    //驱动管理对象注册驱动--当前mysql的Driver对象。
					DriverManager.registerDriver(new Driver())
				} catch {
					throw new RuntimeException("can't register driver ! ")
				}
			}
  1. 获取数据库连接对象(Connection:java.sql包下的一个接口)
	//获取数据库连接对象
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db4",
            "root", "root");

//DriverManager类下的获取连接方法:
static Connection getConnection(String url, String user, String password) 
+ url参数:指定连接的路径
  - 语法:jdbc:mysql://IP地址(域名):端口号/数据库名称
    - 例:jdbc:mysql://127.0.0.1:3306/db1
  - 注意事项:<font size=3 color=green>如果连接的是本机的MYSQL,并且MYSQL的端口是3306,则URL可以简写.</font>
    - 格式:<font size=3 color=green>**jdbc:mysql:///数据库名称**</font>
+ user参数:用户名
+ password参数:密码

Connection 是一个接口:数据库连接对象:
功能(方法):
1、获取指定sql语句的对象
	Statement createStatement()  
2、获取指定SQL语句的预处理对象;
	PreparedStatement prepareStatement(String sql)  
3、管理事务
	//开启事务,调用该方法设置参数为false,即开启事务
	void setAutoCommit(boolean autoCommit)
	//提交事务                                                                                                                                                                  
	void commit()
	//回滚事务
	void rollback()
	
*Statement*(接口):执行sql的对象;
//执行任意的SQL,但是根据返回值判断执行结果比较繁琐,了解即可
int execute(String sql)  

//执行DML语句(INSERT/UPDATE/DELETE)。
//执行DDL(CREATE/DROP/ALTER)语句。
int executeUpdate(String sql)  //返回的结果:受影响的行数,可以						   根据受影响的行数判断SQL语句执行是否成功。

//执行DQL语句(SELECT)返回的结果封装在ResultSet中。
ResultSet executeQuery(String sql)

**Result**(java.sql包下的一个接口):结果集对象,封装查询结果,
常用方法:
boolean next() //游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
getXxx(参数)  //获取数据    Xxx代表数据类型:   如:int getInt()    String getString()  重载方法,参数:1. int:代表列的编号,从1开始   如: getString(1)    String:代表列名称。 如: getDouble("balance") ;
使用步骤:
1. 游标向下移动一行
2. 判断是否有数据
3. 获取数据

4、. 定义要执行的SQL语句

//定义SQL语句
String sql = "UPDATE account SET balance = 2000 WHERE id = 1";

5. 获取执行SQL语句的对象(statement)

//获取执行SQL的对象
Statement statement = connection.createStatement();

6. 执行SQL语句,获取执行的结果。

//执行SQL
int count = statement.executeUpdate(sql);

7. 处理执行的结果

//打印结果
System.out.println(count);

8. 释放资源

//关闭资源
statement.close();
connection.close();

另:

PreparedStatement:执行预编译sql的对象
  • 概述:执行SQL的对象.
  • SQL注入
    • 在拼接SQL语句的时候,如果有一些SQL的特殊关键字参与了字符串的拼接,会造成安全问题。
  • 解决SQL注入的问题
    • 使用PreparedStatement对象解决。
  • 预编译SQL
    • 参数使用占位符?替代的SQL语句。
  • 定义SQL的时候使用?代替参数
  • 注意:
    • 可以防止SQL注入
    • 效率更高
public static boolean login2(String username ,String password){
        if(username == null || password == null){
            return false;
        }
        //连接数据库判断是否登录成功
        Connection conn = null;
        PreparedStatement stmt =  null;
        ResultSet rs = null;
        //1.获取连接
        try {
            conn =  JDBCUtils.getConnection();
            //2.定义sql
            String sql = "select * from user where username = ? and password = ? ";
            //3.获取执行sql的对象
            stmt = conn.prepareStatement(sql);
            //给?赋值
            stmt.setString(1,username);
            stmt.setString(2,password);
            //4.执行查询,不需要传递sql
            rs = stmt.executeQuery();
            //5.判断
            return rs.next();//如果有下一行,则返回true
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(rs,stmt,conn);
        }
        return false;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值