数据库厂商提供一个程序来完成 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();
}
}