一,简介
JDBC即 Java Date Base Connectivity
JDBC是一种可用于执行SQL语句的Java API,是数据库和Java应用程序的纽带。
JDBC主要功能:
1.与数据库建立连接
2.执行sql语句,并返回结果集
3处理数据库返回的结果
二,开发步骤
1.建立工程
2.导入所需jar包
3.建立一个Class类
4.代码开发步骤 建立一个方法
1.加载驱动
2.建立连接
3.得到执行sql语句的Statement对象
4.执行sql语句,并返回结果集
a.查询返回的是ResultSet
b.增、删、改返回的是int类型,就是执行成功了多少条
5.处理结果集
6.关闭资源
三,数据库连接步骤
1,加载驱动
Class.forName("driver ")
Oracle
driver= “oracle.jdbc.OracleDriver”
SQL Server( 可以通过crtl+shift+t,然后输入sqlserverDrive实现)
driver= “com.microsoft.sqlserver.jdbc.SQLServerDriver”
MySql
driver= “com.mysql.jdbc.Driver”;
2,建立连接
Connection conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/mysql02","root","123456");
//其中"jdbc:mysql://localhost:3306/mysql02"为url,3306为MySql数据库的端口号,mysql02为数据库名。
// root为数据库用户名,123456为数据库密码
Oracle
url=jdbc:oracle:thin:@localhost:1521:XE
SQL Server
url=“jdbc:sqlserver://localhost:1433;DatabaseName=test”
MySql
url = “jdbc:mysql://localhost:3306/mysql02”;
3,通过Connection得到执行sql语句的Statement对象
Statement stm=conn.createStatement();
4,通过Statement去执行SQL语句,并返回结果集
ResultSet rs=stm.executeQuery("SELECT * FROM emp");//查询
int i=stm.executeUpdate("DROP TABLE emp");//增删改
5,处理结果集
//1,查询
while(rs.next()) {
System.out.println(rs.getInt(1));
}//getint(1)的意思是数据表中第一列数据,因为是整型所以用int
//next()从查询出的表的第一行开始,一次增加,当第一次循环,得到的是数据查询结果的第一行的第一列,第二次增加,得到的是第二行的第二列。
6,关闭资源,一定从最下面的开始
rs.close();//只有查询才有
stm.close();
conn.close();
注:
1,关于ResultSet的一些介绍:
ResultSet:结果集对象,封装查询结果
方法:
(1)next():游标向下移动一行
(2)getXXX(参数):获取数据类型
- XXX:代表数据类型 如:int getInt(),String getString();
- 参数:
1.int:代表列的编号,从1开始 如:getString(1)
2.string:代表列的名称。 如:getDouble(“balance”)
2,关于executeUpdate和executeQuery的介绍
(1)executeQuery
executeQuery()方法是在PreparedStatement对象中执行SQL查询,并返回该查询生成的ResultSet对象,
(2)executeUpdate
该方法是在PreparedStatement对象中执行SQL语句,该语句必须是一个SQL数据操作语言,例如INSERT, UPDATE,DELETE等语句,或者是没有返回内容的SQL语句.其最终返回值是更新的条数。
四,示例(Mysql数据库)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
public class JdbcDemo01 {
@Test
public void demo01() throws ClassNotFoundException, SQLException {
//1,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2,建立连接
Connection conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/mysql02","root","123456");
//3,通过Connection得到执行sql语句的Statement对象
Statement stm=conn.createStatement();
//4,通过Statement去执行SQL语句,并返回结果集
ResultSet rs=stm.executeQuery("SELECT * FROM emp");
//5,处理结果集
while(rs.next()) {
System.out.println(rs.getInt(1));
}
//6,关闭资源,一定从最下面的开始
rs.close();
stm.close();
conn.close();
}
}
执行结果:
为数据库中mysql02 中的emp表的第一列属性
PrepareStatement :防止SQL语句的注入。
/*
* 查询
*/
public void login(String name,int id) {
Connection conn=null;
PreparedStatement pstm=null;
ResultSet rs=null;
try {
//1,加载驱动
Class.forName( "com.mysql.jdbc.Driver");
//2,建立连接
conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/user","root","123456");
//3,处理预编译sql语句
//"select*from user where name='曹操' and id=101"
//?相当于占位符
pstm=conn.prepareStatement("select*from user where name=? and id=?");
//4,给占位符赋值
pstm.setString(1, name);
pstm.setInt(2, id);
//5,执行预编译sql语句并返回结果集
rs=pstm.executeQuery();
//6,循环遍历
while(rs.next()) {
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//7,关闭资源
try {
if(rs!=null) {
rs.close();}
if(pstm!=null) {
pstm.close();}
if(conn!=null) {
conn.close();}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
连接池
详情参照spring JdbcTemplate
package e_api;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
public class TestDemo {
public static void main(String[] args) {
//1,创建数据源(连接池)
BasicDataSource dataSource=new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mmsi");
dataSource.setUsername("root");
dataSource.setPassword("root");
System.out.println("数据库连接成功");
//2,创建模板
JdbcTemplate jdbcTemplate=new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
//3,通过api操作
jdbcTemplate.update("insert into t_user(username,password) values(?,?);", "tom","998");
System.out.println("数据库插入成功");
}
}