mysql数据库之jdbc初识

来源:互联网 发布:java bigdecimal 长度 编辑:程序博客网 时间:2024/05/17 00:03

JDBC

JDBC(java data base connectivityjava数据库连接)是一种用于执行sql语句的java api.jdbcjava访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,由一组用java语言编写的接口和类组成.

Jdbc需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定.设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信.mysql的驱动mysql-connector-java-5.1.37-bin.jar,

 

JDBC原理:

Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动.JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库.每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是驱动一般都是由数据库生成厂商提供.

使用jdbc的开发步骤:

注册驱动;

获得连接;

获得语句执行平台

执行sql语句

处理结果

释放资源

 

注册驱动:

Class.forName(“com.mysql.jdbc.Driver”);

获得连接:

String url=”jdbc:mysql://localhost:3306/mydb”;

Connection conn=DriverManager.getConnection(url,”root”,”root”);

获得语句执行者:

Statement st=conn.createStatement();

执行sql语句:

Result rs=st.executeQuery(“select * from catagory”);

处理结果集:

While(rs.next()){

Integer cid=rs.getInt(“cid”);

String name=rs.getString(“name”);

}

释放资源:

rs.close();

st.close();

conn.close();

 

注册驱动详解:

Class.forname(“com.mysql.jdbc.Driver”);

Jdbc规定定义驱动接口:java.sql.Driver,mysql驱动包提供了实现类:com.mysql.jdbc.Driver

DriverManager工具类,提供注册驱动的方法registerDriver(),方法的参数是java.sql.Driver,所以我们可以通过如下语句进行注册:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

通常开发中,我们不实用,存在不足:

硬编码,后期不易于程序扩展和维护

驱动被注册两次

通常我们使用Class.forName()加载一个使用字符串描述的驱动类.如果使用Class.forName()将类加载到内存中,该类的静态代码将自动执行.通过查询com.mysql.jdbc,Driver源码,Driver”主动”将自己进行注册

 

获得连接:

获得连接需要方法DriverManager.getConnection(url,username,password),三个参数分别表示,url需要连接数据库的位置(网址) user 用户名  password密码

Url的格式为:url=jdbc:mysql://localhost:3306/mydb

第一二部分是固定的:jdbc:mysql://

第三部分是由数据库厂商规定的,mysql的第三部分分别由数据库服务器的IP地址(localhost).端口号(3306),以及DataBase名称(mydb)组成.

 

获得语句执行平台:

String sql=”sql语句”;

获取statement语句执行平台:statement stmt=conn.createStatement();

常用方法:

int executeUpdate(String sql);执行 insert update delete语句

Result executeQuery(String sql)  执行select语句;

Boolean execute(String sql)  执行select返回true执行其他的语句返回false.

 

处理结果集(执行insert update delete无需处理结果):

ResultSet实际上是一张二维的表格,可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据.

rs.next();//指向第一行

Rs.getInt(1);//获取第一行第一列的数据;

常用方法:

Object getObject(int index) /Object getObject(String name) 获得任意对象

String getString(int index) /Object getObject(String name)获得字符串

Int getInt(int index) /Object getObject(String name) 获得整型

Double getDouble(int index) /Object getObject(String name) 获得双精度浮点型

 

释放资源:

IO 流一样,使用后的东西都需要关闭.关闭的顺序是先得到的后关闭,后得到的先关闭;

rs.close();

stmt.close();

conn.close();

 

sql注入问题.

Sql注入:用户输入的内容作为了sql语句语法的一部分,改变了原有sql真正的意义.:

Select * FROM 用户表 where name =用户输入的用户名 and password =用户输入的密码;

若用户输入,用户名xxx,密码为xxx or‘a’ =’a’ ,真正的执行语句就是:

Select * from 用户表 where name =’xxx’ and password=’xxx’ or ‘a’= ‘a';

这就是sql注入的问题;

为此,我们使用PreparedStatement来解决对应的问题。

预处理对象:

preparedStatement预处理对象,处理的每条sql语句中所有的实际参数,都必须使用占位符?替换.

String sql=”select * from user where username = ? and password = ?”;

preparedStatement使用,需要通过三部完成:

preparedStatement预处理对象代码:

PreparedStatement psmt=conn.preparedStatement(sql);

设置实际参数:

Void setXxx(int index,Xxx xx)将指定参数设置指定类型的值

参数一:index 实际参数序列号,1开始;

参数二:xxx,实际参数值,xxx表示具体的类型.

SetString(2,”11234”) sql语句中第2个位置的占位符?替换成实际参数”1234”;

执行sql语句:

Int executeUpdate();---执行insert update delete语句

ResultSet executeQuery();---执行select语句

Boolean execute();---执行select返回true执行其他的语句返回false.

 

 

 一般我们使用jdbc的时候,都是一个utils,我们可以在网上找到一个utils,直接修改url就可以使用了.以后会更新一个utils的

 

 

 

原创粉丝点击