需要先导入此包
建表语句
create database jdbc;
create table users( id int PRIMARY key auto_increment, name
varchar(40), password varchar(40), email varchar(60), birthday DATE );insert into users(
name
,password
,email
,birthday
) values
(‘zs’,‘123456’,‘zs@sina.com’,‘1980-12-04’),
(‘lisi’,‘123456’,‘lisi@sina.com’,‘1980-12-04’),
(‘wangwu’,‘123456’,‘wangwu@sina.com’,‘1979-12-04’);
Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。需要注意的是,在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath中(这里指MySQL驱动JAR包)
DriverManager类用于加载JDBC驱动并且创建与数据库的连接。
Connection接口代表Java程序和数据库的连接,只有获得该连接对象后,才能访问数据库,并操作数据表。在Connection接口中,定义了一系列方法,其常用方法如下所示。
Statement接口用于执行静态的SQL语句,并返回一个结果对象。Statement接口对象可以通过Connection实例的createStatement()方法获得,该对象会把静态的SQL语句发送到数据库中编译执行,然后返回数据库的处理结果。在Statement接口中,提供了3个常用的执行SQL语句的方法,具体如下所示。
ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。
在ResultSet接口内部有一个指向表格数据行的游标(或指针),ResultSet对象初始化时,游标在表格的第一行之前调用next()方法可将游标移动到下一行。如果下一行没有数据,则返回false。在应用程序中经常使用next()方法作为while循环的条件来迭代ResultSet结果集。ResultSet接口中的常用方法如下所示。
通常,JDBC的使用可以按照以下几个步骤进行:
(1)加载并注册数据库驱动。
(2)通过DriverManager获取数据库连接。
(3)通过Connection对象获取Statement对象。
(4)使用Statement执行SQL语句。
(5)操作ResultSet结果集。
(6)关闭连接,释放资源。
package Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class test1 {
public static void main(String[] args) throws Exception {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "123456");
statement = connection.createStatement();
resultSet = statement.executeQuery("select * from users");
while (resultSet.next()) {
System.out.println(resultSet.getInt("id") + ":" + resultSet.getString("name") + ":" + resultSet.getString("password") +
":" + resultSet.getString("email") + ":" + resultSet.getDate("birthday"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
resultSet.close();
statement.close();
connection.close();
}
}
}
输出:
PreparedStatement对象可以对SQL语句进行预编译,预编译的信息会存储在该对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的数据,而不需要对SQL语句再次编译去查询数据库,这样就大大的提高了数据的访问效率。
package Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class test2 {
public static void main(String[] args) throws Exception {
Connection conn= null;
PreparedStatement ps=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc",
"root","123456");
String insert="insert into users(name,password,email,birthday) values" +
"(?,?,?,?)";
ps=conn.prepareStatement(insert);
ps.setString(1,"zl");
ps.setString(2,"123456");
ps.setString(3,"zl@sina.com");
ps.setString(4,"1987-12-23");
ps.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
}
}
}
再次运行第一次的代码:
ResultSet主要用于存储结果集,可以通过next()方法由前向后逐个获取结果集中的数据,如果想获取结果集中任意位置的数据,则需要在创建Statement对象时,设置两个ResultSet定义的常量,具体设置方式如下:
Statement st = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENITIVE,
ResultSet.CONCUR_READ_ONLY
);
ResultSet rs = st.excuteQuery(sql);
在上述方式中,常量“Result.TYPE_SCROLL_INSENITIVE”表示结果集可滚动,常量“ResultSet.CONCUR_READ_ONLY”
表示以只读形式打开结果集。
package Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class test3 {
public static void main(String[] args) throws Exception {
Connection conn=null;
Statement statement=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc",
"root","123456");
String sql="select * from users";
statement=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=statement.executeQuery(sql);
System.out.print("第二条数据为:");
rs.absolute(2);
System.out.println(rs.getString("name"));
System.out.print("第一条数据为:");
rs.beforeFirst();
rs.next();
System.out.println(rs.getString("name"));
System.out.print("第四条数据为:");
rs.afterLast();
rs.previous();
System.out.println(rs.getString("name"));
System.out.println();
}catch (Exception e){
e.printStackTrace();
}finally {
if(statement!=null){
statement.close();
}
if(conn!=null){
conn.close();
}
}
}
}
输出: