JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从而实现对数据库中的数据操作的目的。下面是​JDBC连接数据库的六个步骤的概述!!!

1.注册驱动

Class.forName("com.mysql.jdbc.Driver")​;显示的加载到JVM中

2.获取连接

  • 要连接数据库的url----​ String url="jdbc:mysql://localhost:3306/test?"+ "useUnicode=true&characterEncoding=UTF8";//​防止乱码
  • 要连接数据库的用户名----​ String user="xxxx";
  • 要连接数据库的密ma---- ​String pass="xxxx"​;
//DriverManager下的方法:getConnection(String url,String username,String password)
Connection conn=DriverManager.getConnection(url,user,pass);

有问题直接看视频,比较直观:​​https://www.bilibili.com/video/BV1Bt41137iB​


接下来我们分析下url:

"jdbc(这是协议以jdbc开头):mysql(这是子协议,数据库管理系统称)://localhost(数据库来源地址):3306(目标端口)/test(要查询的表)?"

"useUnicode=true&characterEncoding=UTF8​";添加这个是为了防止乱码,指定使用Unicode字符集 ,且使用UTF-8来编辑。

3.创建一个Statement语句对象

主要三种方法:

//Connection接口下的方法:Statement createStatement()
Statement stmt=conn.createStatement();
PreparedStatement pstmt = conn.PreparedStatement() ;
CallableStatement cstmt =  conn.prepareCall("{CALL demoSp(? , ?)}") ;

下面我们来分析下他们:

  • Statement与 PreparedStatement对象的区别,PreparedStatement可以动态设置查询参数
  • 设置参数的方法 PreparedStatement.setXXXX(parameterIndex,value),如果数据库参数类型是varchar则用setString,如果参数类型是Integer 则用setInt
  • CallableStatement.setXXXX(parameterIndex,value) //按照参数的顺序设置valueCallableStatement.setXXXX(parameterName,value) //按照参数的名字来设置value,这个名字是在定义存储过程的时候的形式参数的名字
  • CallableStatement.registerOutParameter方法用于声明一个存储过程输出类型的参数,用以接收存储过程的输出值

4.执行SQL语句

除了查询语句是executeQuery();其他全部是executeUpdate();

ResultSet rs=stmt.executeQuery(Sql);

Statement接口下的方法:

  • boolean execute(String sql)----执行SQL语句,如果返回值是结果集则为true,否则为false
  • ResultSet executeQuery(String sql)----执行SQL语句,返回值为ResultSet
  • int executeUpdate(String sql)----执行SQL语句,返回值为所影响的行数

5.处理结果集

ResultSet对象的getXxxx方法,取决于数据库中表的字段的类型,例如:varchar2 对应方法是getString ,如果是 integer 对应方法是getInt/getLong

While(rs.next()){
rs.getInt(columnIndex); //通过列的序号来获取字段的值
rs.getString(columnName);//通过列的名字来获取字段的值


ResultSet接口下常见的方法:

  • beforeFirst()----将游标移动到ResultSet中第一条记录(的前面)
  • afterLast()----将游标移动到ResultSet中最后一条记录(的后面)
  • absolute(intcolumn)----将游标移动到相对于第一行的指定行,负数则为相对于最后一条记录
  • previous()----将游标上移一行
  • next()----将游标下移一行
  • ResultSet.TYPE_SCROLL_SENSITIVE----结果集可以滚动
  • ResultSet.CONCUR_READ_ONLY ----结果集只读,不能修改

6.关闭资源

操作完以后要关闭jdbc来释放jdbc资源。但是顺序要和你定义对象的时候相反,就像关门一样,从里面先关,一直往外关。

如下示例:

if(rs !=null){//1.关闭结果集
try{
rs.close();
} catch (SQLException e){
e.printStackTrace();
}
}
if(stmt !=null){//2.关闭声明的对象
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(conn !=null){//3.关闭连接 (记住一定要先关闭前面的1.2.然后在关闭连接)
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}

一个简单的(详细的)查询数据的例子:

public class jdbcTest {

public static void main(String[] args) throws Exception {

String jdbcName="com.mysql.jdbc.Driver";//定义驱动程序名为jdbcName内容为com.mysql.jdbc.Driver
String dbUserName="root";//定义用户名,写你想要连接到的用户。
String dbPassword="root";//用户密。
//定义url;jdbc是协议;mysql是子协议:表示数据库系统管理名称;localhost:3306是你数据库来源的地址和目标端口;test是我本人建的表位置所在处,你以你的为标准。
//防止乱码;useUnicode=true表示使用Unicode字符集;characterEncoding=UTF8表示使用UTF-8来编辑的。
String dbUrl="jdbc:mysql://localhost:3306/book?"+"useUnicode=true&characterEncoding=UTF8";

String sql="select * from student";//定义查询语句
Class.forName(jdbcName); //注册驱动程序,用java.lang包下面的class类里面的Class.froName();方法 此处的driver就是1里面定义的driver,也可以 Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);//获取数据库连接,使用java.sql里面的DriverManager的getConnectin(String url , String username ,String password )来完成

//构造一个statement对象来执行sql语句:主要有Statement,PreparedStatement,CallableStatement三种实例来实现
//三种实现方法分别为:Statement stmt = con.createStatement() ;
// PreparedStatement pstmt = conn.prepareStatement(sql) ;
//CallableStatement cstmt = conn.prepareCall("{CALL demoSp(? , ?)}") ;
Statement stmt=con.createStatement();

ResultSet rs=stmt.executeQuery(sql);//执行sql并返还结束 ;ResultSet executeQuery(String sqlString):用于返还一个结果集(ResultSet)对象。

//遍历结果集
while(rs.next()){
System.out.println("学生编号:"+rs.getInt("stuId")+",学生姓名:"+rs.getString("stuName")+",学生性别:"+rs.getString("stuSex")+",学生年龄:"+rs.getInt("stuAge"));//使用getString()方法获取你表里的资料名
}

if(rs!=null){//关闭记录集
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}

if(stmt!=null){//关闭说明对象
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}

if(con!=null){//关闭连接,就像关门一样,先关里面的,最后关最外面的
try{
con.close();
}catch(SQLException e){
e.printStackTrace();
}

}
}
}

JDBC连接数据库的六个步骤(步骤详解教程)#私藏项目实操分享#_结果集

JDBC连接数据库的六个步骤(步骤详解教程)#私藏项目实操分享#_sql_02