外观
Java连接数据库
Java连接数据库需要三个类:Connection连接、Statement语句、ResultSet结果集。其中Connection类提供了和很多类型的数据库的连接接口;Statement类用于向数据库发送SQL语句,ResultSet类用于接收数据库返回的结果集,这三个缺一不可。下面用具体的例子演示如何使用JDBC技术连接数据库。
DriverManager类是一个驱动程序类,这里面提供了连接很多数据库的驱动。在获取连接对象时,使用DriverManager.getConnection(url,user,password)语句,其中url代表连接数据库的url,user代表用户名,password代表密码。将这个方法的返回值赋值给一个Connection变量后,调用这个对象的createStatement()方法就可以获取Statement对象了。将此对象赋值给一个Statement变量之后,就可以使用这个Statement对象的executeQuery(s)方法和executeUpdate(s)执行SQL语句了,其中executeQuery(s)会执行不改变数据库或数据表结构的语句,如查询语句,该方法会返回一个结果集对象,结果集后面会提到;executeUpdate(s)会执行改变数据库或数据表结构的语句,如插入语句,该方法会返回一个int类型的值,代表影响的数据行个数。在最后要按照使用顺序使用close()方法关闭结果集对象,语句对象和连接对象。
结果集介绍:结果集中存放了数据库返回的结果,结果集的成员方法next()是将指针移到下一个数据行,并返回true,若没有数据则返回false。成员方法getXXX(columnIndex)则代表返回该行数据的第columnIndex个元素的值,如第一个字段是varchar类型,就使用getString(1)获取数据,如第二个字段是int类型,就是要getInt(2)获取数据。
package SQL;
import java.sql.*;
public class DemoSQL {
public static void main(String[] args) throws SQLException {
//读取数据库中的信息
//在使用前,请在MySQL中以root用户创建数据库stu,在其下创建tb_stu数据表,并导入以下信息
/* id name birthday
* 1 'a' 2020-01-01
* 2 'b' 2020-01-02
* 3 'c' 2020-01-03
* */
Connection con; //Connection接口用于连接数据库
Statement stmt; //Statement接口用于给数据库发送语句
ResultSet res; //ResultSet接口用于接收数据库返回的结果
con = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "254456"); //第一步 先使用Connection接口连接数据库
stmt = con.createStatement(); // 第二步 使用连接后的Connection对象创建语句对象
res = stmt.executeQuery("select * from stu.tb_stu"); //对数据库进行查询的操作就用Query语句
while (res.next()) {
System.out.println("id = " + res.getInt(1) + " name = " + res.getString(2) + " birthday = " + res.getString(3));
res.close();
stmt.close();
con.close();
}
}
}package SQL;
import java.sql.*;
public class statement {
public static void main(String[] args) throws SQLException {
//statement用于代替数据库执行操作 首先要连接数据库 然后使用连接的对象创建statement对象 然后使用executeUpdate()执行更新数据的操作 使用executeQuery()执行查看的操作
Connection con;
Statement stmt;
//在运行此部分代码前 请确保idea已经连接到数据库stu 否则代码解析不能正常运行
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu", "root", "254456");
stmt = con.createStatement();
//1.添加数据
//注:可以同步打开数据库查看结果 将2和3注释掉再运行此部分
// int result1 = stmt.executeUpdate("insert into tb_stu (id, name, birthday) VALUES (4,'d','2020-01-04)')");
// System.out.println("有"+result1+"行被修改");
//2.修改数据
//注:可以同步打开数据库查看结果 将1和3注释掉再运行此部分
// int result2 = stmt.executeUpdate("update tb_stu set birthday = '2020-01-05' where birthday = '2020-01-04'");
// System.out.println("有"+result2+"行被修改");
//3.删除数据
//注:可以同步打开数据库查看结果 将1和2注释掉再运行此部分
// int result3 = stmt.executeUpdate("delete from tb_stu where id = 4");
// System.out.println("有"+result3+"行被修改");
stmt.close();
con.close();
}
}package SQL;
import java.sql.*;
public class preparedStatement {
public static void main(String[] args) throws SQLException {
Connection con;
PreparedStatement prestmt;
ResultSet res;
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu", "root", "254456");
//进行预处理时 可以用?代表通配符 在程序运行之前先用set函数指定通配符的内容 可以提高程序运行效率
prestmt = con.prepareStatement("select * from tb_stu where id = ?");
prestmt.setInt(1, 1);
//等同于执行select * from tb_stu where id = 1;
res = prestmt.executeQuery();
while (res.next()) {
System.out.println("id = " + res.getInt(1) + " name = " + res.getString(2) + " birthday = " + res.getString(3));
} //结果集可以调用getXXX()方法获取详细的值 参数是列名或列数
prestmt = con.prepareStatement("select * from tb_stu where name = ?");
prestmt.setString(1, "c");
res = prestmt.executeQuery();
while (res.next()) {
System.out.println("id = " + res.getInt(1) + " name = " + res.getString(2) + " birthday = " + res.getString(3));
res.close();
prestmt.close();
con.close();
}
}
}