简介JDBC

JDBC:

介绍:

jdbc:简而言之就是java语言操作数据库(jdbc是用Java语言向数据库发送SQL语句)。

 原理:

 JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

 jdbc核心API中常用类:

DriverManager、Connection、Statement,和ResultSet(核心)

  • DriverManager(驱动管理器):

 作用:

  1. 注册驱动:这可以让JDBC知道要使用的是哪个驱动;

  2. 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。

  •  Connection(连接:用来接收驱动管理器获得的连接)

对象表示连接,与数据库的通讯都是通过这个对象展开的。

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "root");

  •  Statement(推荐PreparedStatement其子类接口

 Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句:

  1. int executeUpdate(String sql):执行更新操作,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句;

  2. ResultSet executeQuery(String sql):执行查询select操作,执行查询操作会返回ResultSet,即结果集。

  3. boolean execute() 了解!可以执行executeUpdate()和executeQuery()两个方法能执行的sql语句,这个方法可以用来执行增、删、改、查所有SQL语句。该方法返回的是boolean类型,表示SQL语句是否有结果集!。如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数。如果使用execute()方法执行的是查询语句,那么还要调用ResultSet getResultSet()来获取select语句的查询结果。

  •  ResultSet(核心)

 对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:

  1. boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;

  2. XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。

  3. ResultSet还提供了一套通过列名称来获取列数据的方法:

  • tring getString(String columnName):获取名称为columnName的列的String数据;

  • int getInt(String columnName):获取名称为columnName的列的int数据;

  • double getDouble(String columnName):获取名称为columnName的列的double数据;

  • boolean getBoolean(String columnName):获取名称为columnName的列的boolean数据;

  • Object getObject(String columnName):获取名称为columnName的列的Object数据

  • java.sql.Date getDate(String columnName): 获取名称为columnName的列的java.sql.Date类型的数据


 JDBC入门程序步骤:

  1. 导jar包:驱动!
  2. 加载驱动类:Class.forName(“类名”);

  3. 给出url、username、password

  4. 使用DriverManager类来得到Connection对象!

    1. 使用Connection得到Statement对象

      1. 使用Statement对象对数据库进行增删改查操作

      2. 关闭资源

  1.  导入mysql的驱动jar:(在idea中导入mysql的驱动jar: mysql-connector-java-5.1.47.jar )
  2. 获取连接:

    1.看清楚了,加载驱动类就只有一句话:Class.forName("com.mysql.jdbc.Driver"),今后我们的代码中,与加载驱动类相关的代码只有这一句。

    2.获取连接的也只有一句代码:DriverManager.getConnection(url,username,password),其中username和password是登录数据库的用户名和密码. url查对复杂一点,它是用来找到要连接数据库“网址”,就好比你要浏览器中查找百度时,也需要提供一个url。下面是mysql的url:

  3.  获取statement

    在得到Connectoin之后,说明已经与数据库连接上了,下面是通过Connection获取Statement对象的代码:

    Statement stmt = con.createStatement();

    Statement是用来向数据库发送要执行的SQL语句的!(会出现SQL攻击)

    所以用:

    PreparedStatement

    String sql = “select * from tab_user where username=? and password=?”;
    PreparedStatement pstmt = con.prepareStatement(sql)

    在使用Connection创建PreparedSt
    atement对象时需要给出一个SQL模板
    ,所谓SQL模板就是有“?”的SQL语句,
    其中“?”就是参数。
    
    在得到PreparedStatement对象后,
    调用它的setXXX()方法为“?”赋值,
    这样就可以得到把模板变成
    一条完整的SQL语句,然后再调用
    PreparedStatement对象的executeQuery()
    方法获取ResultSet对象。
    
    注意PreparedStatement对象独有的executeQuery()方法
    是没有参数的,而Statement的executeQuery()是需要参数(SQL语句)的。
    因为在创建PreparedStatement对象时已经让它与一条SQL模板绑定在一起了,
    所以在调用它的executeQuery()和executeUpdate()方法时就不再需要参数了。
    
    PreparedStatement最大的好处就是在于重复使用同一模板,给予其不同的参
    数来重复的使用它。这才是真正提高效率的原因。

  4. 发送CURD的sql语句

    调用Statement中的方法发送执行

    PreparedStatement是Statement的子类接口

    重要方法:

    Statement最为重要的方法是:

    1. int executeUpdate(String sql):执行更新操作,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句;

    2. ResultSet executeQuery(String sql):执行查询select操作,执行查询操作会返回ResultSet,即结果集。

    3. boolean execute() 了解!可以执行executeUpdate()和executeQuery()两个方法能执行的sql语句,这个方法可以用来执行增、删、改、查所有SQL语句。该方法返回的是boolean类型,表示SQL语句是否有结果集!。如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数。如果使用execute()方法执行的是查询语句,那么还要调用ResultSet getResultSet()来获取select语句的查询结果。

  5. 关闭资源 (调用close方法即可)
PreparedStatement的使用:
  1. 使用Connection的prepareStatement(String sql):即创建它时就让它与一条SQL模板绑定;

  2. 调用PreparedStatement的setXXX()系列方法为问号设置值

  3. 调用executeUpdate()或executeQuery()方法,但要注意,调用没有参数的方法;

String sql = “select * from tab_user where username=? and password=?”;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, “zs”);
pstmt.setString(2, “zs”);
ResultSet rs = pstmt.executeQuery();
rs.close();

pstmt.clearParameters();//再次使用时需要把原来的设置的参数清空。

pstmt.setString(1, “a' or '1'='1”);
pstmt.setString(1, “a' or '1'='1”);
rs = pstmt.executeQuery();

JdbcUtil工具类:

连接数据库的四大参数是:驱动类、url、用户名,以及密码。这些参数都与特定数据库关联,如果将来想更改数据库,那么就要去修改这四大参数,那么为了不去修改代码,我们写一个JdbcUtils类,让它从配置文件中读取配置参数,然后创建连接对象。

 代码实现

public class JdbcUtils {
	private static final String dbconfig = "dbconfig.properties";
	private static Properties prop = new Properties();
	static {
		try {
			InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(dbconfig);
			prop.load(in);
			Class.forName(prop.getProperty("driverClassName"));
		} catch(IOException e) {
			throw new RuntimeException(e);
		}
	}

	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(prop.getProperty("url"),
					prop.getProperty("username"), prop.getProperty("password"));
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

  1. 我们的static代码块是把配置文件内容加载到prop对象中。因为是放到static块中完成的加载操作,所以加载操作只会在JdbcUtil类被加载时完成对配置文件的加载。避免重复加载配置文件.

  2. 获取Connection方法,参数都是从prop中获取。

 dbconfig.properties:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=root 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值