数据库JDBC

数据库厂商提供一个程序来完成 API 的转换,对原生 API 封装再提供成JDBC 的形状。

 

这个程序叫数据库驱动包。

JAVA程序员要想对数据库开发, 就要导入对应的数据库驱动包,才能编写代码。

数据库驱动是让JDBC认识数据库API 

URL 计算机里的一个常见术语唯一资源定位符~~ 描述网络上的某个资源所在的位置~~ 

"jdbc:mysql://127.0.0.1:3306/test1000?characterEncoding=utf8&useSSL=false"

 jdbc:mysql是固定的,取决于用什么数据库。

127.0.0.1:

mysql 数据库是一个"客户端服务器”结构的程序.客户端和服务器之间通过网络来通信~~
网络上确定主机的位置就是通过 IP 地址来确定的~~

咱们都是写作 127.0.0.1 叫做环回 IP,表示你自己的当前主机因为咱们的 数据库客户端(现在写的 dbc 代码),数据库服务器(之前装存数据的服务)是在一个主机上~~

3306:端口来区分应用程序数据库服务器默认端口就是 3306 。

test1000是要创建的数据库的名称 

SSL是加密协议,设为false是不加密。

 三步设置完后才能访问数据库服务器。

密码是安装数据库时的密码。

这个代码只是设置数据源,描述数据库服务器在哪~~还没真正和数据库服务器连接呢!!

使用这个代码进行连接。

 红线是一个异常。

异常分为受查异常和非受查异常。

受查异常 必须要显式处理。

非受查异常 不显式处理也没事

这里是受查异常。

加上下面这个就好了。

Connection定义变量类型,一定要用第一个。 

 

 

下面红线是对sql进行预编译的。

 为什么进行预编译?

如果请求是个 SQL 字符串,服务器是可以处理的服务器就需要对 SQL 进行解析,理解这里的含义并执行~~对于服务器的压力就比较大!!

让客户端来对 SQL 进行预编译, 服务器做的工作就简单一些,压力就会小不少

下面代码是把预编译过的sql语句发送给数据库服务器,由服务器进行响应。

其中executeUpdate返回int,表示影响的行数。

 

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCtest1 {
    public static void main(String[] args) throws SQLException {
        //1.创建并初始化一个数据源
        DataSource databsource=new MysqlDataSource();//向上转型
        ((MysqlDataSource)databsource).setUrl("jdbc:mysql://127.0.0.1:3306/test1000?characterEncoding=utf8&useSSL=false");
        //setUrl是子类有父类没有的方法,所以要转换为子类,这个过程是向下转型。
        //MysqlDataSource databsource=new MysqlDataSource();
        //        ((MysqlDataSource)databsource).setUrl();
        //这样写也是可以的,只不过上面那种写法在java中比较流行。
        ((MysqlDataSource)databsource).setUser("root");
        ((MysqlDataSource)databsource).setPassword("asdf6115855");
        //和数据库服务器建立连接
       Connection connection= databsource.getConnection();
       //构造sql语句
        String sql="insert into student value(1,'王五')";
        PreparedStatement statement=connection.prepareStatement(sql);
        //执行sql语句
        int ret=statement.executeUpdate();
        System.out.println("ret="+ret);
        //释放必要资源
        statement.close();
        connection.close();
    }
}

 其中上面的数据是死的,最好可以灵活输入内容。

 下面这样就可以了。

 但是这样写不美观。

我们可以用下面的方式,其中?是占位符。

 

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.*;

public class JDBCtest2 {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test1000?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("asdf6115855");
        Connection connection=dataSource.getConnection();
        String sql="select * from student";
        PreparedStatement statement=connection.prepareStatement(sql);
        ResultSet resultSet=statement.executeQuery();
        //遍历结果集合
        while(resultSet.next())
        {
            //把 resultSet 想象成一个表格,同时表格这里有个光标,初始情况下光标指向表最上面~
            //每次调用 next,光标往下走一行~~
            //当光标指向某一行的时候,就可以通过 getxxX 来获取到当前这行里的数据
            int id=resultSet.getInt("id");
            String name=resultSet.getString("name");
            System.out.println("id ="+ id +", name ="+name);
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南种北李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值