> 文章列表 > 数据库JDBC

数据库JDBC

数据库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();}
}