胡豆秆

个人博客

欢迎来到我的个人博客~


JDBC的简单使用


​ JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。访问MySQL数据库需要用到第三方的jar包(mysql-connector-java-5.1.6.jar)。

​ JDBC的使用比较简单。

public class Demo {
	public static void main(String[] args) throws Exception{
		//加载驱动 该方法并没有返回值,只是使用反射将驱动类加载到JVM中。
		Class.forName("com.mysql.jdbc.Driver");
		//通过DriverManager获取Connection 数据库需存在
		Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysqldemo?charset=utf8", "账号", "密码");
		//定义SQL语句
		String sql = "create table user("
				+ "id int primary key auto_increment,"
				+ "name varchar(10) not null,"
				+ "age int not null)";
		//执行SQL语句
		Statement statement = connection.createStatement();
		statement.execute(sql);
        //记得释放资源
        statement.close();
		connection.close();
	}
}

​ 在Statement中使用字符串拼接的方式,该方式存在句法复杂,容易犯错等缺点。所以Statement在实际过程中使用的非常的少,一般都是使用PreparedStatement来执行SQL语句。PreparedStatement对于Statement的主要区别在于预处理,SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。除此之外,还能够通过设置参数,指定相应的值,而不是Statement那样使用字符串拼接。

//定义SQL语句
String sql = "insert into user(name,age) values(?,?)";
//执行SQL语句
PreparedStatement prepareStatement = connection.prepareStatement(sql);
//设置参数,第一个int值表示sql语句中的第几个占位符 ? ,后面接参数值
prepareStatement.setString(1, "胡");
prepareStatement.setInt(2,22);
//executeUpdate方法返回影响行数
int count = prepareStatement.executeUpdate();
System.out.println("该操作影响了" + count + "行!");

​ 在 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些预处理过的语句返回多个结果,使用execute 方法处理这些复杂的语句,executeQueryexecuteUpdate 处理形式更简单的语句。

executeUpdate一般用于处理增、删、改语句,该方法会返回执行语句后影响的行数。若需要执行需要返回结果的查询语句,则需要使用execute方法或executeQuery方法。

//执行SQL语句
//		Statement statement = connection.createStatement();
//		boolean execute = statement.execute(sql);
//		if(execute) {
//			ResultSet resultSet = statement.getResultSet();
//			while(resultSet.next()) {
//				int id = resultSet.getInt("id");
//				String name = resultSet.getString("name");
//				int age = resultSet.getInt("age");
//				System.out.println("id:" + id + " name:" + name + " age:" + age);
//			}
//		}
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet resultSet = prepareStatement.executeQuery();
while(resultSet.next()) {
    int id = resultSet.getInt(1);
    String name = resultSet.getString(2);
    int age = resultSet.getInt(3);
    System.out.println("id:" + id + " name:" + name + " age:" + age);
}

execute 方法返回一个 boolean 值,指示第一个结果的形式。如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false。必须调用 getResultSetgetUpdateCount 方法获取该结果,必须调用 getMoreResults 获取任何后续结果。

executeQuery方法会返回一个resultSet对象,查询的结果集会封装在该对象中。


总结

Statement和PreparedStatement的异同及优缺点

同:两者都是用来执SQL语句的

异:PreparedStatement需要根据SQL语句来创建,它能够通过设置参数,指定相应的值,不是像Statement那样使用字符串拼接的方式。

PreparedStatement的优点:

1、其使用参数设置,可读性好,不易记错。在statement中使用字符串拼接,可读性和维护性比较差。

2、其具有预编译机制,性能比statement更快。

3、其能够有效防止SQL注入攻击。

execute和executeUpdate的区别

相同点:二者都能够执行增加、删除、修改等操作。

不同点:

1、execute可以执行查询语句,然后通过getResult把结果取出来。executeUpdate不能执行查询语句。

2、execute返回Boolean类型,true表示执行的是查询语句,false表示执行的insert、delete、update等。executeUpdate的返回值是int,表示有多少条数据受到了影响。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦