JDBC学习一

JDBC:JavaDatabase Connectivity SUN公司提供的一套操作数据库的标准规范。JDBC(JavaDatabase Connectivity)表示Java查询引擎连接,由一组用Java编程语言编写的类和接口组成。JDBC为Java程序访问关系型查询引擎提供了编程接口,为查询引擎开发人员提供了一个标准的API,使他们能够用JavaAPI 来编写查询引擎应用程序,而不必为访问不同查询引擎编写不同的程序。JDBC与数据库驱动的关系:接口与实现的关系。

JDBC核心四大对象

 DriverManager:用于注册驱动

 Connection: 表示与数据库创建的连接

 Statement: 操作数据库sql语句的对象

 ResultSet: 结果集或一张虚拟表

JDBC规范定义:java.sql.*; javax.sql.*;

 

例:创建java项目,添加mysql数据库驱动

              id  name    password  email            register_date  
              ------  ------  --------  ---------------  --------------------------
             1  aa      111111    aa@suanmiao.com  2018-07-18     
             3  cc      111111    aa@suanmiao.com  2018-07-18     
             4  dd      111111    aa@suanmiao.com  2018-07-18     

注:这里准备一张数据表,数据如上。

package com.java12.jdbc.intro;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class JDBCIntro {
	/**
	 * DirverManager:用于注册驱动
	 * Connection:表示与数据库创建的连接
	 * Statement: 操作数据库sql语句的对象
	 * ResultSet:结果集或一张虚拟表
	 * @param args
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws SQLException, ClassNotFoundException {
		//1.告诉app 使用的是什么数据库 ->通过注册驱动的形式告诉app使用的是什么数据库
		//不建议使用,因为registerDriver 的静态方法里可能会注册一次驱动,如果环境变量里配置了jdbc.driver的话 在getConnection的时候通过class.forname往虚拟机注册了一次驱动
		//DriverManager.registerDriver(new Driver());
		//Class.forName("com.mysql.jdbc.Driver");  //利用反射机制 构建mysql驱动程序
		//2.知道是什么数据库之后,可以进行连接数据库,按照数据库的格式
		
		//jdbc4.0以后,不需要显示的加载数据库的驱动
		Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root","root");
		//3.连接上数据库后,进行操作数据库
		Statement createStatement = connection.createStatement();
		//4.操作完成后,将返回的结果进行处理
		ResultSet res = createStatement.executeQuery("select * from users");
		//5.处理完毕,关闭数据库连接
		while(res.next()) {
		String name = res.getString(1);
		String pwd = res.getString(2);
		String enail = res.getString(3);
		String date = res.getString(4);
		String date1 = res.getString(5);
		System.out.println(name+" "+pwd+" "+enail+" "+date+" "+date1);
		}
		
		res.close();
		createStatement.close();
		connection.close();
	}
}

注:getString获取到的下表是从1开始,而不是从0。

  jdbc4.0 以后,不需要显示的加载数据库的驱动 jdbc4.0规范,也就是说不与要class.forname//DriverManager.registerDriver

 

DriverManager

DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用,因为将导致驱动被注册两次,(查看原码:静态代码块执行一次,getConnection用到一次);强烈依赖数据库的驱动jar包(没有jar包将直接报错)

解决办法:

Class.forName("类名")的主要作用是向虚拟机实例化一个Class实例

Class.forName("com.mysql.jdbc.Driver");     在 com.mysql.jdbc.Driver中有一段静态代码块,是向 DriverManager注册一个Driver实例。这样在Class.forName("com.mysql.jdbc.Driver")的时候,就会首先去执行这个静态代码块。

Connection java.sql.DriverManager.getConnection(String url, String user, 
                                        String password) throws SQLException


public static Connection getConnection(String url,
                                       String user,
                                       String password)
                                throws SQLException

获取连接方式

一,getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "root");

        URL:SUN公司与数据库厂商之间的一种协议。

        jdbc:mysql://localhost:3306/jdbc

       协议 子协议  IP :端口号 数据库

      mysql: jdbc:mysql://localhost:3306/jdbc 或者 jdbc:mysql:///day14(默认本机连接可省略localhost)

 

Statement

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。 ResultSet  executeQuery(String sql) 根据查询语句返回结果集。只能执行select语句。 方法 executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。 boolean execute(String sql)  此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;

ResultSet

提供一个游标,默认游标指向结果集第一行之前。

调用一次next(),游标向下移动一行。

提供一些get方法。

封装数据的方法

ObjectgetObject(int columnIndex); 根据序号取值,索引从1开始

ObjectgetObject(String ColomnName); 根据列名取值。

boolean next() 将光标从当前位置向下移动一行

int getInt(int colIndex)   以int形式获取ResultSet结果集当前行指定列号值

int getInt(String colLabel)      以int形式获取ResultSet结果集当前行指定列名值

float getFloat(int colIndex)     以float形式获取ResultSet结果集当前行指定列号值

float getFloat(String colLabel)       以float形式获取ResultSet结果集当前行指定列名值

String getString(int colIndex) 以String 形式获取ResultSet结果集当前行指定列号值

String getString(String colLabel)   以String形式获取ResultSet结果集当前行指定列名值

boolean next()       将光标从当前位置向前移一行。 boolean previous()        将光标移动到此 ResultSet 对象的上一行。

boolean absolute(int row) 参数是当前行的索引,从1开始      根据行的索引定位移动的指定索引行。

void afterLast()     将光标移动到末尾,正好位于最后一行之后。

void beforeFirst()   将光标移动到开头,正好位于第一行之前。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值